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:
pkamp
Date:
Tue Sep 19 21:45:19 2017 +0000
Revision:
10:e9abab84df23
Parent:
9:2d119fbe7482
Adding publishing

Who changed what in which revision?

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