myThingsのIDCFチャンネルとESP-WROOM-02とのMQTT双方向連携
準備
- スマートフォンにmyThingsアプリを入れる
- クラウドサービスならIDCFクラウド -使いやすく、パワフルのチュートリアルを参考にして、サーバ上にMeshbluサーバを立てる
- GitHub - esp8266/Arduino: ESP8266 core for Arduinoを参考にして、Arduino IDEでESP-WROOM-02のプログラムを開発できるようにしておく
使うArduino用ライブラリはGitHub - interactive-matter/aJson: aJson is an Arduino library to enable JSON processing with Arduino. It easily enables you to decode, create, manipulate and encode JSON directly from and to data structures.とGitHub - knolleary/pubsubclient: A client library for the Arduino Ethernet Shield that provides support for MQTT.の2つ。
Arduinoライブラリディレクトリの、PubSubClient.h
内の#define MQTT_MAX_PACKET_SIZE 128
となっているところを#define MQTT_MAX_PACKET_SIZE 1000
にする
myThings外部サービスチャンネル(トリガー) → IDCFチャンネル(アクション) → ESP-WROOM-02
myThingsアプリ上で、Yahoo!天気をトリガーにしたものと、ぐるなびをトリガーにしたものの2つの組み合わせを作成した。それぞれでアクションに渡すメッセージはそれっぽい感じにしている。
ESP-WROOM-02には以下のArduinoコードをビルドしたものをアップロードし、Arduino IDEのシリアルモニタを表示した状態で、Wi-Fi・Meshbluに接続しておく。
myThingsアプリから、2つの組み合わせを手動実行する(あるいは待つ)と、Arduinoシリアルモニタに以下のようなメッセージが出力された。
............. WiFi connected IP address: 192.168.10.20 succeeded to connect to mqtt broker {"topic":"message","data":{"devices":["MESHBLU_ACTION_UUID"],"payload":"東京(東京)の2015-10-17の天気は曇り、最高気温20、最低気温16、降水確率40、風向き北の風、波の高さ0.5メートル","fromUuid":"MYTHINGS_UUID"}} 東京(東京)の2015-10-17の天気は曇り、最高気温20、最低気温16、降水確率40、風向き北の風、波の高さ0.5メートル {"topic":"message","data":{"devices":["MESHBLU_ACTION_UUID"],"payload":"肉 × イタリアン Hana 六本木店 〒106-0032 東京都港区六本木7-14-10 誠志堂ビル6F","fromUuid":"MYTHINGS_UUID"}} 肉 × イタリアン Hana 六本木店 〒106-0032 東京都港区六本木7-14-10 誠志堂ビル6F {"topic":"message","data":{"devices":["MESHBLU_ACTION_UUID"],"payload":"個室&イタリアン CERTO! 六本木店 〒106-0032 東京都港区六本木4-11-5 アネックスビル1F","fromUuid":"MYTHINGS_UUID"}} 個室&イタリアン CERTO! 六本木店 〒106-0032 東京都港区六本木4-11-5 アネックスビル1F {"topic":"message","data":{"devices":["MESHBLU_ACTION_UUID"],"payload":"六本木 PALETTE 〜Italian Tapas〜 〒106-0032 東京都港区六本木7-14-10 誠志堂ビル6F","fromUuid":"MYTHINGS_UUID"}} 六本木 PALETTE 〜Italian Tapas〜 〒106-0032 東京都港区六本木7-14-10 誠志堂ビル6F {"topic":"message","data":{"devices":["MESHBLU_ACTION_UUID"],"payload":"豪快 イタリアン食堂 DESERT 〒106-0032 東京都港区六本木7-15-25 六本木7thビル2F","fromUuid":"MYTHINGS_UUID"}} 豪快 イタリアン食堂 DESERT 〒106-0032 東京都港区六本木7-15-25 六本木7thビル2F {"topic":"message","data":{"devices":["MESHBLU_ACTION_UUID"],"payload":"六本木バル PIZZANIA 〒106-0032 東京都港区六本木2-3-7 セントラルクリブIII1F","fromUuid":"MYTHINGS_UUID"}} 六本木バル PIZZANIA 〒106-0032 東京都港区六本木2-3-7 セントラルクリブIII1F
これで、ESP-WROOM-02がmyThingsのトリガーチャンネルからメッセージを受け取れていることが確認できた。
ESP-WROOM-02 → IDCFチャンネル(トリガー) → 外部サービスチャンネル(アクション)
myThingsアプリ上で、IDCFチャンネルをトリガーにしてYahoo!メールをアクションにした組み合わせを作成した。
ESP-WROOM-02には以下のArduinoコードをビルドしたものをアップロードし、Arduino IDEのシリアルモニタを表示した状態で、Wi-Fi・Meshbluに接続しておく。ここでは、DHT11の温湿度センサを接続し、その情報を流している。
しばらくするとArduinoシリアルモニタに以下のようなメッセージが出力された。
............. WiFi connected IP address: 192.168.10.20 succeeded to connect to mqtt broker Humidity: 39.00 % Temperature: 24.00 *C {"devices":["MESHBLU_ACTION_UUID"],"payload":{"humidity":39.00000,"temperature":24.00000}} Humidity: 39.00 % Temperature: 24.00 *C {"devices":["MESHBLU_ACTION_UUID"],"payload":{"humidity":39.00000,"temperature":24.00000}}
Meshbluに以下の様なPythonサブスクライバを登録しておくと、メッセージが出力された。
connected with result code0 received message: {"topic":"message","data":{"devices":["MESHBLU_ACTION_UUID"],"payload":{"humidity":39,"temperature":24},"fromUuid":"MESHBLU_TRIGGER_UUID"}} from MESHBLU_ACTION_UUID received message: {"topic":"message","data":{"devices":["MESHBLU_ACTION_UUID"],"payload":{"humidity":39,"temperature":24},"fromUuid":"MESHBLU_TRIGGER_UUID"}} from MESHBLU_ACTION_UUID
同時に、myThingsアプリのアクションで指定したメールアドレス宛に以下のようなメールが届いた。
これで、ESP-WROOM-02からのメッセージがトリガーとなり、アクションが発火していることが確認できた。
残念ながら、IDCFチャンネルのトリガーメッセージの内容を元にアクションのメッセージを変更する方法がわからなかった。