読者です 読者をやめる 読者になる 読者になる

モチログ

はてなでのブログ

Intel Edison でNode-REDを使う

コミット

買ったのは良いけど、一年前くらいにLチカをして以来、放置していたので、面白そうなNode-REDをEdisonに入れてみました。
また、TI社のSensorTagを使えるようにしたいと思います。
使用しているのは、Edison+Arduino拡張ボードのKITです。

Edisonのファームウェア、OSイメージの更新

久しぶりなので、とりあえず状態を最新にする。 公式のページからインストーラをダウンロード、インストーラを起動すると、必要なソフトを入れてくれると共に、Edisonのアップデートもしてくれる。ただし、EdisonのOSイメージがちゃんと動いて、EdisonのファイルシステムがOSから見えるようになっている必要がある(マイクロUSBとUSBの間にあるスイッチがマイクロUSB側にある状態で)。インストーラの指示に従えば完了する。

インストーラがちゃんとEdisonを認識しない場合

まずいですよ。EdisonのOSイメージが壊れて正しくドライバが当たっていない可能性があります。
詰んだように感じますが、ちゃんと復旧する手段があります。

  1. Firmwareイメージのダウンロード
    1.1 上記公式のリンクから、Release 2.1 Yocto* complete image (2016-03-20現在)をダウンロード。解凍もしておく。
  2. dfu-utilのダウンロード
    2.1 Macの場合 brew install dfu-util でインストール可能です。
    2.2 Windowsの場合 フォーラムにあるダウンロードURLからダウンロード可能。それをダウンロードしたファームウェアイメージを解凍して出来たフォルダ内(flashall.batがあるフォルダ)と同じ所に置く。
  3. Windowsコマンドプロンプトや、Macのシェルで解凍したファームウェアのフォルダに移動。 Windowsの場合、.\flashall.batMacの場合、 ./flashall.shを実行する。スクリプトが待ち状態になるので、EdisonのマイクロUSB(2本とも)を接続してブートさせる。インストールが始まればあとは完了まで待つ。

Edisonの設定

起動したらrootでログイン。たしか、デフォルトではパスワード無しでログインできる。 configure_edison --setupで、Edisonの設定スクリプトを立ち上げ、パスワードと、Wifiの接続を行う。 ip aでアドレスが調べられるはずなので、sshでつながるかチェック。つながればOK。

Boot領域の拡大

今回の作業では問題になることは無いですが、デフォルトで割り当てられているBootのパーティション領域が小さいため、デフォルト以外のレポジトリを追加している状態で、不用意にopkg upgradeをすると、Boot領域が足りずOSイメージがおかしくなることがあります(2敗)。 なので、念のため、事前にBoot領域の拡大をしておきます。以下、SSHでログインしている状態での作業です。

  1. Backup boot data:

    root@edison1:~# ls -la /boot  
    root@edison1:~# mkdir /home/root/boot-bkp  
    root@edison1:~# cp -rp /boot/* /home/root/boot-bkp/  
    root@edison1:~# ls -la /home/root/boot-bkp/  
    
  2. Resize boot partition:

    root@edison1:~# umount /boot  
    root@edison1:~# mkfs.vfat -v -nboot -F16 /dev/mmcblk0p7  
    root@edison1:~# mount /boot  
    root@edison1:~# df -h /boot  
    
  3. Restore boot data:

    root@edison1:~# cp -rp /home/root/boot-bkp/* /boot  
    root@edison1:~# ls -la /boot  
    root@edison1:~# rm -r /home/root/boot-bkp  
    

パッケージの更新とインストール

とりあえず初期状態からのアップデートopkg update; opkg upgrade
その後、必要なパッケージを入れるためにレポジトリの追加を行う。
vi /etc/opkg/iotkit.confで下記レポジトリを追加

src iotdk http://iotdk.intel.com/repos/2.0/iotdk/i586/  

vi /etc/opkg/base-feeds.confで下記レポジトリを追加

src/gz core2-32 http://repo.opkg.net/edison/repo/core2-32  

gitとsysconfig-devをインストール

opkg update; opkg install git sysconfig-dev

Node-REDのインストール

npm -g install node-red  
npm -g install --unsafe-perm node-red-node-serialport  

Node-REDの起動

ホームディレクトリに移動して node-redと実行すると、$HOME/.node-redにデフォルトのファイルが作成され、node-redが起動します。
別のPCのウェブブラウザでhttp://edisonのIPアドレス:1880でNode-REDのページが表示されればOK。
EdisonのNode-redをCtrl-Cで終了し、cd ~/.node-redに移動し、下記コマンド

npm install node-red-node-sensortag  
npm install node-red-node-intel-gpio  
npm install node-red-contrib-grove-sensros-edison  

SensorTag以外にも入れていますが、GPIOやGroveのセンサーを扱えるようになるものを入れています。
node-redで再度Node-REDを立ち上げ、ウェブブラウザで再読込したら左のFlowアイコンの下の方が増えていれば成功です。

Node-REDがEdison起動時に自動で実行されるよう設定

pm2を入れるのが良さそうです(参照)。
インストールと設定は下記

npm -g install pm2  
pm2 start /usr/bin/node-red -- -v  
pm2 save  
pm2 startup systemd  

エラーでるので下記コマンド

pm2 dump && systemctl daemon-reload && systemctl enable pm2 && systemctl start pm2  

Edisonではちゃんと動かないので、下記ファイルを変更
/etc/systemd/system/pm2.serviceを書き換え

ExecStart=/bin/su root -c 'pm2 resurrect'  
ExecReload=/bin/su root -c 'pm2 reload all'  
ExecStop=/bin/su root -c 'pm2 dump'  
ExecStop=/bin/su root -c 'pm2 delete all'  
ExecStop=/bin/su root -c 'pm2 kill'  

systemdでrestartするのがめんどくさいので、再起動。うまく行かない場合、上記pm2 start...と、pm2 save, pm2 dump...のコマンドをやってみるとうまくいくかもしれません。うろ覚え。

pm2コマンドの簡単な使い方

指定したプロセスには今回node-redを指定しています。
pm2でマネージしているプロセス一覧: pm2 list
指定したプロセスの情報表示:pm2 info node-red
指定したプロセスの実行時のログ出力を見る:pm2 logs node-red
指定したプロセスの再起動:pm2 restart node-red

SensorTagを使えるようにBLEを有効にする

下記コマンドを実行

/usr/sbin/rfkill unblock bluetooth  
/usr/bin/hciconfig hci0 up  

Edison起動時に有効にするために/etc/rc.localを作成して、下記内容を書く。

#!bin/sh  
/usr/sbin/rfkill unblock bluetooth  
/usr/bin/hciconfig hci0 up  
exit 0  

実行権限をつける
chmod 755 /etc/rc.local

終わりに

肝心のNode-REDでSensorTagの情報をとる部分が力尽きたので、次回以降にまわします。