軽量プロトコルのMQTT (MQ Telemetry Transport) の準備編の記事です。
[概要]
IoT/M2Mで使えそうな通信技術で
HTTPを使わずに、軽量/高速で通信できそうなプロトコル実装を
試す内容で
デバイス側の構成が
[Arduino Uno] + [EtherNe シールド] で、コスト的にも高め
複数の購入するのは厳しいの感ありますが、テストしてみました。
[MQTT 構成]
broker : test.mosquitto.org
publish(Pub) : IoT device (Arduino EtherNet)
subscribe(Sub) : Browser Chrome
Sub のブラウザ側のライブラリは paho-mqtt のJSライブラリを使用
内部的WebSocketみたいですので、Broker側がWebSocket対応している
必要がありそうです。
*) 関連URL/version 等は、執筆時点を記載しています
# 表示系のサンプル
chrome Android
デバイス側から、数値を加算して Pubする程度の仕組み。
[開発ツール]
Linux (Raspberry PI 2)
関連ツールを、インストールします。
mosquittoは、内部serverを起動しない場合は不要です。
MQTT server
pi@raspberrypi:~/tmp$ sudo apt-get install mosquitto
clientのツール
pi@raspberrypi:~/tmp$ sudo apt-get install mosquitto-clients
# テストします
下記はホスト名を指定していません。内部 brokerに接続
# subscribe--Subする
pi@raspberrypi:~/tmp$ mosquitto_sub -d -t test_topic
# publisher --Pubする
別のコンソール開き
pi@raspberrypi:~/tmp$ mosquitto_pub -t test_topic -m "24.5"
# 結果
Sub の画面に、Pubしたデータが表示されます。
pi@raspberrypi:~/tmp$ mosquitto_sub -d -t test_topic
Received CONNACK
Received SUBACK
Subscribed (mid: 1): 0
Received PUBLISH (d0, q0, r0, m0, 'test_topic', ... (4 bytes))
24.5
Sendin
# 表示系のライブラリ等 [paho-mqtt javascript]
# commit ページの
org.eclipse.paho.mqtt.javascript-master.zip
をDL &解凍します。
src/mqttws31.js を使います。
# IoTデバイス側 (Arduino) の実装
Arduino SDK 1.6.5
Arduino Client for MQTT
ライブラリをインストールしておきます
# テスト
# ARDUINO スケッチの準備
スケッチの例 -[PubSubClient] - [mqtt_basic]
を参考にしました
作業用ルータ設定の関係か、動作しませんでしたので
コードみながら、他のARDUINO-EtherNet関係比較したところ
IP指定せずに, DHCP方式に修正すると接続できました。
//Ethernet.begin(mac, ip);
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
Ethernet.begin(mac, ip);
}
Topicを適当に決めて、Pubしてみます
char mTopic[]="test-topc-1009A/sensor";
#code: Arduino SDK
2秒間隔で、数値を加算し、Pubしてます。
*) macアドレスを指定してますので、
複数設置する場合は重複に注意してください。
# mqtt_arduino_1.ino
# mosquitto_sub で結果見てみます
$ mosquitto_sub -d -h test.mosquitto.org -t test-topc-1009A/sensor
pi@raspberrypi:~/tmp$ mosquitto_sub -d -h test.mosquitto.org -t test-topc-1009A/sensor
Received CONNACK
Received SUBACK
Subscribed (mid: 1): 0
Received PUBLISH (d0, q0, r0, m0, 'test-topc-1009A/sensor', ... (2 bytes))
29
Received PUBLISH (d0, q0, r0, m0, 'test-topc-1009A/sensor', ... (2 bytes))
30
Received PUBLISH (d0, q0, r0, m0, 'test-topc-1009A/sensor', ... (2 bytes))
31
デバイス側のPub と、Sub 確認ができましたので、次 は
browser表示方法を検討します。
# 表示アプリ (MQTT over WebSocket)
上記の paho-mqtt JS版使います。
mqttws31.js, jquery 読み込み
topic は、デバイス側で指定とあわせる
var mTopic="test-topc-1009A/sensor";
clientId (クライアントID)は、重複した場合、
後勝ち(後で開いた画面の表示が有効、前は停止)になるようです。
Paho.MQTT.Client インスタンスを呼出、
connect コールバック内で、
subscribe 実行します
#code : mqtt-sub-sample-js-1.htm
起動時のconnect あたりが、数秒の待ち時間ありました。
# まとめ
デバイス側から、計算結果の数値を送信しているだけで
表示画面みていても、面白くはないのですが、
MQTTで短い間隔で、データ送信と、受信表示系の機能の
リアルタイム表示的な体験はできます。
次は活用編とか、センサー/実行系(LED)など検討したいと思います。
# 参考の記事
# 開発者向けのまとめ記事
0 件のコメント:
コメントを投稿