Simple demo with GPIO MQTT protocol test on STM32 broker tests.mosquitto.org WIFI interface ESP8266 Issue of topic0 by pressing the button If reception of ', switching of the led If received from 'q' end of program

Dependencies:   MQTT

This is a MQTT protocol test on STM32 NUCLEO The broker is tests.mosquitto.org The WIFI interface is ESP8266

For configuration please check mbed_app.json and #define in main.cpp

Issue of topic0 by pressing the button If received 'l' from broker then switching of the led If received 'q' from broker then end the program

Information and debug with a terminal using UART over USB https://os.mbed.com/media/uploads/cdupaty/mqtt2.jpg

This test has been checked with MQTT.fx https://os.mbed.com/media/uploads/cdupaty/mqttfx.jpg

Committer:
icraggs
Date:
Fri Aug 01 17:02:22 2014 +0000
Revision:
12:086a9314e8a5
Parent:
9:5beb8609e9f7
Child:
16:28d062c5522b
Some cleaning up

Who changed what in which revision?

UserRevisionLine numberNew contents of line
icraggs 1:a1d5c7a6acbc 1 /*******************************************************************************
icraggs 1:a1d5c7a6acbc 2 * Copyright (c) 2014 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 1:a1d5c7a6acbc 15 *******************************************************************************/
icraggs 2:638c854c0695 16
icraggs 2:638c854c0695 17 /**
icraggs 2:638c854c0695 18 This is a sample program to illustrate the use of the MQTT Client library
icraggs 2:638c854c0695 19 on the mbed platform. The Client class requires two classes which mediate
icraggs 2:638c854c0695 20 access to system interfaces for networking and timing. As long as these two
icraggs 2:638c854c0695 21 classes provide the required public programming interfaces, it does not matter
icraggs 2:638c854c0695 22 what facilities they use underneath. In this program, they use the mbed
icraggs 2:638c854c0695 23 system libraries.
icraggs 2:638c854c0695 24
icraggs 2:638c854c0695 25 */
icraggs 1:a1d5c7a6acbc 26
icraggs 2:638c854c0695 27
sam_grove 5:4a257f6ac09a 28 #include "C12832.h"
sam_grove 5:4a257f6ac09a 29 C12832 lcd(p5, p7, p6, p8, p11);
icraggs 0:0cae29831d01 30
icraggs 8:a3e3113054a1 31 #include "MQTTEthernet.h"
icraggs 2:638c854c0695 32 #include "MQTTClient.h"
icraggs 2:638c854c0695 33
icraggs 2:638c854c0695 34 int arrivedcount = 0;
icraggs 2:638c854c0695 35
icraggs 8:a3e3113054a1 36
icraggs 9:5beb8609e9f7 37 void messageArrived(MQTT::MessageData& md)
icraggs 2:638c854c0695 38 {
icraggs 9:5beb8609e9f7 39 MQTT::Message &message = md.message;
sam_grove 5:4a257f6ac09a 40 lcd.cls();
sam_grove 5:4a257f6ac09a 41 lcd.locate(0,3);
icraggs 9:5beb8609e9f7 42 printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
icraggs 9:5beb8609e9f7 43 printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
icraggs 2:638c854c0695 44 ++arrivedcount;
icraggs 9:5beb8609e9f7 45 lcd.puts((char*)message.payload);
icraggs 2:638c854c0695 46 }
icraggs 0:0cae29831d01 47
icraggs 2:638c854c0695 48
icraggs 2:638c854c0695 49 int main(int argc, char* argv[])
icraggs 2:638c854c0695 50 {
icraggs 8:a3e3113054a1 51 MQTTEthernet ipstack = MQTTEthernet();
icraggs 9:5beb8609e9f7 52 float version = 0.47;
icraggs 2:638c854c0695 53 char* topic = "mbed-sample";
icraggs 2:638c854c0695 54
icraggs 2:638c854c0695 55 lcd.printf("Version is %f\n", version);
sam_grove 5:4a257f6ac09a 56 printf("Version is %f\n", version);
icraggs 2:638c854c0695 57
icraggs 8:a3e3113054a1 58 MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
icraggs 3:7a6a899de7cc 59
icraggs 6:e4c690c45021 60 char* hostname = "m2m.eclipse.org";
icraggs 6:e4c690c45021 61 int port = 1883;
icraggs 6:e4c690c45021 62 lcd.printf("Connecting to %s:%d\n", hostname, port);
icraggs 6:e4c690c45021 63 int rc = ipstack.connect(hostname, port);
icraggs 6:e4c690c45021 64 if (rc != 0)
icraggs 6:e4c690c45021 65 lcd.printf("rc from TCP connect is %d\n", rc);
icraggs 6:e4c690c45021 66
icraggs 6:e4c690c45021 67 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
icraggs 6:e4c690c45021 68 data.MQTTVersion = 3;
icraggs 8:a3e3113054a1 69 data.clientID.cstring = "mbed-sample";
icraggs 12:086a9314e8a5 70 data.username.cstring = "testuser";
icraggs 12:086a9314e8a5 71 data.password.cstring = "testpassword";
icraggs 8:a3e3113054a1 72 if ((rc = client.connect(&data)) != 0)
icraggs 6:e4c690c45021 73 lcd.printf("rc from MQTT connect is %d\n", rc);
icraggs 2:638c854c0695 74
icraggs 8:a3e3113054a1 75 if ((rc = client.subscribe(topic, MQTT::QOS1, messageArrived)) != 0)
icraggs 8:a3e3113054a1 76 lcd.printf("rc from MQTT subscribe is %d\n", rc);
icraggs 2:638c854c0695 77
icraggs 2:638c854c0695 78 MQTT::Message message;
icraggs 0:0cae29831d01 79
icraggs 2:638c854c0695 80 // QoS 0
icraggs 2:638c854c0695 81 char buf[100];
icraggs 2:638c854c0695 82 sprintf(buf, "Hello World! QoS 0 message from app version %f\n", version);
icraggs 2:638c854c0695 83 message.qos = MQTT::QOS0;
icraggs 2:638c854c0695 84 message.retained = false;
icraggs 2:638c854c0695 85 message.dup = false;
icraggs 2:638c854c0695 86 message.payload = (void*)buf;
icraggs 2:638c854c0695 87 message.payloadlen = strlen(buf)+1;
icraggs 2:638c854c0695 88 rc = client.publish(topic, &message);
icraggs 12:086a9314e8a5 89 while (arrivedcount < 1)
icraggs 2:638c854c0695 90 client.yield(100);
icraggs 2:638c854c0695 91
icraggs 2:638c854c0695 92 // QoS 1
icraggs 2:638c854c0695 93 sprintf(buf, "Hello World! QoS 1 message from app version %f\n", version);
icraggs 2:638c854c0695 94 message.qos = MQTT::QOS1;
icraggs 2:638c854c0695 95 message.payloadlen = strlen(buf)+1;
icraggs 2:638c854c0695 96 rc = client.publish(topic, &message);
icraggs 12:086a9314e8a5 97 while (arrivedcount < 2)
icraggs 2:638c854c0695 98 client.yield(100);
icraggs 2:638c854c0695 99
icraggs 2:638c854c0695 100 // QoS 2
icraggs 2:638c854c0695 101 sprintf(buf, "Hello World! QoS 2 message from app version %f\n", version);
icraggs 2:638c854c0695 102 message.qos = MQTT::QOS2;
icraggs 2:638c854c0695 103 message.payloadlen = strlen(buf)+1;
icraggs 2:638c854c0695 104 rc = client.publish(topic, &message);
icraggs 12:086a9314e8a5 105 while (arrivedcount < 3)
icraggs 2:638c854c0695 106 client.yield(100);
icraggs 12:086a9314e8a5 107
icraggs 12:086a9314e8a5 108 // n * QoS 2
icraggs 12:086a9314e8a5 109 for (int i = 1; i <= 10; ++i)
icraggs 12:086a9314e8a5 110 {
icraggs 12:086a9314e8a5 111 sprintf(buf, "Hello World! QoS 2 message number %d from app version %f\n", i, version);
icraggs 12:086a9314e8a5 112 message.qos = MQTT::QOS2;
icraggs 12:086a9314e8a5 113 message.payloadlen = strlen(buf)+1;
icraggs 12:086a9314e8a5 114 rc = client.publish(topic, &message);
icraggs 12:086a9314e8a5 115 while (arrivedcount < i + 3)
icraggs 12:086a9314e8a5 116 client.yield(100);
icraggs 12:086a9314e8a5 117 }
icraggs 2:638c854c0695 118
icraggs 8:a3e3113054a1 119 if ((rc = client.unsubscribe(topic)) != 0)
sam_grove 5:4a257f6ac09a 120 printf("rc from unsubscribe was %d\n", rc);
icraggs 2:638c854c0695 121
icraggs 8:a3e3113054a1 122 if ((rc = client.disconnect()) != 0)
sam_grove 5:4a257f6ac09a 123 printf("rc from disconnect was %d\n", rc);
icraggs 2:638c854c0695 124
icraggs 2:638c854c0695 125 ipstack.disconnect();
icraggs 2:638c854c0695 126
sam_grove 5:4a257f6ac09a 127 lcd.cls();
sam_grove 5:4a257f6ac09a 128 lcd.locate(0,3);
icraggs 8:a3e3113054a1 129 lcd.printf("Version %.2f: finish %d msgs\n", version, arrivedcount);
sam_grove 5:4a257f6ac09a 130 printf("Finishing with %d messages received\n", arrivedcount);
icraggs 2:638c854c0695 131
icraggs 0:0cae29831d01 132 return 0;
icraggs 0:0cae29831d01 133 }