Demo for Mbed Connect Cloud board and an MQTT Python Broker/Client

Dependencies:   C12832 MQTT

Fork of MQTT-Python-Demo by Cambridge Hackathon

Committer:
Jenny Plunkett
Date:
Fri Nov 17 16:02:20 2017 -0600
Revision:
4:cc36d40e9bf5
Parent:
2:9265bf2d9c37
Added MQTTNetwork

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jenny Plunkett 0:a1a7aa0c3c53 1 //----------------------------------------------------------------------------
Jenny Plunkett 0:a1a7aa0c3c53 2 // The confidential and proprietary information contained in this file may
Jenny Plunkett 0:a1a7aa0c3c53 3 // only be used by a person authorised under and to the extent permitted
Jenny Plunkett 0:a1a7aa0c3c53 4 // by a subsisting licensing agreement from ARM Limited or its affiliates.
Jenny Plunkett 0:a1a7aa0c3c53 5 //
Jenny Plunkett 0:a1a7aa0c3c53 6 // (C) COPYRIGHT 2016 ARM Limited or its affiliates.
Jenny Plunkett 0:a1a7aa0c3c53 7 // ALL RIGHTS RESERVED
Jenny Plunkett 0:a1a7aa0c3c53 8 //
Jenny Plunkett 0:a1a7aa0c3c53 9 // This entire notice must be reproduced on all copies of this file
Jenny Plunkett 0:a1a7aa0c3c53 10 // and copies of this file may only be made by a person if such person is
Jenny Plunkett 0:a1a7aa0c3c53 11 // permitted to do so under the terms of a subsisting license agreement
Jenny Plunkett 0:a1a7aa0c3c53 12 // from ARM Limited or its affiliates.
Jenny Plunkett 0:a1a7aa0c3c53 13 //----------------------------------------------------------------------------
Jenny Plunkett 0:a1a7aa0c3c53 14 #include "mbed.h"
Jenny Plunkett 0:a1a7aa0c3c53 15 #include "C12832.h"
Jenny Plunkett 0:a1a7aa0c3c53 16 #include "OdinWiFiInterface.h"
Jenny Plunkett 0:a1a7aa0c3c53 17 #include "MQTTNetwork.h"
Jenny Plunkett 0:a1a7aa0c3c53 18 #include "MQTTmbed.h"
Jenny Plunkett 0:a1a7aa0c3c53 19 #include "MQTTClient.h"
Jenny Plunkett 0:a1a7aa0c3c53 20
Jenny Plunkett 0:a1a7aa0c3c53 21 // GLOBAL VARIABLES HERE
Jenny Plunkett 0:a1a7aa0c3c53 22
Jenny Plunkett 0:a1a7aa0c3c53 23 C12832 lcd(PE_14, PE_12, PD_12, PD_11, PE_9);
Jenny Plunkett 0:a1a7aa0c3c53 24 OdinWiFiInterface wifi;
Jenny Plunkett 2:9265bf2d9c37 25 InterruptIn button(PF_2);
Jenny Plunkett 2:9265bf2d9c37 26 volatile bool publish = false;
Jenny Plunkett 2:9265bf2d9c37 27 volatile int message_num = 0;
Jenny Plunkett 0:a1a7aa0c3c53 28
Jenny Plunkett 2:9265bf2d9c37 29 // FUNCTION DEFINITIONS HERE
Jenny Plunkett 0:a1a7aa0c3c53 30
Jenny Plunkett 0:a1a7aa0c3c53 31 void lcd_print(const char* message) {
Jenny Plunkett 0:a1a7aa0c3c53 32 lcd.cls();
Jenny Plunkett 0:a1a7aa0c3c53 33 lcd.locate(0, 3);
Jenny Plunkett 0:a1a7aa0c3c53 34 lcd.printf(message);
Jenny Plunkett 0:a1a7aa0c3c53 35 }
Jenny Plunkett 0:a1a7aa0c3c53 36
Jenny Plunkett 2:9265bf2d9c37 37 void messageArrived(MQTT::MessageData& md) {
Jenny Plunkett 2:9265bf2d9c37 38 MQTT::Message &message = md.message;
Jenny Plunkett 2:9265bf2d9c37 39 char msg[300];
Jenny Plunkett 2:9265bf2d9c37 40 sprintf(msg, "Message arrived: QoS%d, retained %d, dup %d, packetID %d\r\n", message.qos, message.retained, message.dup, message.id);
Jenny Plunkett 2:9265bf2d9c37 41 lcd_print(msg);
Jenny Plunkett 2:9265bf2d9c37 42 wait_ms(1000);
Jenny Plunkett 2:9265bf2d9c37 43 char payload[300];
Jenny Plunkett 2:9265bf2d9c37 44 sprintf(payload, "Payload %.*s\r\n", message.payloadlen, (char*)message.payload);
Jenny Plunkett 2:9265bf2d9c37 45 lcd_print(payload);
Jenny Plunkett 2:9265bf2d9c37 46 }
Jenny Plunkett 2:9265bf2d9c37 47
Jenny Plunkett 2:9265bf2d9c37 48 void publish_message() {
Jenny Plunkett 2:9265bf2d9c37 49 publish = true;
Jenny Plunkett 2:9265bf2d9c37 50 }
Jenny Plunkett 2:9265bf2d9c37 51
Jenny Plunkett 0:a1a7aa0c3c53 52 int main() {
Jenny Plunkett 0:a1a7aa0c3c53 53
Jenny Plunkett 0:a1a7aa0c3c53 54 // MAIN CODE HERE
Jenny Plunkett 0:a1a7aa0c3c53 55
Jenny Plunkett 0:a1a7aa0c3c53 56 lcd_print("Connecting...");
Jenny Plunkett 0:a1a7aa0c3c53 57 int ret = wifi.connect(MBED_CONF_APP_WIFI_SSID, MBED_CONF_APP_WIFI_PASSWORD, NSAPI_SECURITY_WPA_WPA2);
Jenny Plunkett 0:a1a7aa0c3c53 58 if (ret != 0) {
Jenny Plunkett 0:a1a7aa0c3c53 59 lcd_print("Connection error.");
Jenny Plunkett 0:a1a7aa0c3c53 60 return -1;
Jenny Plunkett 0:a1a7aa0c3c53 61 }
Jenny Plunkett 2:9265bf2d9c37 62
Jenny Plunkett 2:9265bf2d9c37 63 NetworkInterface* net = &wifi;
Jenny Plunkett 2:9265bf2d9c37 64 MQTTNetwork mqttNetwork(net);
Jenny Plunkett 2:9265bf2d9c37 65 MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork);
Jenny Plunkett 2:9265bf2d9c37 66
Jenny Plunkett 2:9265bf2d9c37 67 const char* host = "IP_ADDRESS_HERE";
Jenny Plunkett 2:9265bf2d9c37 68 const char* topic = "Mbed";
Jenny Plunkett 2:9265bf2d9c37 69 lcd_print("Connecting to MQTT network...");
Jenny Plunkett 2:9265bf2d9c37 70 int rc = mqttNetwork.connect(host, 1883);
Jenny Plunkett 2:9265bf2d9c37 71 if (rc != 0) {
Jenny Plunkett 2:9265bf2d9c37 72 lcd_print("Connection error.");
Jenny Plunkett 2:9265bf2d9c37 73 return -1;
Jenny Plunkett 2:9265bf2d9c37 74 }
Jenny Plunkett 0:a1a7aa0c3c53 75 lcd_print("Successfully connected!");
Jenny Plunkett 0:a1a7aa0c3c53 76
Jenny Plunkett 2:9265bf2d9c37 77 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
Jenny Plunkett 2:9265bf2d9c37 78 data.MQTTVersion = 3;
Jenny Plunkett 2:9265bf2d9c37 79 data.clientID.cstring = "connect-cloud-board";
Jenny Plunkett 2:9265bf2d9c37 80 client.connect(data);
Jenny Plunkett 2:9265bf2d9c37 81 client.subscribe(topic, MQTT::QOS0, messageArrived);
Jenny Plunkett 2:9265bf2d9c37 82
Jenny Plunkett 2:9265bf2d9c37 83 button.fall(&publish_message);
Jenny Plunkett 2:9265bf2d9c37 84
Jenny Plunkett 0:a1a7aa0c3c53 85 while (true) {
Jenny Plunkett 0:a1a7aa0c3c53 86
Jenny Plunkett 0:a1a7aa0c3c53 87 // WHILE LOOP CODE HERE
Jenny Plunkett 0:a1a7aa0c3c53 88
Jenny Plunkett 2:9265bf2d9c37 89 if (publish) {
Jenny Plunkett 2:9265bf2d9c37 90 message_num++;
Jenny Plunkett 2:9265bf2d9c37 91 MQTT::Message message;
Jenny Plunkett 2:9265bf2d9c37 92 char buff[100];
Jenny Plunkett 2:9265bf2d9c37 93 sprintf(buff, "QoS0 Hello, Python! #%d", message_num);
Jenny Plunkett 2:9265bf2d9c37 94 message.qos = MQTT::QOS0;
Jenny Plunkett 2:9265bf2d9c37 95 message.retained = false;
Jenny Plunkett 2:9265bf2d9c37 96 message.dup = false;
Jenny Plunkett 2:9265bf2d9c37 97 message.payload = (void*) buff;
Jenny Plunkett 2:9265bf2d9c37 98 message.payloadlen = strlen(buff) + 1;
Jenny Plunkett 2:9265bf2d9c37 99 rc = client.publish(topic, message);
Jenny Plunkett 2:9265bf2d9c37 100 client.yield(100);
Jenny Plunkett 2:9265bf2d9c37 101 publish = false;
Jenny Plunkett 2:9265bf2d9c37 102 }
Jenny Plunkett 0:a1a7aa0c3c53 103
Jenny Plunkett 0:a1a7aa0c3c53 104 }
Jenny Plunkett 0:a1a7aa0c3c53 105
Jenny Plunkett 0:a1a7aa0c3c53 106 }