Fork of Hello MQTT, using mbed TLS for secure mqtt transport
Fork of HelloMQTT by
main.cpp@22:4d0628d13870, 2017-03-18 (annotated)
- 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?
User | Revision | Line number | New 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 | } |