Node.js
IoT
Edison

Edisonを開封してからnode.jsでIOポート制御するまで

More than 3 years have passed since last update.

妻と子供が実家に帰っていることをいいことに、半日Edisonをいじってみた。

node.jsでIOポート制御する所まで行けたのでまとめておく。

前提として、

- MacBook Air (11-inch, Mid 2011)

- OSX Yosemite(10.10)

- Edison

- Breakout board

です。

Intel公式ドキュメントを見ると、初めての人はArduino Breakout boardを使うといいぜ!と書いてあるのでArduinoボード買ったほうが難易度下がると思います。

多分node.jsなんか使わなくてもArduino IDEからLチカできます。


開封から組み立て、ログイン

IMG_3765.JPG

Edisonとbreakout boardをコネクタで接続して2箇所ネジ止めする。

USBケーブルを2本つなぐ。

写真の上がUSBシリアル、下が電源。

接続したらいきなりlinuxが立ち上がっているはずなのでシリアルコンソールからログインできる。

$ sudo cu -s 115200 -l /dev/cu.usbserialxxxxxxxxxxxxxx

xxxxxxxの部分は環境によって異なると思うので適宜。

ユーザー名rootでパスワード無しでログインできる。

スクリーンショット 2014-11-09 16.43.17.png


ファームウェアアップデート

ログインして色々いじっていると、何故か文字入力一文字目を取りこぼす。

バグらしく、ファームウェアアップデートで治るらしいのでやってみる。

(正確にはファームウェアではないような気がするが、ここではファームウェアとする。)

ちなみにバグの出るバージョンは以下。

$ cat /etc/version

edison-weekly_build_56_2014-08-20_15-54-05

ここを参考にmacから更新してみる。

電源側のUSBケーブルをmacに接続すると、ストレージデバイスとして認識する。

ターミナルでEdisonディレクトリに移動。

$ cd /Volumes/Edison

Edison以下のファイルを全て削除する。

$ sudo rm -rf *

$ sudo rm –rf \.*

次にFinderのEdisonを右クリック > 情報を見る > フォーマットがFAT16の場合、FAT32にするのでディスクユーティリティを開く。

スクリーンショット 2014-11-09 17.15.16.png

「Linux File-CD Gadget Media」を選択、パーティションタブを選択。

パーティションのレイアウトを1にして名前をEDISONに変更。

写真のような設定で適用する。

スクリーンショット 2014-11-09 17.18.05.png

もし「ディスクのマウントを解除できませんでした。」というエラーが出る場合、ターミナルで/Volume/Edisonから別の場所に移動してから適用ボタンを押すと上手くいく。

これでFAT32でフォーマットされる。

ここから最新のEdison Yocto complete imageをダウンロードする。

zipファイルを解凍して、中身をすべてEDISONにコピーする。

スクリーンショット 2014-11-09 17.26.33.png

コピーが完了したらシリアルコンソールで接続する。

ログイン後、

$ reboot ota

で更新が始まる。

注意:これをするとconfiguration settings含めてすべて削除される。

しばらく待つとコマンドプロンプトが帰ってくる。

これで更新完了。

$ cat /etc/version

edison-rel1-maint-weekly_build_16_2014-10-14_14-56-19


ConfigureでWi-Fi設定

configure_edisonコマンドを使うと、Wi-Fiの設定、ログインパスワードの設定ができる。

$ configure_edison --setup

Configure Edison: Device Name

Give this Edison a unique name.
This will be used for the access point SSID and mDNS address.
Make it at least five characters long (leave empty to skip): #名前をつける

Enter a new password (leave empty to abort)
This will be used to connect to the access point and login to the device.
Password: #パスワードを設定する

Configure Edison: WiFi Connection

Scanning: 1 seconds leftt

0 : Rescan for networks
1 : Manually input a hidden SSID
2 : xxxxx
3 : xxxxx
....

Enter 0 to rescan for networks.
Enter 1 to input a hidden network SSID.
Enter a number between 2 to 16 to choose one of the listed network SSIDs: #Wi-Fi接続設定

Is xxxxxxxxxx correct? [Y or N]: Y
Password must be between 8 and 63 characters.
What is the network password?: ******************
Initiating connection to xxxxxxxxx. Please wait...
Attempting to enable network access, please check 'wpa_cli status' after a minute to confirm.
Done. Please connect your laptop or PC to the same network as this device and go to http://10.0.1.10 or http://xxxxxxxxxxx.local in your browser.

最後に表示されるURLにブラウザからアクセスするとDevice Informationページが表示される。

これでEdisonのWi-Fiが有効になった。

SSHもできるよ。

$ ssh root@10.0.1.10 #先ほど表示されたIPアドレス

root@10.0.1.10's password:
root@kinu-edison01:~#

ただし、キー入力の反応がめちゃめちゃ遅い。

シリアル接続のほうがストレスがない。


パッケージのアップデート

ここを参考にした。

主にlibmraaの更新をしたい。

これが古いと次にやるXDKビルドの時にコケる。

Edisonにログインして、

$ echo "src intel-iotdk http://iotdk.intel.com/repos/1.1/intelgalactic" > /etc/opkg/intel-iotdk.conf

$ opkg update
$ opkg upgrade

これでおkだった。


XDK IoT Editionを使ってnode.jsでポート制御

XDKをここからダウンロードする。

解凍してインストール。

XDKを起動するとSign upを求められるのでする。

スクリーンショット 2014-11-09 18.02.51.png

左側のメニューからStart with a Sample or Templateを選択、Onboard LED Blinkを選択。

適当に名前をつけてCreate。

画面左下のIoT DeviceからEdisonに接続する。

多分それらしきものが表示されていないので、Edisonにログインして

$ xdk-whitelist --add 10.0.1.16 #macのIPアドレス

$ systemctl enable xdk-daemon
$ systemctl restart xdk-daemon

する。

XDKに戻ると、自分のEdisonが表示されているはずなのでそれを選択する。

スクリーンショット 2014-11-09 19.09.06.png

サンプルコードを実行してみる。

...

何も起こらない。

それもそのはずで、breakoutboardには制御できるLED等がついていない。

どうしようかなと思ったが、今日ははんだづけするテンションではなかったのでオシロスコープで波形を見ることにした。

mraaで指定するポート番号はgithubのドキュメントに書いてある。

例えばこのサンプルでは

var myOnboardLed = new mraa.Gpio(13);

としているので、13に対応するJ17-14が物理的に制御される。

breakout boardのピンアサインはEdison Breakout Board Hardware Guideに書いてある。

IMG_3766.JPG

IMG_3767.JPG

上の波形は

setTimeout(periodicActivity,10); 

を指定した時の波形です。

横軸1マスが10msなので、大体合ってます。

あとはここに回路を接続すればハードウェアの制御をすることができます。

ポートの電圧が1.8vなので少し扱いづらいですね。

USBシリアルポートを使ってArduinoにつないでしまうとか、Arduino breakout boardを使ったほうがお手軽かもしれません。