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@3:2f97b7ccf281, 2016-09-06 (annotated)
- 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?
User | Revision | Line number | New 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 | } |