Connecting a Multi-Tech Systems Dragonfly™ to Twilio's Sync for IoT Quickstart. Blink a dev board LED.

Dependencies:   MQTT MbedJSONValue mbed mtsas

Fork of DragonflyMQTT by miao zhicheng

Code to connect a Multi-Tech® MultiConnect® Dragonfly™ to Twilio's Sync for IoT: https://www.twilio.com/docs/api/devices

Uses MQTT over TLS and subscribes to a topic where you can control an LED. See also our Quickstart using this code, here: https://www.twilio.com/docs/quickstart/sync-iot/mqtt-multi-tech-multiconnect-dragonfly-sync-iot

Committer:
miaotwilio
Date:
Fri May 12 11:49:58 2017 +0000
Revision:
1:5a896191c3c4
Parent:
0:b32fa0c757d7
Child:
2:d4dcf1ebaa99
integrated with UI

Who changed what in which revision?

UserRevisionLine numberNew contents of line
miaotwilio 0:b32fa0c757d7 1 #include <ssl.h>
miaotwilio 0:b32fa0c757d7 2 #include <mbed.h>
miaotwilio 0:b32fa0c757d7 3 #include <mtsas.h>
miaotwilio 0:b32fa0c757d7 4 #include <TCPSocketConnection.h>
miaotwilio 0:b32fa0c757d7 5 #include <MQTTClient.h>
miaotwilio 0:b32fa0c757d7 6 #include <MQTTmbed.h>
miaotwilio 0:b32fa0c757d7 7
miaotwilio 0:b32fa0c757d7 8 class TlsMQTTClient {
miaotwilio 0:b32fa0c757d7 9 public:
miaotwilio 0:b32fa0c757d7 10 TlsMQTTClient();
miaotwilio 0:b32fa0c757d7 11 ~TlsMQTTClient();
miaotwilio 0:b32fa0c757d7 12
miaotwilio 0:b32fa0c757d7 13 private:
miaotwilio 1:5a896191c3c4 14 typedef MQTT::Client<TlsMQTTClient, Countdown, 1000 /* MAX_MQTT_PACKET_SIZE */> MQTTClient;
miaotwilio 0:b32fa0c757d7 15
miaotwilio 0:b32fa0c757d7 16 // MQTT Operations
miaotwilio 0:b32fa0c757d7 17 public:
miaotwilio 0:b32fa0c757d7 18 /** MQTT Connect - send an MQTT connect packet down the network and wait for a Connack
miaotwilio 0:b32fa0c757d7 19 * The nework object must be connected to the network endpoint before calling this
miaotwilio 0:b32fa0c757d7 20 * @param host - host of the mqtt server
miaotwilio 0:b32fa0c757d7 21 * @param port - port of the mqtt server
miaotwilio 0:b32fa0c757d7 22 * @param certificates - CA certs to be verified, can be NULL to bypass CA checking(not recommended)
miaotwilio 0:b32fa0c757d7 23 * @param options - connect options
miaotwilio 0:b32fa0c757d7 24 * @return success code -
miaotwilio 0:b32fa0c757d7 25 */
miaotwilio 0:b32fa0c757d7 26 int connect(const char* host, const int port,
miaotwilio 0:b32fa0c757d7 27 const char* certificates,
miaotwilio 0:b32fa0c757d7 28 MQTTPacket_connectData& options);
miaotwilio 0:b32fa0c757d7 29
miaotwilio 0:b32fa0c757d7 30 /** MQTT Publish - send an MQTT publish packet and wait for all acks to complete for all QoSs
miaotwilio 0:b32fa0c757d7 31 * @param topic - the topic to publish to
miaotwilio 0:b32fa0c757d7 32 * @param message - the message to send
miaotwilio 0:b32fa0c757d7 33 * @return success code -
miaotwilio 0:b32fa0c757d7 34 */
miaotwilio 0:b32fa0c757d7 35 int publish(const char* topicName, MQTT::Message& message);
miaotwilio 0:b32fa0c757d7 36
miaotwilio 0:b32fa0c757d7 37 /** MQTT Publish - send an MQTT publish packet and wait for all acks to complete for all QoSs
miaotwilio 0:b32fa0c757d7 38 * @param topic - the topic to publish to
miaotwilio 0:b32fa0c757d7 39 * @param payload - the data to send
miaotwilio 0:b32fa0c757d7 40 * @param payloadlen - the length of the data
miaotwilio 0:b32fa0c757d7 41 * @param qos - the QoS to send the publish at
miaotwilio 0:b32fa0c757d7 42 * @param retained - whether the message should be retained
miaotwilio 0:b32fa0c757d7 43 * @return success code -
miaotwilio 0:b32fa0c757d7 44 */
miaotwilio 0:b32fa0c757d7 45 int publish(const char* topicName, void* payload, size_t payloadlen, enum MQTT::QoS qos = MQTT::QOS0, bool retained = false);
miaotwilio 0:b32fa0c757d7 46
miaotwilio 0:b32fa0c757d7 47 /** MQTT Publish - send an MQTT publish packet and wait for all acks to complete for all QoSs
miaotwilio 0:b32fa0c757d7 48 * @param topic - the topic to publish to
miaotwilio 0:b32fa0c757d7 49 * @param payload - the data to send
miaotwilio 0:b32fa0c757d7 50 * @param payloadlen - the length of the data
miaotwilio 0:b32fa0c757d7 51 * @param id - the packet id used - returned
miaotwilio 0:b32fa0c757d7 52 * @param qos - the QoS to send the publish at
miaotwilio 0:b32fa0c757d7 53 * @param retained - whether the message should be retained
miaotwilio 0:b32fa0c757d7 54 * @return success code -
miaotwilio 0:b32fa0c757d7 55 */
miaotwilio 0:b32fa0c757d7 56 int publish(const char* topicName, void* payload, size_t payloadlen, unsigned short& id, enum MQTT::QoS qos = MQTT::QOS1, bool retained = false);
miaotwilio 0:b32fa0c757d7 57
miaotwilio 0:b32fa0c757d7 58 typedef void (*MessageHandler)(MQTT::MessageData&);
miaotwilio 0:b32fa0c757d7 59
miaotwilio 0:b32fa0c757d7 60 /** MQTT Subscribe - send an MQTT subscribe packet and wait for the suback
miaotwilio 0:b32fa0c757d7 61 * @param topicFilter - a topic pattern which can include wildcards
miaotwilio 0:b32fa0c757d7 62 * @param qos - the MQTT QoS to subscribe at
miaotwilio 0:b32fa0c757d7 63 * @param mh - the callback function to be invoked when a message is received for this subscription
miaotwilio 0:b32fa0c757d7 64 * @return success code -
miaotwilio 0:b32fa0c757d7 65 */
miaotwilio 0:b32fa0c757d7 66 int subscribe(const char* topicFilter, enum MQTT::QoS qos, MessageHandler mh);
miaotwilio 0:b32fa0c757d7 67
miaotwilio 0:b32fa0c757d7 68 /** MQTT Unsubscribe - send an MQTT unsubscribe packet and wait for the unsuback
miaotwilio 0:b32fa0c757d7 69 * @param topicFilter - a topic pattern which can include wildcards
miaotwilio 0:b32fa0c757d7 70 * @return success code -
miaotwilio 0:b32fa0c757d7 71 */
miaotwilio 0:b32fa0c757d7 72 int unsubscribe(const char* topicFilter);
miaotwilio 0:b32fa0c757d7 73
miaotwilio 0:b32fa0c757d7 74 /** MQTT Disconnect - send an MQTT disconnect packet, and clean up any state
miaotwilio 0:b32fa0c757d7 75 * @return success code -
miaotwilio 0:b32fa0c757d7 76 */
miaotwilio 0:b32fa0c757d7 77 int disconnect();
miaotwilio 0:b32fa0c757d7 78
miaotwilio 0:b32fa0c757d7 79 /** A call to this API must be made within the keepAlive interval to keep the MQTT connection alive
miaotwilio 0:b32fa0c757d7 80 * yield can be called if no other MQTT operation is needed. This will also allow messages to be
miaotwilio 0:b32fa0c757d7 81 * received.
miaotwilio 0:b32fa0c757d7 82 * @param timeout_ms the time to wait, in milliseconds
miaotwilio 0:b32fa0c757d7 83 * @return success code - on failure, this means the client has disconnected
miaotwilio 0:b32fa0c757d7 84 */
miaotwilio 0:b32fa0c757d7 85 int yield(unsigned long timeout_ms = 1000L);
miaotwilio 0:b32fa0c757d7 86
miaotwilio 0:b32fa0c757d7 87 /** Is the client connected?
miaotwilio 0:b32fa0c757d7 88 * @return flag - is the client connected or not?
miaotwilio 0:b32fa0c757d7 89 */
miaotwilio 0:b32fa0c757d7 90 bool isConnected();
miaotwilio 0:b32fa0c757d7 91
miaotwilio 0:b32fa0c757d7 92 // Network interface for MQTT::Client
miaotwilio 0:b32fa0c757d7 93 public:
miaotwilio 0:b32fa0c757d7 94 int read(unsigned char* data, int max, int timeout = -1);
miaotwilio 0:b32fa0c757d7 95 int write(const unsigned char* data, int length, int timeout = -1);
miaotwilio 0:b32fa0c757d7 96
miaotwilio 0:b32fa0c757d7 97 private:
miaotwilio 0:b32fa0c757d7 98 void cleanupTransport();
miaotwilio 0:b32fa0c757d7 99 static int ioRecv(CYASSL* ssl, char *buf, int sz, void *ctx);
miaotwilio 0:b32fa0c757d7 100 static int ioSend(CYASSL* ssl, char *buf, int sz, void *ctx);
miaotwilio 0:b32fa0c757d7 101
miaotwilio 0:b32fa0c757d7 102 private:
miaotwilio 0:b32fa0c757d7 103 TCPSocketConnection* tcp;
miaotwilio 0:b32fa0c757d7 104 CYASSL_CTX* ctx;
miaotwilio 0:b32fa0c757d7 105 CYASSL *ssl;
miaotwilio 1:5a896191c3c4 106 MQTTClient* mqttClient;
miaotwilio 0:b32fa0c757d7 107 };