Cambridge Hackathon
/
MQTT-Python-Demo
Demo for Mbed Connect Cloud board and an MQTT Python Broker/Client
View the tutorial for this demo here.
working/main_working.h@4:cc36d40e9bf5, 2017-11-17 (annotated)
- 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?
User | Revision | Line number | New 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 | } |