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

Revision:
2:da892754b44a
Parent:
0:2110d31ecdf8
--- a/main.cpp	Thu Jun 23 09:04:56 2016 +0000
+++ b/main.cpp	Tue Sep 06 08:42:28 2016 +0000
@@ -1,55 +1,119 @@
 #include "mbed.h"
 #include "rtos.h"
-#include "EthernetInterface.h"
-#include "NTPClient.h"
-#include <stdio.h>
+#include "TS_DISCO_F746NG.h"
+#include "LCD_DISCO_F746NG.h"
+#include <iostream>
+#include <string>
+#include <sstream>
+#include "MQTTEthernet.h"
+#include "MQTTClient.h"
+
+LCD_DISCO_F746NG lcd;
+TS_DISCO_F746NG ts;
+//EthernetInterface eth;
+MQTTEthernet ipstack = MQTTEthernet();
+MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
+MQTT::Message message;
+int message_count = 0;
+string buff;
+stringstream convert;
+int rc;
+
+#define TOKEN "YOUR THING TOKEN"
+
+string topic;
 
-EthernetInterface eth;
+void addValue(string key, int value)
+{
+    if (message_count > 0) buff.append(",");
+    buff.append("{\"key\":\"");
+    buff.append(key);
+    buff.append("\",\"value\":\"");
+    convert.str("");
+    convert << value;
+    buff.append(convert.str());
+    buff.append("\"}");
+    message_count+= 1;
+}
 
-DigitalOut led1(LED1);
+void send()
+{
+    buff.append("]}");
+    //convert << "]}";
+    message.qos = MQTT::QOS0; // QOS0 or 1 available
+    message.payload = (void*)buff.c_str();
+    message.retained = false;
+    message.dup = false;
+    message.payloadlen = strlen(buff.c_str());
+    rc = client.publish(topic.c_str(), message);
+    buff = "{\"values\":[";
+    //convert.str("{\"values\":[");
+    //lcd.DisplayStringAt(0, LINE(5), (uint8_t *)convert.str().c_str(), CENTER_MODE);
+    message_count = 0;
+}
 
-int main()
+void messageArrived(MQTT::MessageData& md)
 {
-    NTPClient ntp;
-    char buff[64];
-    printf("\n\n*** Ethernet Demo uses NTP to set the clock ***\r\n");
+    MQTT::Message &message = md.message;
+    printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
+    printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
+}
+
+int main(int argc, char* argv[])
+{
+    TS_StateTypeDef TS_State;
+    uint16_t x, y, x_ant, y_ant;
+    /***** TS *****/
+
+
+    topic.append("v2/things/");
+    topic.append(string(TOKEN));
+    /***** MQTT *****/
+
+    char* hostname = "mqtt.thethings.io";
+    int port = 1883;
+    rc = ipstack.connect(hostname, port);
+    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
+    data.MQTTVersion = 3;
+    data.clientID.cstring = "disco-f746";
+    rc = client.connect(data);
+    rc = client.subscribe(topic.c_str(), MQTT::QOS0, messageArrived);
+    buff = "{\"values\":[";
+    addValue("demo", 0);
+    send();
+    lcd.Clear(LCD_COLOR_BLACK);
 
-    if(eth.init()!=0)                    //for DHCP Server
-    {
-        //if(eth.init(IP,MASK,GATEWAY)!=0) { //for Static IP Address
-        printf("EthernetInterface Initialize Error \r\n");
-
-        while (1)
-        {
+    lcd.SetTextColor(LCD_COLOR_RED);
+    lcd.DrawCircle(160, 136, 50);
+    wait(0.1);
+    lcd.SetTextColor(LCD_COLOR_RED);
+    lcd.FillCircle(160, 136, 50);
+    wait(1);
+    lcd.SetTextColor(LCD_COLOR_GREEN);
+    lcd.DrawCircle(320, 136, 50);
+    wait(0.1);
+    lcd.SetTextColor(LCD_COLOR_GREEN);
+    lcd.FillCircle(320, 136, 50);
+    wait(1);
+    ts.Init(lcd.GetXSize(), lcd.GetYSize());
+    wait(3);
+    while (1) {
+        rc = client.connect(data);
+        ts.GetState(&TS_State);
+        if (TS_State.touchDetected) {
+            x = TS_State.touchX[0];
+            y = TS_State.touchY[0];
+            if ((x_ant != x) && (y_ant != y)) {
+                if ((x >= 110 && x <= 210)&&(y >= 86 && y <= 186)) {
+                    addValue("demo", 1);
+                    send();
+                } else if ((x >= 270 && x <= 370)&&(y >= 86 && y <= 186)) {
+                    addValue("demo", 2);
+                    send();
+                }
+            }
+            x_ant = x;
+            y_ant = y;
         }
     }
-    if(eth.connect()!=0)
-    {
-        printf("EthernetInterface Connect Error \r\n");
-        while (1)
-        {
-        }
-    }
-    printf("IP Address is %s\r\n", eth.getIPAddress());
-    printf("NetMask is %s\r\n", eth.getNetworkMask());
-    printf("Gateway Address is %s\r\n", eth.getGateway());
-    printf("Ethernet Setup OK\r\n");
-    printf("Getting time, 10s timeout. \r\n");
-
-    if (ntp.setTime("0.uk.pool.ntp.org") == 0)
-    {
-        time_t ctTime;
-        ctTime = time(NULL);
-        printf("Time is set to : %s \r\n", ctime(&ctTime));
-    }
-    else
-    {
-        printf("Error getting time \r\n");
-    }
-
-    printf("end of programm\r\n");
-    while (true) {
-        led1 = !led1;
-        Thread::wait(500);
-    }
 }