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イメージが壊れて正しくドライバが当たっていない可能性があります。
詰んだように感じますが、ちゃんと復旧する手段があります。
- Firmwareイメージのダウンロード
1.1 上記公式のリンクから、Release 2.1 Yocto* complete image (2016-03-20現在)をダウンロード。解凍もしておく。 - dfu-utilのダウンロード
2.1 Macの場合brew install dfu-util
でインストール可能です。
2.2 Windowsの場合 フォーラムにあるダウンロードURLからダウンロード可能。それをダウンロードしたファームウェアイメージを解凍して出来たフォルダ内(flashall.batがあるフォルダ)と同じ所に置く。 - Windowsのコマンドプロンプトや、Macのシェルで解凍したファームウェアのフォルダに移動。 Windowsの場合、
.\flashall.bat
、Macの場合、./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でログインしている状態での作業です。
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/
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
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の情報をとる部分が力尽きたので、次回以降にまわします。