妻と子供が実家に帰っていることをいいことに、半日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チカできます。
#開封から組み立て、ログイン
Edisonとbreakout boardをコネクタで接続して2箇所ネジ止めする。
USBケーブルを2本つなぐ。
写真の上がUSBシリアル、下が電源。
接続したらいきなりlinuxが立ち上がっているはずなのでシリアルコンソールからログインできる。
$ sudo cu -s 115200 -l /dev/cu.usbserialxxxxxxxxxxxxxx
xxxxxxxの部分は環境によって異なると思うので適宜。
ユーザー名rootでパスワード無しでログインできる。
ファームウェアアップデート
ログインして色々いじっていると、何故か文字入力一文字目を取りこぼす。
バグらしく、ファームウェアアップデートで治るらしいのでやってみる。
(正確にはファームウェアではないような気がするが、ここではファームウェアとする。)
ちなみにバグの出るバージョンは以下。
$ 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にするのでディスクユーティリティを開く。
「Linux File-CD Gadget Media」を選択、パーティションタブを選択。
パーティションのレイアウトを1にして名前をEDISONに変更。
写真のような設定で適用する。
もし「ディスクのマウントを解除できませんでした。」というエラーが出る場合、ターミナルで/Volume/Edisonから別の場所に移動してから適用ボタンを押すと上手くいく。
これでFAT32でフォーマットされる。
ここから最新のEdison Yocto complete imageをダウンロードする。
zipファイルを解凍して、中身をすべてEDISONにコピーする。
コピーが完了したらシリアルコンソールで接続する。
ログイン後、
$ 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を求められるのでする。
左側のメニューから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が表示されているはずなのでそれを選択する。
サンプルコードを実行してみる。
...
何も起こらない。
それもそのはずで、breakoutboardには制御できるLED等がついていない。
どうしようかなと思ったが、今日ははんだづけするテンションではなかったのでオシロスコープで波形を見ることにした。
mraaで指定するポート番号はgithubのドキュメントに書いてある。
例えばこのサンプルでは
var myOnboardLed = new mraa.Gpio(13);
としているので、13に対応するJ17-14が物理的に制御される。
breakout boardのピンアサインはEdison Breakout Board Hardware Guideに書いてある。
上の波形は
setTimeout(periodicActivity,10);
を指定した時の波形です。
横軸1マスが10msなので、大体合ってます。
あとはここに回路を接続すればハードウェアの制御をすることができます。
ポートの電圧が1.8vなので少し扱いづらいですね。
USBシリアルポートを使ってArduinoにつないでしまうとか、Arduino breakout boardを使ったほうがお手軽かもしれません。