超小型マイコンボード「Intel Edison」のセットアップ 〜 Milkcocoaと連携させる手順を初心者向けに解説します。

Posted: / Modified: / Tags: Edison Node.js



超小型マイコンボード「Intel Edison」のセットアップ 〜 Milkcocoaと連携させる手順を初心者向けに解説します。

TesselRaspberryPiとMilkcocoa連携をしてきましたが、今回は、 Intel Edison とMilkcocoaを連携させてみようと思います。Macの方向けになります。

Edisonについて

EdisonはIntelが開発したマイコンボードです。LinuxOSが搭載されているので超小型のパソコンという認識でもいいかもしれません。

  1. Intel Edison Kit for Arduino
  2. Intel Edison Breakout Board Kit

Edison自体はSDカードくらいで小さいのですが、開発にはEdisonを乗せるボードが必要になります。 このボードには「1.Arduino互換ボード」と「2.Breakout Board」があります。

1.はArduino互換ということもあり、Arduinoでの開発に慣れている方にはとっつきやすそうですが、結構大きめです。 2.はEdisonの一回りくらい大きいくらいでかなり小さいです。

サイズや金額、使いやすさなどでどちらにするか判断しましょう!

今回私はオススメされたという理由(笑)で、2.を選択して購入しました。

購入・ハード側の準備

購入は上記リンクのスイッチサイエンスから購入して、二日くらいで届きました。

  • Edison本体
  • Breakout Board
  • マイクロUSB
  • 留め具

が同梱されています。

メインはこの二つになります。上がEdison 下がBreakout Boardです。

Breakout BoardのネジにEdisonの穴を合わせて組み立てましょう。

"カチっ"とハマるまで押し込みます。

開発環境

以下の開発環境で行いました。Macでしか試していません。Windows等では少し手順が違うと思います。

  • Mac OS X 10.10 yosemite
  • Edison
  • Node.js
  • Milkcocoa

Edisonのセットアップ

準備ができたら、早速Edisonのセットアップをしていきましょう。

Macへドライバのインストール

まずは、Macにドライバをインストールします。 この辺りからダウンロードして下さい。

現在最新のrelease7を落としました。

あとは普段通りインストールウィザードを進めていきます。

インストールした段階で一旦再起動しました。(もしかしたら再起動しなくても大丈夫かもしれません。)

SSHでの接続テスト

MacとEdisonをUSBで接続します。Breakout BoardにはマイクロUSBポートが二つありますが、写真のように下のポートを使いましょう。

Macで[システム環境設定 > ネットワーク]を開いて少し経つとMultifunction Composite Gadgetというデバイスが認識されるのが分かると思います。(ここで認識に結構時間がかかる場合があります。)

認識されない場合はこちらの記事を参考にしてみてください。

IPv4の設定をDHCPサーバを使用(アドレスは手入力)にしてIPアドレスに192.168.2.2を入力します。

Macでターミナルを起動させます。

以下を実行してEdisonに接続します。

$ ssh root@192.168.2.15

Edisonにログインできました。 Edisonは初めからYoctoというディストリビューションのLinuxOSが搭載されています。

root@edison:~# cat /etc/version
edison-weekly_build_56_2014-08-20_15-54-05

バージョンの確認をします。

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

こちらからIntel® Edison Board Softwareをダウンロードしましょう。 執筆時点ではRelease 2.1 Firmwareが最新でした。

Windows向けっぽいのもあるんですけど今回はそっちではないので気をつけましょう。

USBで接続している状態だとMacではデバイスとしてEdisonが認識されます。

こんな感じでEdisonがネットワークデバイスとしても認識されます。ここにダウンロードしたファームウェアのzipを置いて展開しました。

解凍した中身をEdisonフォルダ直下に移動させます。

Edisonでreboot otaコマンドでリブートして焼き込みます。

root@edison:~# reboot ota
Connection to 192.168.2.15 closed by remote host.
Connection to 192.168.2.15 closed.

ここで しばらく待ちます 体感5~10分。

※追記(2015-11-08):reboot otaから先に進めない方は以下の記事を参考にして下さい。

Edisonというネットワークデバイスが認識されました。

先ほどと同じく、アドレス手入力で192.168.2.2を設定します。

SSHで再接続してみます。このようなエラーが出ました。

$ ssh root@192.168.2.15
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
ec:29:34:65:e6:8c:2d:f4:25:13:f9:ae:f8:14:ec:91.
Please contact your system administrator.
Add correct host key in /Users/sugawara_nobisuke/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/sugawara_nobisuke/.ssh/known_hosts:28
RSA host key for 192.168.2.15 has changed and you have requested strict checking.
Host key verification failed.

参考サイトでは以下のようにありました。

自分の場合はネットワークインタフェースもリセットされてしまったのでもう一回プライベート IP を振ってやって known_hosts に一度登録されていた鍵を削除して SSH でつなぎ直しました。

