mqtt example to connect the DISCO_F746NG board to thethings.iO

Dependencies:   BSP_DISCO_F746NG F7_Ethernet LCD_DISCO_F746NG MQTT TS_DISCO_F746NG mbed-dev mbed-rtos

Fork of DISCO-F746NG_Ethernet by Dieter Graef

Committer:
charlyo
Date:
Tue Sep 06 08:43:26 2016 +0000
Revision:
3:2f97b7ccf281
Parent:
2:da892754b44a
Deleted unneeded library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DieterGraef 0:2110d31ecdf8 1 #include "mbed.h"
DieterGraef 0:2110d31ecdf8 2 #include "rtos.h"
charlyo 2:da892754b44a 3 #include "TS_DISCO_F746NG.h"
charlyo 2:da892754b44a 4 #include "LCD_DISCO_F746NG.h"
charlyo 2:da892754b44a 5 #include <iostream>
charlyo 2:da892754b44a 6 #include <string>
charlyo 2:da892754b44a 7 #include <sstream>
charlyo 2:da892754b44a 8 #include "MQTTEthernet.h"
charlyo 2:da892754b44a 9 #include "MQTTClient.h"
charlyo 2:da892754b44a 10
charlyo 2:da892754b44a 11 LCD_DISCO_F746NG lcd;
charlyo 2:da892754b44a 12 TS_DISCO_F746NG ts;
charlyo 2:da892754b44a 13 //EthernetInterface eth;
charlyo 2:da892754b44a 14 MQTTEthernet ipstack = MQTTEthernet();
charlyo 2:da892754b44a 15 MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
charlyo 2:da892754b44a 16 MQTT::Message message;
charlyo 2:da892754b44a 17 int message_count = 0;
charlyo 2:da892754b44a 18 string buff;
charlyo 2:da892754b44a 19 stringstream convert;
charlyo 2:da892754b44a 20 int rc;
charlyo 2:da892754b44a 21
charlyo 2:da892754b44a 22 #define TOKEN "YOUR THING TOKEN"
charlyo 2:da892754b44a 23
charlyo 2:da892754b44a 24 string topic;
DieterGraef 0:2110d31ecdf8 25
charlyo 2:da892754b44a 26 void addValue(string key, int value)
charlyo 2:da892754b44a 27 {
charlyo 2:da892754b44a 28 if (message_count > 0) buff.append(",");
charlyo 2:da892754b44a 29 buff.append("{\"key\":\"");
charlyo 2:da892754b44a 30 buff.append(key);
charlyo 2:da892754b44a 31 buff.append("\",\"value\":\"");
charlyo 2:da892754b44a 32 convert.str("");
charlyo 2:da892754b44a 33 convert << value;
charlyo 2:da892754b44a 34 buff.append(convert.str());
charlyo 2:da892754b44a 35 buff.append("\"}");
charlyo 2:da892754b44a 36 message_count+= 1;
charlyo 2:da892754b44a 37 }
DieterGraef 0:2110d31ecdf8 38
charlyo 2:da892754b44a 39 void send()
charlyo 2:da892754b44a 40 {
charlyo 2:da892754b44a 41 buff.append("]}");
charlyo 2:da892754b44a 42 //convert << "]}";
charlyo 2:da892754b44a 43 message.qos = MQTT::QOS0; // QOS0 or 1 available
charlyo 2:da892754b44a 44 message.payload = (void*)buff.c_str();
charlyo 2:da892754b44a 45 message.retained = false;
charlyo 2:da892754b44a 46 message.dup = false;
charlyo 2:da892754b44a 47 message.payloadlen = strlen(buff.c_str());
charlyo 2:da892754b44a 48 rc = client.publish(topic.c_str(), message);
charlyo 2:da892754b44a 49 buff = "{\"values\":[";
charlyo 2:da892754b44a 50 //convert.str("{\"values\":[");
charlyo 2:da892754b44a 51 //lcd.DisplayStringAt(0, LINE(5), (uint8_t *)convert.str().c_str(), CENTER_MODE);
charlyo 2:da892754b44a 52 message_count = 0;
charlyo 2:da892754b44a 53 }
DieterGraef 0:2110d31ecdf8 54
charlyo 2:da892754b44a 55 void messageArrived(MQTT::MessageData& md)
DieterGraef 0:2110d31ecdf8 56 {
charlyo 2:da892754b44a 57 MQTT::Message &message = md.message;
charlyo 2:da892754b44a 58 printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
charlyo 2:da892754b44a 59 printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
charlyo 2:da892754b44a 60 }
charlyo 2:da892754b44a 61
charlyo 2:da892754b44a 62 int main(int argc, char* argv[])
charlyo 2:da892754b44a 63 {
charlyo 2:da892754b44a 64 TS_StateTypeDef TS_State;
charlyo 2:da892754b44a 65 uint16_t x, y, x_ant, y_ant;
charlyo 2:da892754b44a 66 /***** TS *****/
charlyo 2:da892754b44a 67
charlyo 2:da892754b44a 68
charlyo 2:da892754b44a 69 topic.append("v2/things/");
charlyo 2:da892754b44a 70 topic.append(string(TOKEN));
charlyo 2:da892754b44a 71 /***** MQTT *****/
charlyo 2:da892754b44a 72
charlyo 2:da892754b44a 73 char* hostname = "mqtt.thethings.io";
charlyo 2:da892754b44a 74 int port = 1883;
charlyo 2:da892754b44a 75 rc = ipstack.connect(hostname, port);
charlyo 2:da892754b44a 76 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
charlyo 2:da892754b44a 77 data.MQTTVersion = 3;
charlyo 2:da892754b44a 78 data.clientID.cstring = "disco-f746";
charlyo 2:da892754b44a 79 rc = client.connect(data);
charlyo 2:da892754b44a 80 rc = client.subscribe(topic.c_str(), MQTT::QOS0, messageArrived);
charlyo 2:da892754b44a 81 buff = "{\"values\":[";
charlyo 2:da892754b44a 82 addValue("demo", 0);
charlyo 2:da892754b44a 83 send();
charlyo 2:da892754b44a 84 lcd.Clear(LCD_COLOR_BLACK);
DieterGraef 0:2110d31ecdf8 85
charlyo 2:da892754b44a 86 lcd.SetTextColor(LCD_COLOR_RED);
charlyo 2:da892754b44a 87 lcd.DrawCircle(160, 136, 50);
charlyo 2:da892754b44a 88 wait(0.1);
charlyo 2:da892754b44a 89 lcd.SetTextColor(LCD_COLOR_RED);
charlyo 2:da892754b44a 90 lcd.FillCircle(160, 136, 50);
charlyo 2:da892754b44a 91 wait(1);
charlyo 2:da892754b44a 92 lcd.SetTextColor(LCD_COLOR_GREEN);
charlyo 2:da892754b44a 93 lcd.DrawCircle(320, 136, 50);
charlyo 2:da892754b44a 94 wait(0.1);
charlyo 2:da892754b44a 95 lcd.SetTextColor(LCD_COLOR_GREEN);
charlyo 2:da892754b44a 96 lcd.FillCircle(320, 136, 50);
charlyo 2:da892754b44a 97 wait(1);
charlyo 2:da892754b44a 98 ts.Init(lcd.GetXSize(), lcd.GetYSize());
charlyo 2:da892754b44a 99 wait(3);
charlyo 2:da892754b44a 100 while (1) {
charlyo 2:da892754b44a 101 rc = client.connect(data);
charlyo 2:da892754b44a 102 ts.GetState(&TS_State);
charlyo 2:da892754b44a 103 if (TS_State.touchDetected) {
charlyo 2:da892754b44a 104 x = TS_State.touchX[0];
charlyo 2:da892754b44a 105 y = TS_State.touchY[0];
charlyo 2:da892754b44a 106 if ((x_ant != x) && (y_ant != y)) {
charlyo 2:da892754b44a 107 if ((x >= 110 && x <= 210)&&(y >= 86 && y <= 186)) {
charlyo 2:da892754b44a 108 addValue("demo", 1);
charlyo 2:da892754b44a 109 send();
charlyo 2:da892754b44a 110 } else if ((x >= 270 && x <= 370)&&(y >= 86 && y <= 186)) {
charlyo 2:da892754b44a 111 addValue("demo", 2);
charlyo 2:da892754b44a 112 send();
charlyo 2:da892754b44a 113 }
charlyo 2:da892754b44a 114 }
charlyo 2:da892754b44a 115 x_ant = x;
charlyo 2:da892754b44a 116 y_ant = y;
DieterGraef 0:2110d31ecdf8 117 }
DieterGraef 0:2110d31ecdf8 118 }
DieterGraef 0:2110d31ecdf8 119 }