Intel Edison のモニタリングに Concurix を使う

クリスマス休暇前に Intel Edison/Arduino を入手できました。今回は、Edison 上で helloworld を走らせ、Concurix を使ってモニターした話です。

Edison の詳細は Intel のサイトを見ていただくとして、つづめて言えば「500MHzで動作する32bitアーキテクチャ CPUに、IEEE802.11a/b/g/n対応無線LAN とBluetooth 4.0、メモリはRAM 1GB/Flash 4GBを備え、Nodejs 0.10.28 が入ったSystem on Chip (SoC)」で、用途は、Internet of Things (IoT) 、外観は以下の写真のようです。

f:id:setogit:20141223145455j:plain

そこに写っている物のリストを示します。

  • MacBook Pro は 15インチで、OSX Yosemite Version 10.10.1 です。
  • Intel Edison: Standard Power On Board Antenna + Arduino, Product Code: EDI1ARDUINALK
  • belkin Micro USB Charge/Sync Cable 1.2m/4feet、青コード、黒コードの二本、各$10 で購入
  • ativa USB 2.0 4-Port Hub item 900-447(必須ではありません。MacBook の USB ポートを二つ使いたくないという理由で、能動回路の付いていないものを $15 で購入)

2本の micro USB ケーブルは必須で、「USB ケーブルを変えたら上手く動作した」という投稿を少なからず目にしましたから、極端に安いものは要注意のようです。WiFi 接続が必要なので、WiFiルーターがあることが前提です。設置にかかった時間は正味、開梱から、ブラウザで モニタリングまで 三時間位だったと思います。それではステップを追って見ていきます。

開梱後、まず Edison の初期設定を、Intel サイトにある Getting Started に従って行います。 要点となる作業は3つで、1)ハードウエアの組み立て(5分)、2)Intel が提供する Nodejs を含むLinuxの最新イメージを Flash メモリに書き込む( 15分 )と、3)WiFi の設定(5分)です。Getting Started には、IoT開発のためのIDEやライブラリのインストールも含まれていますが、今回所期の目的のためには必要ありませんから、ここではスキップします。

ハードウエアの組み立て後、二本の micro USBケーブルをMacにつなぐと、電源 ON となり、1分ほどするとEdison のオートスタートが終わり、 OSX には EDISON という名前のデバイスが Finder に現れます。余談ですが Windows 7 PC でも同様です。ここで、「screen /dev/cu.usbserial* 11520 -L」として、ターミナル接続します。上の写真では、黒いUSBケーブル側がシリアル ターミナル接続を担当し、青いUSBケーブル側がデータ転送と電源を供給しているようです。2014年12月20日に Intel サイトからダウンロードしておいたイメージには Nodejs 0.10.28 が入っていました。次に、「configure_edison --setup」というコマンドで、root パスワードの設定とWiFiネットワークへの登録を行います。WiFi登録が済むと、ルーターがEdison に割り当てた IPアドレスが表示されます。これで Edison の初期設定が終わりました。

次に cx-helloworld(concurixトレーサを含むサンプルアプリ) を Edison にインストールします。PC・Mac環境で、cx-helloworld と concurix-server を動かして cx-helloworld アプリをトレースする環境をすでにお持ちであれば、 PC・Mac環境で動いている concurix-server はそのまま走らせておいて、cx-helloworld を Edison 上で動かすようにすると考えればよいです。その環境をお持ちでない方でも、上記のリンクから、まずPC・Mac環境にcx-helloworld と concurix-server を動かしておくと良いです。なぜかというと、そこから cx-helloworld を Edison にコピーします。また、Edison からのトレースデータは、その concurix-server に送るように設定します。

Concurix トレーサは HTTP プロトコルを使って concurix-server にデータを送るので、concurix-server が動作している PC・Mac は Edison を接続するのと同じ WiFi ネットワークにあらかじめ接続し、concurix-server を走らせておきます。また、両方のローカルIPアドレスを知っておく必要があります。今回の設定ではルーターそのものが 192.168.1.1 で、Edison が 192.168.1.2 、MacBook は 192.168.1.3 でした。Edison を WiFi登録後に、MacBookの WiFi を ON にしたので、そうなりました。

IPアドレスが決まると、ssh が使えるようになります。データ転送は、scp を使って WiFi経由で行うほうが、115kbpsのシリアルよりも高速です。Mac 側の ssh config ファイルに次の三行をを追加しました。

  Host edisonhome
  HostName 192.168.1.2
  User root

ssh 接続し、Edison の /home/root/ に 「mkdir node_modules」します。そして PC・Mac から、/home/root/node_modules/ に cx-helloworld ディレクトリ全体を scp を使ってコピーします。コピーする前に cx-helloworld の concurix-root.js には以下のようにパラメータを設定しておきます。ここで api_host は、concurix-server が走っているホストに 貴方のWiFi ルーターが割り当てた IP アドレスですから、貴方の設定に応じて変えねばなりません。Mac では System Preferences の Network に行き、ステータスがConnectedになっているネットワークの下に表示されている "Wi-Fi is connected to *** Wireless and has the IP address ***.**.**.***." から確認できます。

f:id:setogit:20141223145453j:plain

最後に Edison 上で、cx-helloworld を走らせると、下図のように事前に Mac・PC 上で走らせておいた concurix-server に Edison から トレースデータの送信が始まります。f:id:setogit:20141223145454j:plain

sshによるターミナル接続が可能になると、黒いUSBケーブルの接続は必要なくなります。下の写真にあるように黒いUSBケーブルを外して、ssh 接続しても問題ありません。

f:id:setogit:20141223145456j:plain

concurix-server のログを見ていると Edison の IP アドレスからトレースデータが格納されていることがわかります。これでブラウザを使って Concurix ダッシュボードを見ることができるようになりました。目的は達成です。

f:id:setogit:20141223145452j:plain

さて、考えてみると、データ転送がWiFi経由で出来るので、青いUSBケーブルは電源供給のために使用しているだけということになります。ボード上、 micro USB端子と反対側にある電源端子に規定のACアダプタ(別途購入要)を接続するか何かして、電源を供給してやれば、青いUSBケーブルも必要なくなります。また、Linux が立ち上がった後、自動実行するスクリプトを作っておけば、スタンドアローンで Edison が動作するはずです。IoT モジュールの原型ですね。

温度センサー、モーションセンサーなどをデータ入力側に、様々なスイッチやスピーカ、サーボモータのコントローラを出力側につないで、Nodejs で データ処理するアプリを作ればロボットができそうです。蛇足ですが、そのロボットのアプリに、上述の require("concurix") の数行を追加すれば、Concurix を使った Edison IoT アプリのモニタリングができるようになります。