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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include "TS_DISCO_F746NG.h"
00004 #include "LCD_DISCO_F746NG.h"
00005 #include <iostream>
00006 #include <string>
00007 #include <sstream>
00008 #include "MQTTEthernet.h"
00009 #include "MQTTClient.h"
00010 
00011 LCD_DISCO_F746NG lcd;
00012 TS_DISCO_F746NG ts;
00013 //EthernetInterface eth;
00014 MQTTEthernet ipstack = MQTTEthernet();
00015 MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
00016 MQTT::Message message;
00017 int message_count = 0;
00018 string buff;
00019 stringstream convert;
00020 int rc;
00021 
00022 #define TOKEN "YOUR THING TOKEN"
00023 
00024 string topic;
00025 
00026 void addValue(string key, int value)
00027 {
00028     if (message_count > 0) buff.append(",");
00029     buff.append("{\"key\":\"");
00030     buff.append(key);
00031     buff.append("\",\"value\":\"");
00032     convert.str("");
00033     convert << value;
00034     buff.append(convert.str());
00035     buff.append("\"}");
00036     message_count+= 1;
00037 }
00038 
00039 void send()
00040 {
00041     buff.append("]}");
00042     //convert << "]}";
00043     message.qos = MQTT::QOS0; // QOS0 or 1 available
00044     message.payload = (void*)buff.c_str();
00045     message.retained = false;
00046     message.dup = false;
00047     message.payloadlen = strlen(buff.c_str());
00048     rc = client.publish(topic.c_str(), message);
00049     buff = "{\"values\":[";
00050     //convert.str("{\"values\":[");
00051     //lcd.DisplayStringAt(0, LINE(5), (uint8_t *)convert.str().c_str(), CENTER_MODE);
00052     message_count = 0;
00053 }
00054 
00055 void messageArrived(MQTT::MessageData& md)
00056 {
00057     MQTT::Message &message = md.message;
00058     printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
00059     printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
00060 }
00061 
00062 int main(int argc, char* argv[])
00063 {
00064     TS_StateTypeDef TS_State;
00065     uint16_t x, y, x_ant, y_ant;
00066     /***** TS *****/
00067 
00068 
00069     topic.append("v2/things/");
00070     topic.append(string(TOKEN));
00071     /***** MQTT *****/
00072 
00073     char* hostname = "mqtt.thethings.io";
00074     int port = 1883;
00075     rc = ipstack.connect(hostname, port);
00076     MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
00077     data.MQTTVersion = 3;
00078     data.clientID.cstring = "disco-f746";
00079     rc = client.connect(data);
00080     rc = client.subscribe(topic.c_str(), MQTT::QOS0, messageArrived);
00081     buff = "{\"values\":[";
00082     addValue("demo", 0);
00083     send();
00084     lcd.Clear(LCD_COLOR_BLACK);
00085 
00086     lcd.SetTextColor(LCD_COLOR_RED);
00087     lcd.DrawCircle(160, 136, 50);
00088     wait(0.1);
00089     lcd.SetTextColor(LCD_COLOR_RED);
00090     lcd.FillCircle(160, 136, 50);
00091     wait(1);
00092     lcd.SetTextColor(LCD_COLOR_GREEN);
00093     lcd.DrawCircle(320, 136, 50);
00094     wait(0.1);
00095     lcd.SetTextColor(LCD_COLOR_GREEN);
00096     lcd.FillCircle(320, 136, 50);
00097     wait(1);
00098     ts.Init(lcd.GetXSize(), lcd.GetYSize());
00099     wait(3);
00100     while (1) {
00101         rc = client.connect(data);
00102         ts.GetState(&TS_State);
00103         if (TS_State.touchDetected) {
00104             x = TS_State.touchX[0];
00105             y = TS_State.touchY[0];
00106             if ((x_ant != x) && (y_ant != y)) {
00107                 if ((x >= 110 && x <= 210)&&(y >= 86 && y <= 186)) {
00108                     addValue("demo", 1);
00109                     send();
00110                 } else if ((x >= 270 && x <= 370)&&(y >= 86 && y <= 186)) {
00111                     addValue("demo", 2);
00112                     send();
00113                 }
00114             }
00115             x_ant = x;
00116             y_ant = y;
00117         }
00118     }
00119 }