~/.ssh/known_hostsを編集して、(おそらく)最終行に追加してある192.168.2.15から始まる行を削除してknown_hostsを保存します。

$ vim ~/.ssh/known_hosts
#~/.ssh/known_hostsを編集#
192.168.2.15 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvWyOXs0Hk...(これを削除)

そしたらエラーなく入れます。

$ ssh root@192.168.2.15
The authenticity of host '192.168.2.15 (192.168.2.15)' can't be established.
RSA key fingerprint is ec:29:34:65:e6:8c:2d:f4:25:13:f9:ae:f8:14:ec:91.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.2.15' (RSA) to the list of known hosts.
root@edison:~#

バージョンを確認します。

# cat /etc/version
weekly-146

このような表記になったのですが、(たぶん)アップデートできています!

各種設定

Edisonを使う上で必要な設定をします。configure_edison --setupを実行しましょう。

# configure_edison --setup

すると対話的なインターフェイスに移ります。

パスワード設定

まずはパスワードを決めましょう。任意のパスワードを入力します。

Configure Edison: Device Password

Enter a new password (leave empty to abort)
This will be used to connect to the access point and login to the device.
Password:   ********(パスワード入力)
Please enter the password again:  ********(パスワード再入力)

デバイス名設定

次にデバイス名を決めます。任意のデバイス名を指定しましょう。最後にYを押します。

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): (ここにデバイス名を記述。私の場合はn0bisukeにしました。)

Is n0bisuke correct? [Y or N]: (Yを押しましょう)

Wifi設定

3~9にwifiのSSIDリストが表示されます。3~9に表示されているSSIDを選択してYで確定しましょう。

Configure Edison: WiFi Connection

Scanning: 1 seconds left

0 : Rescan for networks
1 : Exit WiFi Setup
2 : Manually input a hidden SSID
3 : LIG_JAY_NETWORK
4 : LIG-PocketWiFi003
5 : 395EACE6548684FD26CA4B15575DD5CC
6 : 7890DFA756F6970059C439F02B451881
7 : LIG_A_NETWORK
8 : LIG_NGB_NETWORK
9 : \xe5\xa4\xa7\xe5\xa1\xa9\xe5\xb9\xb3\xe5\x85\xab\xe9\x83\x8e\xe3\x81\xaeLAN


Enter 0 to rescan for networks.
Enter 1 to exit.
Enter 2 to input a hidden network SSID.
Enter a number between 3 to 9 to choose one of the listed network SSIDs: (3~9の数字を入力)

Is LIG_NGB_NETWORK correct? [Y or N]: (Yを押しましょう)

あとはWifiのパスワードを要求されるので入力します。無事に接続できるとhttp://192.168.11.167 or http://n0bisuke.localのようにIPが割り振られます。

Password must be between 8 and 63 characters.
What is the network password?: *************(パスワード入力)
Initiating connection to LIG_NGB_NETWORK. 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://192.168.11.167 or http://n0bisuke.local in your browser.

ネットワーク接続の確認

Macなどのブラウザからhttp://xxx.xxx.xxx.xxxhttp://xxxxxxx.localにアクセスしてみましょう。 (私の場合はhttp://192.168.11.167 or http://n0bisuke.local)

HostnameとIP Addressがブラウザに表示されます。これで無事にEdisonがネットワークに接続できたことが確認できました。

パスワード設定の確認

一度ログアウトしてみましょう。(実行中jobがある場合?)exitコマンドを二回くらい続けて入力するとsshログアウトできます。

# exit
logout
There are stopped jobs.

# exit
logout
Connection to 192.168.2.15 closed.

今まではパスワードは聞かれませんでしたが、先ほどパスワード設定をしたので、そのパスワードでsshログインができるようになることを確認しましょう。

$ ssh root@192.168.2.15
root@192.168.2.15's password:
root@n0bisuke:~#

opkgのアップデートとgitのインストール

実際にプログラムを作成する際にGitは必須ツールになります。Edisonではデフォルトでgitはインストールされていないのでインストールする必要がありますが、パッケージマネージャーのopkgのバージョンによってはデフォルトでgitはパッケージ登録されていません。

opkgのアップデート

まずはopkgのアップデートをしましょう。

参考: Edison上のYocto Linuxで採用されたパッケージマネージャ opkg をいじる

参考にしたサイトの通りに入力していきます。

# tee /etc/opkg/base-feeds.conf << _EOF_ >/dev/null

src/gz all        http://repo.opkg.net/edison/repo/all
src/gz edison     http://repo.opkg.net/edison/repo/edison
src/gz core2-32   http://repo.opkg.net/edison/repo/core2-32
_EOF_
# tee /etc/opkg/intel-iotdk.conf << _EOF_ >/dev/null
src intel-all     http://iotdk.intel.com/repos/1.1/iotdk/all
src intel-iotdk   http://iotdk.intel.com/repos/1.1/intelgalactic
src intel-quark   http://iotdk.intel.com/repos/1.1/iotdk/quark
src intel-i586    http://iotdk.intel.com/repos/1.1/iotdk/i586
src intel-x86     http://iotdk.intel.com/repos/1.1/iotdk/x86
_EOF_

