1218

Dependencies:   mbed-os-example-wifi-DISCO_IOTBOARD_MQTT MQTT

Revision:
59:9bbcc1b368ba
Parent:
58:8d4bde75ebb9
Child:
60:5e586131c009
--- a/main.cpp	Tue Feb 27 14:07:49 2018 +0100
+++ b/main.cpp	Tue Apr 23 09:45:23 2019 +0000
@@ -14,6 +14,20 @@
  * limitations under the License.
  */
 
+//MQTT+WIFI
+
+
+#define logMessage printf
+#define MQTTCLIENT_QOS2 1
+
+#include "MQTTNetwork.h"
+#include "MQTTmbed.h"
+#include "MQTTClient.h"
+
+int arrivedcount = 0;
+//
+
+
 #include "mbed.h"
 #include "TCPSocket.h"
 
@@ -32,6 +46,16 @@
 
 #endif
 
+
+void messageArrived(MQTT::MessageData& md)
+{
+    MQTT::Message &message = md.message;
+    logMessage("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
+    logMessage("Payload %.*s\r\n", message.payloadlen, (char*)message.payload);
+    ++arrivedcount;
+}
+
+
 const char *sec2str(nsapi_security_t sec)
 {
     switch (sec) {
@@ -137,6 +161,7 @@
 
     printf("\nConnecting to %s...\n", MBED_CONF_APP_WIFI_SSID);
     int ret = wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
+    //int ret = wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA);
     if (ret != 0) {
         printf("\nConnection error\n");
         return -1;
@@ -151,7 +176,84 @@
 
     http_demo(&wifi);
 
-    wifi.disconnect();
+    //wifi.disconnect();
+
+    printf("\Wifi Example Done,MQTT Example Start\n");
+    
+    // MQTT Example Start
+    float version = 0.6;
+    char* topic = "test1";
+
+    logMessage("HelloMQTT: version is %.2f\r\n", version);
+
+    NetworkInterface* network = &wifi;
+    if (!network) {
+        return -1;
+    }
+
+    MQTTNetwork mqttNetwork(network);
+
+    MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork);
+
+    const char* hostname = "192.168.0.120";
+    int port = 1883;
+    logMessage("Connecting to %s:%d\r\n", hostname, port);
+    int rc = mqttNetwork.connect(hostname, port);
+    if (rc != 0)
+        logMessage("rc from TCP connect is %d\r\n", rc);
+
+    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)
+        logMessage("rc from MQTT connect is %d\r\n", rc);
+
+    if ((rc = client.subscribe(topic, MQTT::QOS2, messageArrived)) != 0)
+        logMessage("rc from MQTT subscribe is %d\r\n", rc);
+
+    MQTT::Message message;
 
-    printf("\nDone\n");
+    // QoS 0
+    char buf[100];
+    sprintf(buf, "Hello World!  QoS 0 message from app version %f\r\n", version);
+    message.qos = MQTT::QOS0;
+    message.retained = false;
+    message.dup = false;
+    message.payload = (void*)buf;
+    message.payloadlen = strlen(buf)+1;
+    rc = client.publish(topic, message);
+    while (arrivedcount < 1)
+        client.yield(100);
+
+    // QoS 1
+    sprintf(buf, "Hello World!  QoS 1 message from app version %f\r\n", version);
+    message.qos = MQTT::QOS1;
+    message.payloadlen = strlen(buf)+1;
+    rc = client.publish(topic, message);
+    while (arrivedcount < 2)
+        client.yield(100);
+
+    // QoS 2
+    sprintf(buf, "Hello World!  QoS 2 message from app version %f\r\n", version);
+    message.qos = MQTT::QOS2;
+    message.payloadlen = strlen(buf)+1;
+    rc = client.publish(topic, message);
+    while (arrivedcount < 3)
+        client.yield(100);
+
+    if ((rc = client.unsubscribe(topic)) != 0)
+        logMessage("rc from unsubscribe was %d\r\n", rc);
+
+    if ((rc = client.disconnect()) != 0)
+        logMessage("rc from disconnect was %d\r\n", rc);
+
+    mqttNetwork.disconnect();
+
+    logMessage("Version %.2f: finish %d msgs\r\n", version, arrivedcount);
+
+    return 0;
+    
+    
 }