Fork of Hello MQTT, using mbed TLS for secure mqtt transport

Dependencies:   MQTT

Fork of HelloMQTT by MQTT

Committer:
vpcola
Date:
Sat Mar 18 01:54:50 2017 +0000
Revision:
22:4d0628d13870
Parent:
21:4534812bb94f
Output to serial only

Who changed what in which revision?

UserRevisionLine numberNew contents of line
icraggs 1:a1d5c7a6acbc 1 /*******************************************************************************
icraggs 17:0811bdbdd78a 2 * Copyright (c) 2014, 2015 IBM Corp.
icraggs 1:a1d5c7a6acbc 3 *
icraggs 1:a1d5c7a6acbc 4 * All rights reserved. This program and the accompanying materials
icraggs 1:a1d5c7a6acbc 5 * are made available under the terms of the Eclipse Public License v1.0
icraggs 1:a1d5c7a6acbc 6 * and Eclipse Distribution License v1.0 which accompany this distribution.
icraggs 1:a1d5c7a6acbc 7 *
icraggs 1:a1d5c7a6acbc 8 * The Eclipse Public License is available at
icraggs 1:a1d5c7a6acbc 9 * http://www.eclipse.org/legal/epl-v10.html
icraggs 1:a1d5c7a6acbc 10 * and the Eclipse Distribution License is available at
icraggs 1:a1d5c7a6acbc 11 * http://www.eclipse.org/org/documents/edl-v10.php.
icraggs 1:a1d5c7a6acbc 12 *
icraggs 1:a1d5c7a6acbc 13 * Contributors:
icraggs 1:a1d5c7a6acbc 14 * Ian Craggs - initial API and implementation and/or initial documentation
icraggs 17:0811bdbdd78a 15 * Ian Craggs - make sure QoS2 processing works, and add device headers
icraggs 1:a1d5c7a6acbc 16 *******************************************************************************/
Jan Jongboom 20:49c9daf2b0ff 17
icraggs 2:638c854c0695 18 /**
icraggs 2:638c854c0695 19 This is a sample program to illustrate the use of the MQTT Client library
icraggs 2:638c854c0695 20 on the mbed platform. The Client class requires two classes which mediate
icraggs 2:638c854c0695 21 access to system interfaces for networking and timing. As long as these two
icraggs 2:638c854c0695 22 classes provide the required public programming interfaces, it does not matter
icraggs 2:638c854c0695 23 what facilities they use underneath. In this program, they use the mbed
icraggs 2:638c854c0695 24 system libraries.
Jan Jongboom 20:49c9daf2b0ff 25
icraggs 2:638c854c0695 26 */
Jan Jongboom 20:49c9daf2b0ff 27
icraggs 18:07a79d8f01c3 28 // change this to 0 to output messages to serial instead of LCD
icraggs 1:a1d5c7a6acbc 29
icraggs 18:07a79d8f01c3 30
icraggs 17:0811bdbdd78a 31 #define MQTTCLIENT_QOS2 1
icraggs 0:0cae29831d01 32
vpcola 21:4534812bb94f 33 #include "mbed.h"
vpcola 21:4534812bb94f 34 #include "rtos.h"
Jan Jongboom 20:49c9daf2b0ff 35 #include "easy-connect.h"
vpcola 21:4534812bb94f 36 #include "MQTTSNetwork.h"
Jan Jongboom 20:49c9daf2b0ff 37 #include "MQTTmbed.h"
icraggs 2:638c854c0695 38 #include "MQTTClient.h"
icraggs 2:638c854c0695 39
icraggs 2:638c854c0695 40
vpcola 21:4534812bb94f 41 /* List of trusted root CA certificates
vpcola 21:4534812bb94f 42 * currently only "letsencrypt", the CA for mbedhacks.com
vpcola 21:4534812bb94f 43 *
vpcola 21:4534812bb94f 44 * To add more than one root, just concatenate them.
vpcola 21:4534812bb94f 45 *
vpcola 21:4534812bb94f 46 * TODO: Move this certificate file onto the SD card.
vpcola 21:4534812bb94f 47 */
vpcola 21:4534812bb94f 48 static const char SSL_CA_PEM[] = "-----BEGIN CERTIFICATE-----\n"
vpcola 21:4534812bb94f 49 "MIIFETCCA/mgAwIBAgISA2ktlb1Y6ap4GCH7dg3wS37XMA0GCSqGSIb3DQEBCwUA\n"
vpcola 21:4534812bb94f 50 "MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD\n"
vpcola 21:4534812bb94f 51 "ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xNzAzMDkwMTQ4MDBaFw0x\n"
vpcola 21:4534812bb94f 52 "NzA2MDcwMTQ4MDBaMBgxFjAUBgNVBAMTDW1iZWRoYWNrcy5jb20wggEiMA0GCSqG\n"
vpcola 21:4534812bb94f 53 "SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC4ppYHlH8lfB7lkWOjMSnOJGaLtCBfz57I\n"
vpcola 21:4534812bb94f 54 "VVOd1Rngsz7nE5fg3joa7lkazRY1ZqtuC2UloS+4LYoQZX4Z887dhdug/TPA4J1A\n"
vpcola 21:4534812bb94f 55 "GppA4xVCb2kUFODMjZ2r4pMLp+MjFFMBaHrL4cgx/n4aJUB+N9Z+HW0p2Yr5TsOQ\n"
vpcola 21:4534812bb94f 56 "ghIOPkNxFr2q6klm49+BMUbO98hAwFwsIISLf6IbHM93gx1ltqkvb55N87ZM1hYH\n"
vpcola 21:4534812bb94f 57 "fkq+J+YqjleiLaqRN2MVlNMNfy9MDbqM5uCyGiWGtq8eiQLaWpZkxnA2MC5zPsO/\n"
vpcola 21:4534812bb94f 58 "fzEWiVjn2uazlXZ5xZwiK22KMxVasqWMitvETtmPOl9mocRbLQdxAgMBAAGjggIh\n"
vpcola 21:4534812bb94f 59 "MIICHTAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUF\n"
vpcola 21:4534812bb94f 60 "BwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFCsgG+z1BTjrN3K+/tF0C4k818Yv\n"
vpcola 21:4534812bb94f 61 "MB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMHAGCCsGAQUFBwEBBGQw\n"
vpcola 21:4534812bb94f 62 "YjAvBggrBgEFBQcwAYYjaHR0cDovL29jc3AuaW50LXgzLmxldHNlbmNyeXB0Lm9y\n"
vpcola 21:4534812bb94f 63 "Zy8wLwYIKwYBBQUHMAKGI2h0dHA6Ly9jZXJ0LmludC14My5sZXRzZW5jcnlwdC5v\n"
vpcola 21:4534812bb94f 64 "cmcvMCsGA1UdEQQkMCKCDW1iZWRoYWNrcy5jb22CEXd3dy5tYmVkaGFja3MuY29t\n"
vpcola 21:4534812bb94f 65 "MIH+BgNVHSAEgfYwgfMwCAYGZ4EMAQIBMIHmBgsrBgEEAYLfEwEBATCB1jAmBggr\n"
vpcola 21:4534812bb94f 66 "BgEFBQcCARYaaHR0cDovL2Nwcy5sZXRzZW5jcnlwdC5vcmcwgasGCCsGAQUFBwIC\n"
vpcola 21:4534812bb94f 67 "MIGeDIGbVGhpcyBDZXJ0aWZpY2F0ZSBtYXkgb25seSBiZSByZWxpZWQgdXBvbiBi\n"
vpcola 21:4534812bb94f 68 "eSBSZWx5aW5nIFBhcnRpZXMgYW5kIG9ubHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRo\n"
vpcola 21:4534812bb94f 69 "ZSBDZXJ0aWZpY2F0ZSBQb2xpY3kgZm91bmQgYXQgaHR0cHM6Ly9sZXRzZW5jcnlw\n"
vpcola 21:4534812bb94f 70 "dC5vcmcvcmVwb3NpdG9yeS8wDQYJKoZIhvcNAQELBQADggEBABFH6YcvHh8foHeg\n"
vpcola 21:4534812bb94f 71 "NM7iR9HnYRqa5gSERcCtq6jm8PcTsAbsdQ/BNpIHK7AZSg2kk17kj+JFeyMuNJWq\n"
vpcola 21:4534812bb94f 72 "lmabV0dtzdC8ejp1d7hGb/HjuQ400th/QRayvyrDVzQPfCNyJ0C82Q2DFjeUgnqv\n"
vpcola 21:4534812bb94f 73 "oJMcV6i4ICW0boI7GUf7oeHCmrUEHKffAbeFvx3c85c39IHJEFa59UWj1linU/Tr\n"
vpcola 21:4534812bb94f 74 "g9i5AaSKB95d706u1XRA7WLV/Hu7yunhxEjlj33bfdifBb/ZLBd0LtrXPwtXi6E8\n"
vpcola 21:4534812bb94f 75 "r6obp+B+Ce89G7WEhdT9BX0ck1KTK+yP7uAC7tvvsiejxXOoCtVyBAumBJS7mRuv\n"
vpcola 21:4534812bb94f 76 "I5hmKgE=\n"
vpcola 21:4534812bb94f 77 "-----END CERTIFICATE-----\n"
vpcola 21:4534812bb94f 78 "-----BEGIN CERTIFICATE-----\n"
vpcola 21:4534812bb94f 79 "MIIEkjCCA3qgAwIBAgIQCgFBQgAAAVOFc2oLheynCDANBgkqhkiG9w0BAQsFADA/\n"
vpcola 21:4534812bb94f 80 "MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT\n"
vpcola 21:4534812bb94f 81 "DkRTVCBSb290IENBIFgzMB4XDTE2MDMxNzE2NDA0NloXDTIxMDMxNzE2NDA0Nlow\n"
vpcola 21:4534812bb94f 82 "SjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxIzAhBgNVBAMT\n"
vpcola 21:4534812bb94f 83 "GkxldCdzIEVuY3J5cHQgQXV0aG9yaXR5IFgzMIIBIjANBgkqhkiG9w0BAQEFAAOC\n"
vpcola 21:4534812bb94f 84 "AQ8AMIIBCgKCAQEAnNMM8FrlLke3cl03g7NoYzDq1zUmGSXhvb418XCSL7e4S0EF\n"
vpcola 21:4534812bb94f 85 "q6meNQhY7LEqxGiHC6PjdeTm86dicbp5gWAf15Gan/PQeGdxyGkOlZHP/uaZ6WA8\n"
vpcola 21:4534812bb94f 86 "SMx+yk13EiSdRxta67nsHjcAHJyse6cF6s5K671B5TaYucv9bTyWaN8jKkKQDIZ0\n"
vpcola 21:4534812bb94f 87 "Z8h/pZq4UmEUEz9l6YKHy9v6Dlb2honzhT+Xhq+w3Brvaw2VFn3EK6BlspkENnWA\n"
vpcola 21:4534812bb94f 88 "a6xK8xuQSXgvopZPKiAlKQTGdMDQMc2PMTiVFrqoM7hD8bEfwzB/onkxEz0tNvjj\n"
vpcola 21:4534812bb94f 89 "/PIzark5McWvxI0NHWQWM6r6hCm21AvA2H3DkwIDAQABo4IBfTCCAXkwEgYDVR0T\n"
vpcola 21:4534812bb94f 90 "AQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8EBAMCAYYwfwYIKwYBBQUHAQEEczBxMDIG\n"
vpcola 21:4534812bb94f 91 "CCsGAQUFBzABhiZodHRwOi8vaXNyZy50cnVzdGlkLm9jc3AuaWRlbnRydXN0LmNv\n"
vpcola 21:4534812bb94f 92 "bTA7BggrBgEFBQcwAoYvaHR0cDovL2FwcHMuaWRlbnRydXN0LmNvbS9yb290cy9k\n"
vpcola 21:4534812bb94f 93 "c3Ryb290Y2F4My5wN2MwHwYDVR0jBBgwFoAUxKexpHsscfrb4UuQdf/EFWCFiRAw\n"
vpcola 21:4534812bb94f 94 "VAYDVR0gBE0wSzAIBgZngQwBAgEwPwYLKwYBBAGC3xMBAQEwMDAuBggrBgEFBQcC\n"
vpcola 21:4534812bb94f 95 "ARYiaHR0cDovL2Nwcy5yb290LXgxLmxldHNlbmNyeXB0Lm9yZzA8BgNVHR8ENTAz\n"
vpcola 21:4534812bb94f 96 "MDGgL6AthitodHRwOi8vY3JsLmlkZW50cnVzdC5jb20vRFNUUk9PVENBWDNDUkwu\n"
vpcola 21:4534812bb94f 97 "Y3JsMB0GA1UdDgQWBBSoSmpjBH3duubRObemRWXv86jsoTANBgkqhkiG9w0BAQsF\n"
vpcola 21:4534812bb94f 98 "AAOCAQEA3TPXEfNjWDjdGBX7CVW+dla5cEilaUcne8IkCJLxWh9KEik3JHRRHGJo\n"
vpcola 21:4534812bb94f 99 "uM2VcGfl96S8TihRzZvoroed6ti6WqEBmtzw3Wodatg+VyOeph4EYpr/1wXKtx8/\n"
vpcola 21:4534812bb94f 100 "wApIvJSwtmVi4MFU5aMqrSDE6ea73Mj2tcMyo5jMd6jmeWUHK8so/joWUoHOUgwu\n"
vpcola 21:4534812bb94f 101 "X4Po1QYz+3dszkDqMp4fklxBwXRsW10KXzPMTZ+sOPAveyxindmjkW8lGy+QsRlG\n"
vpcola 21:4534812bb94f 102 "PfZ+G6Z6h7mjem0Y+iWlkYcV4PIWL1iwBi8saCbGS5jN2p8M+X+Q7UNKEkROb3N6\n"
vpcola 21:4534812bb94f 103 "KOqkqm57TH2H3eDJAkSnh6/DNFu0Qg==\n"
vpcola 21:4534812bb94f 104 "-----END CERTIFICATE-----";
icraggs 8:a3e3113054a1 105
vpcola 22:4d0628d13870 106 Serial pc(USBTX, USBRX, 115200);
vpcola 21:4534812bb94f 107 int arrivedcount = 0;
vpcola 21:4534812bb94f 108 Thread thdMQTT;
vpcola 21:4534812bb94f 109
vpcola 21:4534812bb94f 110 MQTTSNetwork mqttNetwork;
vpcola 21:4534812bb94f 111 MQTT::Client<MQTTSNetwork, Countdown> client = MQTT::Client<MQTTSNetwork, Countdown>(mqttNetwork);
vpcola 21:4534812bb94f 112
vpcola 21:4534812bb94f 113 static MemoryPool<MQTT::Message, 16> pool;
vpcola 21:4534812bb94f 114 static Queue<MQTT::Message, 16> queue;
vpcola 21:4534812bb94f 115
vpcola 21:4534812bb94f 116 static const char* topic = "mbed-sample";
vpcola 21:4534812bb94f 117
vpcola 21:4534812bb94f 118 typedef void (*messageHandler)(MQTT::MessageData&);
icraggs 9:5beb8609e9f7 119 void messageArrived(MQTT::MessageData& md)
icraggs 2:638c854c0695 120 {
icraggs 9:5beb8609e9f7 121 MQTT::Message &message = md.message;
vpcola 22:4d0628d13870 122 pc.printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
vpcola 22:4d0628d13870 123 pc.printf("Payload %.*s\r\n", message.payloadlen, (char*)message.payload);
icraggs 2:638c854c0695 124 ++arrivedcount;
icraggs 2:638c854c0695 125 }
icraggs 0:0cae29831d01 126
vpcola 21:4534812bb94f 127 int mqttsConnect(const char * hostname, uint16_t port,
vpcola 21:4534812bb94f 128 const char * clientID,
vpcola 21:4534812bb94f 129 const char * username,
vpcola 21:4534812bb94f 130 const char * password)
vpcola 21:4534812bb94f 131 {
vpcola 21:4534812bb94f 132 int rc;
vpcola 21:4534812bb94f 133
vpcola 22:4d0628d13870 134 pc.printf("Connecting to %s:%d\r\n", hostname, port);
vpcola 21:4534812bb94f 135 rc = mqttNetwork.connect(hostname, port);
vpcola 21:4534812bb94f 136 if (rc != 0)
vpcola 21:4534812bb94f 137 {
vpcola 22:4d0628d13870 138 pc.printf("rc from TCP connect is %d\r\n", rc);
vpcola 21:4534812bb94f 139 return -1;
vpcola 21:4534812bb94f 140 }
vpcola 21:4534812bb94f 141 else
vpcola 22:4d0628d13870 142 pc.printf("RC passed!\r\n");
vpcola 21:4534812bb94f 143
vpcola 22:4d0628d13870 144 pc.printf("Creating data connection ...\r\n");
vpcola 21:4534812bb94f 145 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
vpcola 21:4534812bb94f 146 data.MQTTVersion = 3;
vpcola 21:4534812bb94f 147 data.clientID.cstring = (char *) clientID;
vpcola 21:4534812bb94f 148 data.username.cstring = (char *) username;
vpcola 21:4534812bb94f 149 data.password.cstring = (char *) password;
vpcola 22:4d0628d13870 150 pc.printf("Connecting client ...\r\n");
vpcola 21:4534812bb94f 151 if ((rc = client.connect(data)) != 0)
vpcola 21:4534812bb94f 152 {
vpcola 21:4534812bb94f 153 printf("rc from MQTT connect is %d\r\n", rc);
vpcola 21:4534812bb94f 154 return -1;
vpcola 21:4534812bb94f 155 }
vpcola 21:4534812bb94f 156
vpcola 22:4d0628d13870 157 pc.printf("Subscribing to topic ...\r\n");
vpcola 21:4534812bb94f 158 if ((rc = client.subscribe(topic, MQTT::QOS2, messageArrived)) != 0)
vpcola 21:4534812bb94f 159 {
vpcola 22:4d0628d13870 160 pc.printf("rc from MQTT subscribe is %d\r\n", rc);
vpcola 21:4534812bb94f 161 return -1;
vpcola 21:4534812bb94f 162 }
vpcola 21:4534812bb94f 163
vpcola 21:4534812bb94f 164 return rc;
vpcola 21:4534812bb94f 165 }
vpcola 21:4534812bb94f 166
vpcola 21:4534812bb94f 167 int mqttsSubscribe(const char * topic, MQTT::QoS os, messageHandler handler)
vpcola 21:4534812bb94f 168 {
vpcola 21:4534812bb94f 169 int rc;
vpcola 21:4534812bb94f 170
vpcola 22:4d0628d13870 171 pc.printf("Subscribing to topic ...\r\n");
vpcola 21:4534812bb94f 172 if ((rc = client.subscribe(topic, os, handler)) != 0)
vpcola 22:4d0628d13870 173 pc.printf("rc from MQTT subscribe is %d\r\n", rc);
vpcola 21:4534812bb94f 174
vpcola 21:4534812bb94f 175 return rc;
vpcola 21:4534812bb94f 176 }
vpcola 21:4534812bb94f 177
vpcola 21:4534812bb94f 178 // This function is used to pass data from
vpcola 21:4534812bb94f 179 // the main thread to the MQTT listener thread
vpcola 21:4534812bb94f 180 void postMQTTUpdate(MQTT::Message msg)
vpcola 21:4534812bb94f 181 {
vpcola 21:4534812bb94f 182 MQTT::Message * message = pool.alloc();
vpcola 21:4534812bb94f 183 // Simple copy, I think this is via (memcpy)
vpcola 21:4534812bb94f 184 *message = msg;
vpcola 21:4534812bb94f 185
vpcola 21:4534812bb94f 186 // Push the data to the consumer thread
vpcola 22:4d0628d13870 187 pc.printf("Pushing data to MQTTS Listener thread ...\r\n");
vpcola 21:4534812bb94f 188 queue.put(message);
vpcola 21:4534812bb94f 189 }
vpcola 21:4534812bb94f 190
vpcola 21:4534812bb94f 191 void mqttListener(void)
vpcola 21:4534812bb94f 192 {
vpcola 22:4d0628d13870 193 pc.printf("MQTT listener thread started ...\r\n");
vpcola 21:4534812bb94f 194 while(true)
vpcola 21:4534812bb94f 195 {
vpcola 21:4534812bb94f 196 // Wait for data in the queue, timeout at 10ms
vpcola 21:4534812bb94f 197 osEvent evt = queue.get(10);
vpcola 21:4534812bb94f 198 if (evt.status == osEventMessage) {
vpcola 22:4d0628d13870 199 pc.printf("Message arrived from main thread ...\r\n");
vpcola 21:4534812bb94f 200 // Unpack the message
vpcola 21:4534812bb94f 201 MQTT::Message * message = (MQTT::Message *)evt.value.p;
vpcola 21:4534812bb94f 202
vpcola 22:4d0628d13870 203 pc.printf("Publishing message to MQTT ...\r\n");
vpcola 21:4534812bb94f 204 // Push to mqtt
vpcola 21:4534812bb94f 205 int rc = client.publish(topic, *message);
vpcola 21:4534812bb94f 206 if (rc < 0)
vpcola 22:4d0628d13870 207 pc.printf("Error sending mqtt message \r\n");
vpcola 21:4534812bb94f 208 else
vpcola 22:4d0628d13870 209 pc.printf("Message published ...\r\n");
vpcola 21:4534812bb94f 210
vpcola 21:4534812bb94f 211 // Don't forget this!
vpcola 21:4534812bb94f 212 pool.free(message);
vpcola 21:4534812bb94f 213 }
vpcola 21:4534812bb94f 214
vpcola 22:4d0628d13870 215 pc.printf("MQTT client yeild ...\r\n");
vpcola 21:4534812bb94f 216 if (client.yield(100) != 0)
vpcola 21:4534812bb94f 217 {
vpcola 21:4534812bb94f 218 client.disconnect();
vpcola 21:4534812bb94f 219 // TODO: reconnect TLS session.
vpcola 21:4534812bb94f 220 return;
vpcola 21:4534812bb94f 221 }
vpcola 22:4d0628d13870 222 pc.printf("MQTT client yeild successful ...\r\n");
vpcola 21:4534812bb94f 223 }
vpcola 21:4534812bb94f 224 }
icraggs 2:638c854c0695 225
icraggs 2:638c854c0695 226 int main(int argc, char* argv[])
Jan Jongboom 20:49c9daf2b0ff 227 {
Jan Jongboom 20:49c9daf2b0ff 228 float version = 0.6;
Jan Jongboom 20:49c9daf2b0ff 229
vpcola 21:4534812bb94f 230 int i = 0;
vpcola 21:4534812bb94f 231
vpcola 22:4d0628d13870 232 pc.printf("HelloMQTT: version is %.2f\r\n", version);
Jan Jongboom 20:49c9daf2b0ff 233
Jan Jongboom 20:49c9daf2b0ff 234 NetworkInterface* network = easy_connect(true);
Jan Jongboom 20:49c9daf2b0ff 235 if (!network) {
Jan Jongboom 20:49c9daf2b0ff 236 return -1;
Jan Jongboom 20:49c9daf2b0ff 237 }
vpcola 22:4d0628d13870 238
vpcola 21:4534812bb94f 239 if ( mqttNetwork.setupTLS(network, SSL_CA_PEM) != 0 )
vpcola 21:4534812bb94f 240 {
vpcola 22:4d0628d13870 241 pc.printf("Failed initializing sercure MQTTS...\r\n");
vpcola 21:4534812bb94f 242 return -1;
vpcola 21:4534812bb94f 243 }
vpcola 21:4534812bb94f 244
vpcola 21:4534812bb94f 245 if ( mqttsConnect("mqtt.mbedhacks.com",
vpcola 21:4534812bb94f 246 8883,"mbedtest_01","tinong","tatay") != 0 )
vpcola 21:4534812bb94f 247 {
vpcola 22:4d0628d13870 248 pc.printf("Failed connecting to mqtt.mbedhacks.com:8883 \r\n");
vpcola 21:4534812bb94f 249 return -1;
vpcola 21:4534812bb94f 250 }
vpcola 21:4534812bb94f 251
vpcola 21:4534812bb94f 252 if ( mqttsSubscribe(topic, MQTT::QOS2, messageArrived) != 0 )
vpcola 21:4534812bb94f 253 {
vpcola 22:4d0628d13870 254 pc.printf("Failed to subscribe to a topic!\r\n");
vpcola 21:4534812bb94f 255 return -1;
vpcola 21:4534812bb94f 256 }
vpcola 21:4534812bb94f 257
vpcola 21:4534812bb94f 258 // Run an MQTT listener on its own thread.
vpcola 21:4534812bb94f 259 thdMQTT.start(mqttListener);
vpcola 21:4534812bb94f 260
vpcola 21:4534812bb94f 261 // The main loops just sends messages to MQTT server
vpcola 21:4534812bb94f 262 while(true)
vpcola 21:4534812bb94f 263 {
vpcola 21:4534812bb94f 264 MQTT::Message mqtt_msg;
vpcola 21:4534812bb94f 265 char buff[100];
vpcola 21:4534812bb94f 266
vpcola 21:4534812bb94f 267 sprintf(buff, "message test %d", i);
vpcola 21:4534812bb94f 268 mqtt_msg.qos = MQTT::QOS0;
vpcola 21:4534812bb94f 269 mqtt_msg.retained = false;
vpcola 21:4534812bb94f 270 mqtt_msg.dup = false;
vpcola 21:4534812bb94f 271 mqtt_msg.payload = (void*)buff;
vpcola 21:4534812bb94f 272 mqtt_msg.payloadlen = strlen(buff)+1;
vpcola 21:4534812bb94f 273
vpcola 21:4534812bb94f 274 // publish the message to mqtt
vpcola 21:4534812bb94f 275 postMQTTUpdate(mqtt_msg);
vpcola 21:4534812bb94f 276 i++;
vpcola 21:4534812bb94f 277
vpcola 21:4534812bb94f 278 Thread::wait(2000);
vpcola 21:4534812bb94f 279 }
icraggs 0:0cae29831d01 280
vpcola 21:4534812bb94f 281 //mqttNetwork.disconnect();
Jan Jongboom 20:49c9daf2b0ff 282
vpcola 21:4534812bb94f 283 //printf("Version %.2f: finish %d msgs\r\n", version, arrivedcount);
Jan Jongboom 20:49c9daf2b0ff 284
vpcola 22:4d0628d13870 285 //return 0;
icraggs 0:0cae29831d01 286 }