2017/10/2追記
Kadecotプロジェクトは終了し、その開発ノウハウは、類似の機能を持ったPicoGWに引き継がれています。
こんにちは。オープンソース家電サーバKadecotを作っている大和田と申します。
KadecotにArduino連携機能を追加したので、Arduino bitで簡単に家電プログラミングができるようになりました。これを使ったワークショップも2017の1月末から2月頭くらいで開催するので、https://ouch-hack.connpass.com/ もcheckしてください!
※まだ募集開始してないので、ぜひconnpassのコミュニティメンバーに入っておいてくださいませ
こちらlittleBits Advent Calendar 2016の12/23の記事となります。
できることは以下の通りです。
- littleBitsから家電のON/OFFをする
- 家電のON/OFFを検知してlittleBitsを動かす
必要なハードウェア
-
Raspberry pi (Kadecotを立ち上げ、Arduino bitを接続するため。ラズパイ3でしか試したことがありませんが、きっと2以前でも大丈夫かと)
-
ECHONET Lite対応エアコンまたは照明。お持ちでない方は、このエミュレータを使います。エミュレータで動けば実機でも多分動きます。
-
その他お好みのbitモジュール
やりかた
$ bash <(curl -skL https://git.io/kadecotjs-install)
- ラズパイにUSB SerialでArduino bitを接続し、対応するシリアルポートを確認。
通常は/dev/ttyACM0
です。もしこれ以外の場合は、
~/.kadecot/v1/plugins/net.kadecot.serial/ports.txt
の中身をそのデバイスファイル名に書き換えてください。
※ちなみに、ラズパイ(てかdebian?)に依存している部分はここだけです。Kadecotも普通のLinuxであればインストールできます。
4. エミュレータを用いる場合は、ラズパイと同じネットワーク内で立ち上げる。
※Kadecotを走らせるラズパイ上で立ち上げてしまうと、ECHONET Liteの仕様上ポートがかぶるので別のマシンにしてください。その場合、ファイアーウォールなどが入っていると家電が見えないことがあるので注意してください。
5. Kadecotを立ち上げる
$ kadecot startfg
だらだら出てくるメッセージの中に
Device registartion success:Arduino123456:serial
とか
com.sonycsl.kadecot.echonetlite: Registering com.sonycsl.kadecot.echonetlite.procedure.HomeAirConditioner.set
などと出ているのを確認してください。出ていればArduinoや家電が認識されています。
6. 同じネットワーク内のブラウザから、
http://[ラズパイIPアドレス]:31413//samples/index.html
を開き、「gpio-homeappliances example」と書かれたボタンを押す。
すると以下のような画面が出る。
この中で、GPIO to deviceの下に書かれている表では、Arduino bitの入力をどの家電に対応付けるかを設定します。Device to GPIOの下では、逆に家電の電源プロパティを、どのArduino bitの出力に対応付けるか設定します。
例えば、次のように設定したとします。
対して、littleBitsのほうはこのようにつないだとします。
すると、次のようになります。
・左のボタンを押すと家電の照明がつきます。
・エアコンをつけるとサーボが回ります。
・照明をつけると、LEDが点灯します。
以上です。
注意
Arduinoの電源が落ちたら
ご存知のようにlittleBitsの磁石は外れやすいので、もしArduino bitの電源が瞬断した場合、ラズパイのシリアルライブラリがArduinoを手放してしまうことがあります。おかしくなったらkadecotをリブートしてください。
複数のArduino bitを使う場合
多分使えると思いますが(チェックはしてません)、その場合、Arduinoに書き込むスケッチの最初の方にある:
String UNIQUE_ID = "Arduino123456" ;
を別の名前にして書きこんでください。
さらに
littleBits以外のArduinoを使う場合
入出力のピンIDを追加・削除・変更するだけなら、Arduinoに書き込むスケッチの最初の方にある:
const int inPorts[] = {D0,A0,A1} ;
const int outPorts[] = {D1,D5,D9} ;
を、好きなピン名に変更して書きこめば動くはずです。
シリアルポート以外でGPIOを使いたい
実は、Kadecotでgpioデバイスとして動かせるのはシリアルにつながったArduinoだけではありません。KadecotにはWebSocketとplain socketのサーバがそれぞれ41316,41317で立ち上がっており、特定の書式にのっとった通信を行うことでsocketクライアントをgpioデバイスとして動かすことができます。
そのプロトコルについては日を改めて説明したいと思いますが、とりあえず先日@wamisnet さんが書かれていたCocoaBitのファンなので、CocoaBitでそれをやる場合のスケッチのみ公開しておきます。こちらになります。
CocoaBitだとこんな感じになります。Arduino bitの場合と同様、家電と連携させられます。
Arduino bitはいろいろとフレキシブルでいいのですが、USBで繋がる距離にPCがないといけないという大きな制約があります。また、USBをいじっている間に電源瞬断が起きやすいという欠点もあると思います。
海外では無線でArduino bitのI/Oを飛ばせるようなものもあるので、それを使えば遠くの、例えば窓とか襖の中に仕込むことも不可能ではないですが、CocoaBitはそもそも最初からWiFiが使えるので、これだけでソケットでつなぎに行くことが可能です。
また、CocoaBitはNefryのバックエンドを流用していて、ESP8266の欠点の一つかもしれない、ソースコード内にWiFiのSSIDやパスワードを書かないといけないという問題を、あとで外からWebインターフェースで変えられるという点で克服されていますし、さらに今回は接続先のKadecotのIPアドレスも同じWebインターフェースで変えられるようにしてあるので、そちらも心配ありません。
CocoaBitの一日も早い商品化をお待ちしております!