入力後にopkg updateopkg upgradeでパッケージの更新をします。

# opkg update

Downloading http://iotdk.intel.com/repos/1.1/intelgalactic/Packages.
Updated list of available packages in /var/lib/opkg/iotkit.
# opkg upgrade

Upgrading libmraa0 on root from 0.6.1-r0 to 0.6.2...


gitのインストール

# opkg install git

これだけです。

# git --version

バージョンが表示され、無事にインストールできていることが確認できると思います。

Milkcocoaと接続してみる

EdisonではデフォルトでNode.jsとnpmが利用できます。

まずはnpmでインストールしましょう。

# npm install milkcocoa

Milkcocoaのサイトのドット絵と連携するコードを書いてみます。

# vi app.js
// app.js
var MilkCocoa = require('milkcocoa');
var milkcocoa = new MilkCocoa('dogi9jz8c16.mlkcca.com');
var ds = milkcocoa.dataStore("dots");

ds.on('push',function(data){
  console.log(data.value);
});

たったこれだけです。簡単ですね。

Milkcocoaサイトで絵を描いた時にpushイベントが発火されて、app.jsではpushイベントを受け取ったらデータをコンソールに表示させるようにしています。 それでは実行してみましょう。

# node app.js

こんな感じで連携しているのが分かると思います。

MilkcocoaでLチカしてみる

Edisonをマイコンボードとして活用してみましょう。 マイコンボード界のハローワールドといえばLチカですね。 MilkcocoaからLチカ操作をしてみます。

準備物

  • LED
  • 導線x2
  • ブレッドボード

線をつなげる

参考記事をもとに繋げてみましょう。

参考: Edison 初期化からLチカまでやってみた

LEDの長い方(アノード)を J18の2番 に、短い方(カソード)を J19の3番 に、につなぎます。

MRAAのインストール

プログラムからEdisonのGPIOなどにアクセスできるようにするライブラリとしてMRAAというものをintelが用意してくれているので使ってみましょう。

# opkg install libmraa0

サンプルの実行

サンプルをクロンします。

# git clone https://github.com/intel-iot-devkit/mraa.git

examples/javascript/Blink-IO.jsを使ってみます。

// Blink-IO.js
var m = require('mraa'); //require mraa
console.log('MRAA Version: ' + m.getVersion()); //write the mraa version to the console

var myLed = new m.Gpio(13); //LED hooked up to digital pin 13 (or built in pin on Galileo Gen1 & Gen2)
myLed.dir(m.DIR_OUT); //set the gpio direction to output
var ledState = true; //Boolean to hold the state of Led

periodicActivity(); //call the periodicActivity function

function periodicActivity()
{
  myLed.write(ledState?1:0); //if ledState is true then write a '1' (high) otherwise write a '0' (low)
  ledState = !ledState; //invert the ledState
  setTimeout(periodicActivity,1000); //call the indicated function after 1 second (1000 milliseconds)
}

var myLed = new m.Gpio(13)の部分をvar myLed = new m.Gpio(15)に変更しましょう。

これで実行するとLEDが1秒おきに点灯します。 Lチカ完成ですね!

MilkcocoaからLチカ

先ほどのソースコードを少し変更してみます。

// app.js
var MilkCocoa = require('milkcocoa');
var milkcocoa = new MilkCocoa('dogi9jz8c16.mlkcca.com');
var ds = milkcocoa.dataStore("dots");

var m = require('mraa'); //mraaの読み込み
var myLed = new m.Gpio(15); //使用するPINの番号を指定
myLed.dir(m.DIR_OUT);
var ledState = true; //初期設定のLEDを光らせる

ds.on('push',function(){
  myLed.write(ledState?1:0);
  ledState = !ledState;
  console.log(ledState);
});

これで実行すると先ほどのMilkcocoaサイトで描画するたびにLEDがチカチカ点灯します! LEDが壊れる可能性があるのでやりすぎ注意です。

まとめ

EdisonとMilkcocoaを使うことで簡単にモノとインターネットをつないだ表現(IoT)をすることができました。 今回はLチカだけだったのですが、今後は別のセンサーなどともつないでみたいと思います。

記事内でもリンクを貼りましたが、途中でEdisonがMac側で認識されなくなる問題があったのですが、人によってはそこでつまる場合もあるみたいなので、それについては別途まとめました。

参考

色々と参考になったサイトたちです。


※Raspberry PiやTesselでMilkcocoaを使うハンズオンが7月6日に開催されます。マイコンボードを持っていない方も会場で購入できるので、興味を持たれた方は是非参加してみて下さい!