tweet

MQTT 準備編。Arduino EtherNet, paho-MQTT(over WebSocket)で表示も



軽量プロトコルの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)など検討したいと思います。


# 参考の記事


# 開発者向けのまとめ記事


コメント

AD-parts

Shop
Bluetooth搭載
ベース基板

FACEBOOK

人気の投稿