Edison on Henry Board

Intel EdisonはRaspberry Piと比較してもかなり小さいけど,特殊なインターフェイスが使われており,拡張ボードなどを使ってセンサーを接続することが多い.でも,でっかい基板に付けると,せっかくのEdisonの小さいという良さを損なってしまう.モーションコントロール株式会社とランニングエレクトロニクスが開発したHenry Boardは,フリスクの空箱にちょうど収まる基板にUSB microBコネクタ,9軸モーションセンサ、USBホストコネクタを詰め込んだもので,IoT機器としてのEdisonをアピールできるようになっています.ホントにフリスクの箱に入ります (コネクタの部分は箱を削らないといけないですが).

IMG_2195

今回は,EdisonをHenry Boardに取り付け,基板上のセンサーの値をとって,BluemixのIoT Foundationに接続するデモを作ってみた.

(1) EdisonをHenry Boardに取り付ける.やり方は,Intelの純正拡張ボードを同じです.インターフェィスの部分がきちんと接触するようにはめ込みます.

edison

(2) USBmicroBコネクタとパソコンのUSBポートをUSBケーブルで接続します.以降,Macbook Proを使った例を説明します.

(3) PCからEdisonにログインします.Edisonは無線LAN内臓なので正しく設定されていれば無線LAB経由でsshできますが,ここではシリアル接続でログインすることにします.コマンドラインから,

$ sudo cu -s 115200 -l /dev/cu.usbserial-XXXXXXXX

XXXXXXXXのところは環境に依存します.エンターキーを押すとログインプロンプトが表示されるので,ユーザ名とパスワードを入れてログイン.

(4) Henryのセンサーにアクセするためのサンプルコード (Python)が,githubで公開されています.Readmeに従って,Henry上に展開,インストール.

(5) MQTTクライアントライブラリPahoのインストール
デモでは,大量のイベントをpub/subモデルで処理することができるMQTTプロトコルを使って,センサーデータをサーバー側に送信します.MQTTクライアントライブラリはいくつか公開されていますが,今回は,Eclipseが提供しているPahoのPythonライブラリを用います.

Pythonの場合,pipを使ってライブラリをインストールすると簡単ですが,Edisonの標準OSであるEdison Yocto Linux標準のパッケージマネージャopkgではpipがインストール出来ません.この記事を参考に,pipをインストールします.pipのインストール後,paho-mqttをインストールします.

$ pip install paho-mqtt

(6) プログラム作成
センサーから値を取得し,MQTTでIoT Foundationにデータを送信するプログラムコードの例を示します.

# Henry基板のセンサーにアクセスするためのライブラリ
import sys
sys.path.append('/eaglet/lib')
sys.path.append('/eaglet/module')

# MQTTライブラリ
import paho.mqtt.client as paho
import time

# センサーの初期化
from MPU9250 import MPU9250
mpu9250 = MPU9250()

# IoT Foundation (MQTTブローカーの機能を持つ)関連の情報
clientID = "d:quickstart:edison:<EdisonのMacアドアレス>"
topic = "iot-2/evt/status/fmt/json"
url = "quickstart.messaging.internetofthings.ibmcloud.com"
port = 1883

def on_publish(mqttc, obj, mid):
print(str(mid))

def on_log(mqttc, obj, level, string):
print(string)

if __name__ == '__main__':
    mqttc = paho.Client(clientID)
    mqttc.on_publish = on_publish
    mqttc.connect(url, port, 60)

# センサーから値を取得し,IoT Foundationが受け付けるJSON形式でpublishする.
while True:
    gyro = mpu9250.getGyro()
    accel = mpu9250.getAcceleromter()
    payload = "{\"d\":{\"myName\":\"Edison\","+"\"GyroX\":"+str(gyro['x'])+",\"GyroY\":"+str(gyro['y'])+",\"GyroZ\":"+str(gyro['z'])+",\"AccelX\":"+str(accel['x'])+",\"AccelY\":"+str(accel['y'])+",\"AccelZ\":"+str(accel['z'])+"}}"
    mqttc.publish(topic, payload)
    time.sleep(1)

(7) プログラムを実行します.上記のプログラムをmqtt.pyとして保存し,お使いのEdisonのMacアドレスをプログラム中で指定します.

$ python mqtt.py

(8) センサーの値を受け取るサーバー側は,IBMが提供するIBM Internet of Things (IoT) Foundationを使います.まずは,IoT Foundationにアクセスし,アカウントを作成します.

Screen Shot 2015-06-06 at 02.41.05

サインアップが完了したら,画面上部のメニュから,”Quickstart”を選択します.

Screen Shot 2015-06-06 at 18.13.11

左側に,デバイスのMacアドレスを入力するエリアがあるので,EdisonのMacアドレスを入力します (上記サンプルコードで設定したのと同じものである必要があります).”Go”ボタンを押すと,Edisonから送られてきたセンサーデータが可視化されて表示されます.

Screen Shot 2015-06-06 at 18.17.08

IoT Foundationは,MQTTブローカーとしても機能しますので,外部プログラムからも呼ぶことが可能です.必要となる情報は以下です (同じ情報が上記サンプルコードにも埋め込まれています)

  • url : “quickstart.messaging.internetofthings.ibmcloud.com”
  • port : 1883
  • clientID : “d:quickstart:edison:<EdisonのMacアドアレス>”
  • topic : “iot-2/evt/status/fmt/json”

例えば,PaaS環境であるBluemixには,IoT Foundationと連携して,センサー値を受け取りとても簡単にIoTアプリを開発することができるNode-Redというサービスがあります.Node-Redアプリの作り方は次の機会に紹介しますが,まずはこの辺りの記事を参考にしてください.下がアプリの例です.センサー値を受け取り,Edisonの傾きが大きい時に,「こぼれる!」と表示しています.これをTwitterにポストすることも簡単にできます.

Screen Shot 2015-06-06 at 18.33.55

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中