Sille Van Landschoot / Mbed 2 deprecated MQTT-Thermostat-example

Dependencies:   C12832 EthernetInterface LM75B MQTT MbedJSONValue RGB-fun mbed-rtos mbed

Fork of HelloMQTT_FRDMK64F by Junichi SHIBA

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "C12832.h"
00002 #include "LM75B.h"
00003 #include "MQTTEthernet.h"
00004 #include "MQTTClient.h"
00005 #include "rtos.h"
00006 #include "MbedJSONValue.h"
00007 #include "RGB.h"
00008 
00009 /*** IMPORTANT !!! 
00010  * Change the following values 
00011  */
00012  
00013 char* hostname = "mqtt.labict.be";
00014 char* temperature_topic = "softwareengineering/thermostat/YOURSENSORID/temperature";
00015 char* led_topic = "softwareengineering/thermostat/YOURSENSORID/led";
00016 int port = 1883;
00017 char* clientId = "myrandomstringclientid";
00018 
00019 //#define K64F 1
00020 
00021 #ifdef K64F
00022     C12832 lcd(D11, D13, D12, D7, D10);
00023     LM75B sensor(D14,D15);   
00024     RGB led(p23,p24,p25);
00025 #else   //LPC1768
00026     C12832 lcd(p5, p7, p6, p8, p11); 
00027     LM75B sensor(p28,p27); 
00028     RGB led(p23,p24,p25);
00029 #endif
00030 
00031 MQTT::Client<MQTTEthernet, Countdown>* client;
00032 
00033 void send_temperature(void const * arg)
00034 {
00035     while(true){
00036         char buf[100];
00037         sprintf(buf, "{\"temperature\": %.2f}", sensor.read());
00038         
00039         MQTT::Message message;
00040         message.qos = MQTT::QOS0;
00041         message.retained = false;
00042         message.dup = false;
00043         message.payload = (void*)buf;
00044         message.payloadlen = strlen(buf);
00045         client->publish(temperature_topic, message); 
00046         
00047         Thread::wait(5000);     
00048     }
00049 }
00050 
00051 void process_rgb(MQTT::MessageData& md)
00052 {
00053     MQTT::Message &message = md.message;
00054     lcd.cls();
00055     lcd.locate(0,3);
00056     printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
00057     printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
00058     lcd.puts((char*)message.payload);
00059     
00060     char buffer[32] = {0};
00061     memcpy(buffer, message.payload, message.payloadlen);
00062     
00063     MbedJSONValue payload;
00064     parse(payload, buffer);
00065     
00066     std::string color_string = payload["color"].get<std::string>();
00067     printf("Color: %s\n", color_string.c_str());
00068     
00069     Color color((int) std::strtol(color_string.c_str(), 0, 16));
00070     led.setColor(&color);
00071 }
00072 
00073 int main(int argc, char* argv[])
00074 {   
00075     MQTTEthernet ipstack = MQTTEthernet();
00076     
00077     client = new MQTT::Client<MQTTEthernet, Countdown>(ipstack);
00078     
00079     lcd.printf("Connecting to %s:%d\n", hostname, port);
00080     int rc = ipstack.connect(hostname, port);
00081     if (rc != 0)
00082         lcd.printf("rc from TCP connect is %d\n", rc);
00083  
00084     MQTTPacket_connectData data = MQTTPacket_connectData_initializer;       
00085     data.MQTTVersion = 3;
00086     data.clientID.cstring = clientId;
00087 
00088     if ((rc = client->connect(data)) != 0)
00089         lcd.printf("rc from MQTT connect is %d\n", rc);
00090         
00091     if ((rc = client->subscribe(led_topic, MQTT::QOS1, process_rgb)) != 0)
00092         lcd.printf("rc from MQTT subscribe is %d\n", rc);
00093     
00094 
00095     Thread send_thread(send_temperature);
00096 
00097 
00098     while(true){
00099         client->yield(100);    
00100     }
00101 
00102     
00103     return 0;
00104 }