Sample MQTT program - simple send and receive (MQ Telemetry Transport) for GainSpan Wi-Fi module
Dependencies: C12832 GSwifiInterface MQTT mbed-rtos mbed
Fork of HelloMQTT by
mbedのMQTTグループで保守されているMQTTライブラリを GainSpan Wi-Fi モジュールへ対応させたサンプルです。
MQTT (MQ Telemetry Transport) とは、IoTやM2M向け デバイス間通信のためのプロトコルです。
MQTTサーバーには http://iot.eclipse.org/ のサンドボックスを使います。 送信したメッセージをエコーバックしてくるだけの動作をします。
mbed Application Board を使う場合は次の行のコメントアウトを外すとLCDへ表示するようになる。
#define MBED_APPLICATION_BOARD
GainSpanモジュールの接続ピンについては次の行で指定する。
gs = new GSwifiInterface(p9, p10, NC, NC, p30, NC, 9600); //tx, rx, cts, rts, reset, alarm, baud
Wi-Fiアクセスポイントは次の行で指定する。
#define SEC GSwifi::SEC_WPA_PSK #define SSID "SSID" #define PASS "PASSPHRASE"
Diff: main.cpp
- Revision:
- 12:086a9314e8a5
- Parent:
- 9:5beb8609e9f7
- Child:
- 16:fd155e824a80
--- a/main.cpp Thu May 22 23:58:34 2014 +0000 +++ b/main.cpp Fri Aug 01 17:02:22 2014 +0000 @@ -67,6 +67,8 @@ MQTTPacket_connectData data = MQTTPacket_connectData_initializer; data.MQTTVersion = 3; data.clientID.cstring = "mbed-sample"; + data.username.cstring = "testuser"; + data.password.cstring = "testpassword"; if ((rc = client.connect(&data)) != 0) lcd.printf("rc from MQTT connect is %d\n", rc); @@ -84,7 +86,7 @@ message.payload = (void*)buf; message.payloadlen = strlen(buf)+1; rc = client.publish(topic, &message); - while (arrivedcount == 0) + while (arrivedcount < 1) client.yield(100); // QoS 1 @@ -92,7 +94,7 @@ message.qos = MQTT::QOS1; message.payloadlen = strlen(buf)+1; rc = client.publish(topic, &message); - while (arrivedcount == 1) + while (arrivedcount < 2) client.yield(100); // QoS 2 @@ -100,8 +102,19 @@ message.qos = MQTT::QOS2; message.payloadlen = strlen(buf)+1; rc = client.publish(topic, &message); - while (arrivedcount == 2) + while (arrivedcount < 3) client.yield(100); + + // n * QoS 2 + for (int i = 1; i <= 10; ++i) + { + sprintf(buf, "Hello World! QoS 2 message number %d from app version %f\n", i, version); + message.qos = MQTT::QOS2; + message.payloadlen = strlen(buf)+1; + rc = client.publish(topic, &message); + while (arrivedcount < i + 3) + client.yield(100); + } if ((rc = client.unsubscribe(topic)) != 0) printf("rc from unsubscribe was %d\n", rc);