スライドをクリックすると大きく表示されます
-
Osaka Mini Maker Faire 2016 でのTalk
-
twitterのハンドルです
-
ブースNo80で展示しています
Old Macのケースに入れたRPiクラスターコンピュータ
-
ワイヤフレームの電子回路
-
ボトルサーキット,瓶詰めの電子回路
変な展示物ばかりです
-
10月2〜3日のWorld Maler Faire New York 2016 でボトル・サーキットを展示したら,エディターズ・チョイスのリボン受賞
-
本題のスタート
IoTってモノとWebサービスで成り立つのですが,ここではモノの方だけに注目したお話…IoTのマネごと話です。
-
Message in a Bottleと名付けたtwitter連携メッセージボードです。(動画再生できません)
-
Twitter連携メッセージボードの構成図です。 ラズベリーパイがコントロール・サーバとして働いて,ツイッターのメッセージを取って来て,ボトルサーキットにWiFi経由で投げて,それを,ボトルサーキットで受けてLEDマトリクスに表示する仕組みです。
-
表示部の構成。これらのハードウェアを使い、どのようにソフトウェアを実装してIoTを実現して行ったかを、順次お話しして行きます。
-
コントロール・サーバには最近流行りのNode.js Johnny-fiveを使っています。
-
Node.js はサーバサイドのJavascript実行環境です。
Johnny-fiveはjavascriptでハードウェアを制御するためのソフトウェア・モジュールです。
この組み合わせはWebと相性が非常に良い。
昨年,一昨年あたりから,ハードウエアをコントロールしたいIoTをやりたいweb技術者開発者のみなさんから注目を集めています。
-
先行事例をマネて,先ずLチカをやってみました。
図のようなネットワーク越しのLチカです。 パソコン側でNodeとJohnny-fiveでLチカのサーバとLED制御プログラムを作って動かします。 Arduino側ではLEDをI/OポートにつないでおいてStandardFirmataを動かします。
-
スマホなどのwebブラウザからLチカサーバにアクセスしてLチカページを開いて。ページに置いたLEDオン・オフボタンをクリックするとLEDが点消灯します。これが,javascriptだけでできるのはオドロキです。
-
このJohnny-fiveによる制御の特徴は,
Johnny-five側がハードウェア制御をすべて行い,Arduinoは制御データをデバイスに受け渡すだけ。 Arduinoとの通信はFirmataプロトコルで行われます。 Webの先行事例をまねて色々実験し,自分で考えたモノを作ってみようと、Wifi接続のTwitter連携電光表示板を計画しました。
-
Wifi接続Twitter連携電光表示板を実現するために,その時、自分に不足している技術要素を上げてみました。
1.Wifi接続 (ESP wifiモジュールを使えば何とかなりそう)
2.Twitterサーバからのメッセージ取得 (先行事例を真似れば何とかなる)
3.Johnny-fiveでLEDマトリクスをダイナミック点灯制御 (先行事例がないので自分で試行錯誤)
-
このような構成を考えました。
しかし,これまでの実験からJohnny-five と StandardFirmata 間の通信オーバヘッドが大きく制御が間に合わずダイナミック点灯制御は無理だろうと予想がついたので、次を考えました。
-
ハードウェア制御の制御の主体をjohnny-fiveからArduinoに移します。
Arduino側で,Firmata通信機能を持ったダイナミック点灯制御の電光表示板プログラム(スケッチ)を走らせて,Johnny-five側は,表示する文字列を送るだけの仕組みで実現しようと考えました。 この方法だと通信オーバヘッドがあっても表示に与える影響は殆どありません。 しかし、Johnny-fiveで100〜200バイトのデータを一気に送っている例を見かけないので、自分で実現するしかありません。闇雲にやってもダメなので、先ず、firmataプロトコルの文字列を送る仕組みを調べてみました。
-
firemataプロトコルの仕様を見ると,STRING_DATAと言う文字列を送受信する定義がありました。ただし,1回に送れるのは30バイトまでです。
次に,これが,具体的にJohnny-five、StandardFirmataにどう実装されているのか調べました。
-
StandardFirmataもJohnny-five(正確にはJohnny-fiveが呼び出しているFirmataモジュール)も,STRING_DATAの メッセージ送信用にsendString( )メソッドが用意されている。 受信は,STRING_DATAを受信すると、そのイベントが発生する。という実装です。 STRING_DATAイベントで受信文字列を処理する自前ルーチン・関数を起動すれば。良いわけです。 StandardFirmataはSTRING_DATAイベント処理の関数を簡単に組み込めるようになっています。
-
StandardFiremata の setup関数の中に,イベントに応じたハンドラ(処理プログラム)の呼び出しが定義され列挙されています。ここにSTRING_DATAイベントに対する関数 この例 ではstringCallbackを記述した行を追加して,stringCallback関数本体 を用意すれば良いのです。 以上のことを,つぎのような実験セットで動作確認して見ます。
-
Arduino側:StandardFirmataにSTRING_DATAの処理とLEDマトリクス表示プログラムを追加して走らせ パソコン側:Johnny-fiveのsendStringメソッドで,表示メッセージをArduinoに送って表示させます。うまく行きました。
次に、点線の部分を一体化し,かつ,Wifi接続にしてメッセージを表示する具体的な装置を作る作業に入りました。
-
最初に考えた構成です。Arduinoは小型のMicroにしてLEDマトリクス表示と一体化し,WiFi接続はESPのWiFiモジュールを使う。という構成です この構成をよ〜く考えたら,Arduinoはいらないよねと気づいた
-
ESP WiFiモジュールは内蔵のコントローラチップ(マイコン)がユーザに開放されています,しかもArduino IDEでプログラムを書いてマイコンに書き込める。実験で作ったUNO用のプログラムが,そのまま動かせる…こりゃ、良いわ〜 とほくそえんだ。が!,ここで引っかかった「WiFi経由のFirmata通信はどうやるの?」,自分で調べながらTwitterでも聞いた
-
@kosamariから info.あり。
娘です,ニューヨークでWebエンジニアやっています
-
事例:ESPモジュールにつないだI2Cの温度センサーの値をJohnny-fiveを使ってWiFi経由で取得
Johnny-five側はetherport-client モジュールでTCP/IP通信ポートを開き、それをJohnny-fiveで使う
ESP側ではStandardFirmataWiFiを動かし,wifiConfig.hに wifiとTCP/IPコネクションを定義しておいて接続する。
以上で,Johnny-fiveとESPがWiFi経由のFirmataでリンクする。まねてやってみて,うまくいったので一気に製作
-
最初の方でお見せした構成の「Wifi接続Twitter連携電光表示システム」ができあがりました。 WiFi接続なので,可搬性が抜群でどこにでも持って行けます,
-
海に持って行って動かしたりできます。Wifi接続なので瓶の中のメッセージ自在に変えてSOSなどを発信することができます。 色々がんばって,自分なりのIoTが実現できました。(動画再生できません)
-
本来,node.js Johnny-fiveはこの図の黄色い部分(サーバー)でjavascriptにより一切の制御をすることを狙ったモノです。が,今回の方法は制御の分業を行っています。黄色い部分はインターネット・Webのインターフェースを担当し,緑色の部分(Arduino/ESP)はハードウエア制御を担当しています。このように切り分けたことで赤い所の通信オーバーヘッドに影響されない制御システムを作ることができました。が、javascriptだけで制御ができるというjohnny-five最大のメリットは失いました。また、String_dataの送受信,WiFiリンクでのFirmata通信に関する新たな知見を得ました。
-
今後やりたいこと。
末端装置=モノの方にハード制御を移した。でコントロール・サーバの負荷は軽いので,今回の1対1でなく,図のように1対多のコントロールが可能。しかも,WiFi接続なので配線の手間無い。 ということでRaspberry PiをIoT Gatewayとして使い、多数のモノが連携して動くIoTを実験してみたいと考えています。
-
Maker Faire New York 2016でJohnny-fiveの人々と。何と!@kosamariの知り合いだった