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
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 }
Generated on Fri Jul 15 2022 22:14:44 by 1.7.2