最近耳にするようになった「IoT(Internet of Things)」。しかしARや人工知能と比べると技術ではなく概念であるため漠然としている感じも否めません。そのためIoTって結局何?という思う方も多いのではないでしょうか。ただ企業のCMなどでもIoTの文字がやっと見え始めてきたので、まだまだこれからの分野だと思います。
今回は、IoTデバイスであるInetel社の極小コンピュータ「Edison」で加速度を計測し、その情報をopenFrameworks(以下、oF)にOSC通信で送ってみたいと思います。Edisonについてはこちら を参照ください。
(1) Edisonセットアップ
セットアップについては、多くの記事が出回っていますので、ここでは軽く触れさせていただきます。この作業の過程で特に躓いた点は最後にまとめて記述しますので、
・ ファームウェアアップデート
使用したイメージは以下の通りです。
初期設定時はusbケーブルで接続しシリアル通信でログインします。
接続が完了したらログインします。
ログイン後、ファームウェアを書き換えます。
・ Edison設定
基本設定とwifi設定(wifiのみの設定はconfigure_edison –wifi)
→ifconfigコマンドでネットワーク環境を確認
その後は割り当てられたIPアドレスまたはホスト名でSSHログインが可能です。
or
(2) Edisonの組み立て
Edisonだけでは加速度情報は取得できませんので、加速度センサーを取り付けます。また、便宜的にバッテリーを搭載します。今回センサー/バッテリーはSparkfun社から販売されているものを使用しました。
加速度センサー
|
|
バッテリー
|
Edisonに付属するネジとナットだと微妙に数量と長さが足り
組み立て後はこのような感じになります。
後述しますが、この状態だと途中で「同じWi-Fiに入っていないから設定し直したいけど、SSHでログインできない!」となってもシリアル通信はできないので、ご注意ください。その場合は、都度付属のBreakoutボードに付け替えてUSB接続するか、Sparkfun社から販売されているBase Blockを重ねて組み立てるのも一つの方法です。
ちなみにですが、バッテリーはもって2~3時間程度。短いですね。。
(3) 送信側の実装(Edison)
それでは加速度情報の取得とOSC通信のためにEdisonにライブラリ等を組み込んでいきます。使用ライブラリは以下の通りです。どちらもC++となっています。
加速度取得
|
SparkFun_9DOF_Block_for_
(C++)
|
OSC通信
|
OSCpack (C++)
|
加速度取得のライブラリは使用したSparkfun社の加速度センサー(9 Degrees of Freedom)のページからダウンロード可能です。
OSCpackは公式サイトからダウンロード。
今回使用したファイルの一覧は以下の通りです。
SparkFun_9DOF_Edison_Block_
|
今回編集したファイル
|
SFE_LSM9DS0.cpp
SFE_LSM9DS0.h
|
SparkFun_9DOF_Block_for_
|
IpEndpointName.cpp
IpEndpointName.h
NetworkingUtils.cpp
NetworkingUtils.h
OscException.h
OscHostEndianness.h
OscOutboundPacketStream.cpp
OscOutboundPacketStream.h
OscTypes.cpp
OscTypes.h
PacketListener.h
TimerListener.h
UdpSocket.cpp
UdpSocket.h
|
OSCpack
|
それでは9軸センサーのSparkFun_9DOF_Edison_Block_Example.cppを編集していきます。各軸の値はインスタンス化したimuから読み出せます。加速度であれば、imu->calcAccel(imu->ax)のようなで値を取得可能です。このままでもコンパイルすれば9軸の値(加速度、角速度、地磁気)は取れますが、今回は加速度情報のみを抽出し、またわかりやすくするため、加速度センサーの各軸の値を合成し、3軸合成値(S[g])に変換します。3軸合成値にすると、静止時はほとんど1を示し、投げ上げると0(無重力)に近い値を示します。
実際のコードは以下の通りです。
編集したファイルとライブラリをEdisonに組み込みます。Edisonを起動し、SSHでログインしましょう。その後はCyberduck などを使用し、Edisonに割り当てられたIPアドレスで接続すれば簡単にファイル転送できます。
(4) 受信側の実装(oF)
次に受信側となるopenFrameworks側の実装を行います。ofxOscをAddonとして組み込んでおくことを忘れずに行いましょう。PORT番号はEdison側と合致させます。今回は受信した加速度情報をとりあえずログ出力させてみたいと思います。
【ofApp.h】
【ofApp.cpp】
(5) 動作確認
それでは、Edison側のファイルをコンパイルし、値を受け取れているか確認してみましょう。まずSparkFun_9DOF_Edison_Block_Example.cpp以外は実行ファイルにしておきます。例のような感じです。
それでは、ファイルをコンパイルします。
testという実行ファイルが作成されると思いますので、そのファイルを実行します。
最後にoF側をビルドします。
ログを見ると以下のように加速度情報が受信できていると思います。
Edisonのバッテリーの持ちが非常に短いので、なんとも言えませんが、
ボールやおもちゃなどの小物などに組み込んだりすると、
Edisonの特徴を生かしたIoTの使い方ができるのではないかと思います。
Tips
・Edisonファームウェアの落とし込み
最新のファームウェアだとEdisonに組み込む際、メモリがいっぱいですとエラーが出てしまいます。初期化や隠しファイルなどを削除してもエラーが消えなかったため、旧バージョンのWeekly-149(edison-image-ww18-15)を組み込みました。