Test MQTT Protocol with a Temperature Sensore

Dependencies:   EthernetInterface LM75A MQTT mbed-rtos mbed

Fork of HelloMQTT by MQTT

Notebook info: HERE

Files at this revision

API Documentation at this revision

Comitter:
edodm85
Date:
Sat Jan 14 14:12:53 2017 +0000
Parent:
19:7f7aba7a4a8b
Commit message:
Test MQTT protocol with a Temperature Sensore

Changed in this revision

C027.h Show diff for this revision Revisions of this file
C12832.lib Show diff for this revision Revisions of this file
EthernetInterface.lib Show annotated file Show diff for this revision Revisions of this file
K64F.h Show diff for this revision Revisions of this file
LM75A.lib Show annotated file Show diff for this revision Revisions of this file
LPC1768.h Show diff for this revision Revisions of this file
Linux-example/LinuxIPStack.h Show diff for this revision Revisions of this file
Linux-example/LinuxMQTT.h Show diff for this revision Revisions of this file
Linux-example/linux-main.cpp Show diff for this revision Revisions of this file
MQTT.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
main.h Show annotated file Show diff for this revision Revisions of this file
mbed-rtos.lib Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 7f7aba7a4a8b -r bec5faa6a303 C027.h
--- a/C027.h	Thu Jul 30 13:49:18 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2014 IBM Corp.
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * and Eclipse Distribution License v1.0 which accompany this distribution.
- *
- * The Eclipse Public License is available at
- *    http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at
- *   http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *    Ian Craggs - initial implementation
- *******************************************************************************/
-
-#if !defined(K64F_H)
-#define K64F_H
-
-C12832 lcd(D11, D13, D12, D7, D10);
-PwmOut r(D5);
-PwmOut g(D9);
-PwmOut b(D8);
-DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3);
-DigitalIn Up(A2); DigitalIn Down(A3); DigitalIn Left(A4); DigitalIn Right(A5); DigitalIn Click(D4);
-AnalogIn ain1 (A0); AnalogIn ain2 (A1);
-
-#define LED2_OFF 0
-#define LED2_ON 1
-
-#define DEFAULT_TYPE_NAME "iotsample-mbed-c027"
-
-#include "lpc_phy.h"
-// need a wrapper since K64F and LPC1768 wont have the same name for mii read methods
-static uint32_t linkStatus(void)
-{
-    return (lpc_mii_read_data() & 1);
-}
-
-#endif
\ No newline at end of file
diff -r 7f7aba7a4a8b -r bec5faa6a303 C12832.lib
--- a/C12832.lib	Thu Jul 30 13:49:18 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://mbed.org/teams/components/code/C12832/#03069e3deaa4
diff -r 7f7aba7a4a8b -r bec5faa6a303 EthernetInterface.lib
--- a/EthernetInterface.lib	Thu Jul 30 13:49:18 2015 +0000
+++ b/EthernetInterface.lib	Sat Jan 14 14:12:53 2017 +0000
@@ -1,1 +1,1 @@
-https://mbed.org/users/mbed_official/code/EthernetInterface/#f69b81aa9eb1
+http://developer.mbed.org/users/mbed_official/code/EthernetInterface/#183490eb1b4a
diff -r 7f7aba7a4a8b -r bec5faa6a303 K64F.h
--- a/K64F.h	Thu Jul 30 13:49:18 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,41 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2014 IBM Corp.
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * and Eclipse Distribution License v1.0 which accompany this distribution.
- *
- * The Eclipse Public License is available at
- *    http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at
- *   http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *    Ian Craggs - initial implementation
- *    Sam Grove  - added method to check the status of the Ethernet cable 
- *******************************************************************************/
-
-#if !defined(K64F_H)
-#define K64F_H
-
-C12832 lcd(D11, D13, D12, D7, D10);
-BusOut led2 (LED_BLUE);
-BusOut r (D5);
-BusOut g (D9);
-BusOut b (D8);
-DigitalIn Up(A2); DigitalIn Down(A3); DigitalIn Right(A4); DigitalIn Left(A5); DigitalIn Click(D4);
-AnalogIn ain1(A0); AnalogIn ain2(A1);
-
-#define LED2_OFF 1
-#define LED2_ON 0
-
-#define DEFAULT_TYPE_NAME "iotsample-mbed-k64f"
-
-//#include "lpc_phy.h"
-// need a wrapper since K64F and LPC1768 wont have the same name for mii read methods
-static uint32_t linkStatus(void)
-{
-    return (1);
-}
-
-#endif
\ No newline at end of file
diff -r 7f7aba7a4a8b -r bec5faa6a303 LM75A.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/LM75A.lib	Sat Jan 14 14:12:53 2017 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/users/edodm85/code/LM75A/#19dc98c810a5
diff -r 7f7aba7a4a8b -r bec5faa6a303 LPC1768.h
--- a/LPC1768.h	Thu Jul 30 13:49:18 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2014 IBM Corp.
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * and Eclipse Distribution License v1.0 which accompany this distribution.
- *
- * The Eclipse Public License is available at
- *    http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at
- *   http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *    Ian Craggs - initial implementation
- *    Sam Grove  - added mehtod to check the status of the Ethernet cable
- *******************************************************************************/
-
-#if !defined(LPC1768_H)
-#define LPC1768_H
-
-C12832 lcd(p5, p7, p6, p8, p11);
-DigitalOut led2(LED2);
-PwmOut r(p23);
-PwmOut g(p24);
-PwmOut b(p25);
-DigitalIn Down(p12);
-DigitalIn Left(p13);
-DigitalIn Click(p14);
-DigitalIn Up(p15);
-DigitalIn Right(p16);
-AnalogIn ain1(p19);
-AnalogIn ain2(p20);
-
-#define LED2_OFF 0
-#define LED2_ON 1
-
-#define DEFAULT_TYPE_NAME "iotsample-mbed-lpc1768"
-
-#include "lpc_phy.h"
-// need a wrapper since K64F and LPC1768 wont have the same name for mii read methods
-static uint32_t linkStatus(void)
-{
-    return (lpc_mii_read_data() & 1);
-}
-
-#endif
\ No newline at end of file
diff -r 7f7aba7a4a8b -r bec5faa6a303 Linux-example/LinuxIPStack.h
--- a/Linux-example/LinuxIPStack.h	Thu Jul 30 13:49:18 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,119 +0,0 @@
-#if !defined(LINUX_IPSTACK_H)
-#define LINUX_IPSTACK_H
-
-class IPStack 
-{
-public:    
-    IPStack()
-    {
-
-    }
-    
-    int Socket_error(const char* aString)
-    {
-
-        if (errno != EINTR && errno != EAGAIN && errno != EINPROGRESS && errno != EWOULDBLOCK)
-        {
-            if (strcmp(aString, "shutdown") != 0 || (errno != ENOTCONN && errno != ECONNRESET))
-                printf("Socket error %s in %s for socket %d\n", strerror(errno), aString, mysock);
-        }
-        return errno;
-    }
-
-    int connect(const char* hostname, int port)
-    {
-        int type = SOCK_STREAM;
-        struct sockaddr_in address;
-        int rc = -1;
-        sa_family_t family = AF_INET;
-        struct addrinfo *result = NULL;
-        struct addrinfo hints = {0, AF_UNSPEC, SOCK_STREAM, IPPROTO_TCP, 0, NULL, NULL, NULL};
-
-        if ((rc = getaddrinfo(hostname, NULL, &hints, &result)) == 0)
-        {
-            struct addrinfo* res = result;
-
-            /* prefer ip4 addresses */
-            while (res)
-            {
-                if (res->ai_family == AF_INET)
-                {
-                    result = res;
-                    break;
-                }
-                res = res->ai_next;
-            }
-
-            if (result->ai_family == AF_INET)
-            {
-                address.sin_port = htons(port);
-                address.sin_family = family = AF_INET;
-                address.sin_addr = ((struct sockaddr_in*)(result->ai_addr))->sin_addr;
-            }
-            else
-                rc = -1;
-
-            freeaddrinfo(result);
-        }
-
-        if (rc == 0)
-        {
-            mysock = socket(family, type, 0);
-            if (mysock != -1)
-            {
-                int opt = 1;
-
-                //if (setsockopt(mysock, SOL_SOCKET, SO_NOSIGPIPE, (void*)&opt, sizeof(opt)) != 0)
-                //  printf("Could not set SO_NOSIGPIPE for socket %d", mysock);
-                
-                rc = ::connect(mysock, (struct sockaddr*)&address, sizeof(address));
-            }
-        }
-
-        return rc;
-    }
-
-    int read(char* buffer, int len, int timeout_ms)
-    {
-        struct timeval interval = {timeout_ms / 1000, (timeout_ms % 1000) * 1000};
-        if (interval.tv_sec < 0 || (interval.tv_sec == 0 && interval.tv_usec <= 0))
-        {
-            interval.tv_sec = 0;
-            interval.tv_usec = 100;
-        }
-
-        setsockopt(mysock, SOL_SOCKET, SO_RCVTIMEO, (char *)&interval, sizeof(struct timeval));
-
-        //printf("reading %d bytes\n", len);
-        int rc = ::recv(mysock, buffer, (size_t)len, 0);
-        if (rc == -1)
-            Socket_error("read");
-        //printf("read %d bytes\n", rc);
-        return rc;
-    }
-    
-    int write(char* buffer, int len, int timeout)
-    {
-        struct timeval tv;
-
-        tv.tv_sec = 0;  /* 30 Secs Timeout */
-        tv.tv_usec = timeout * 1000;  // Not init'ing this can cause strange errors
-
-        setsockopt(mysock, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv,sizeof(struct timeval));
-        int rc = ::write(mysock, buffer, len);
-        //printf("write rc %d\n", rc);
-        return rc;
-    }
-
-    int disconnect()
-    {
-        return ::close(mysock);
-    }
-    
-private:
-
-    int mysock; 
-    
-};
-
-#endif
\ No newline at end of file
diff -r 7f7aba7a4a8b -r bec5faa6a303 Linux-example/LinuxMQTT.h
--- a/Linux-example/LinuxMQTT.h	Thu Jul 30 13:49:18 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-#if !defined(LINUXMQTT_H)
-#define LINUXMQTT_H
-
-class Countdown
-{
-public:
-    Countdown()
-    { 
-    
-    }
-
-    Countdown(int ms)
-    { 
-        countdown_ms(ms);
-    }
-    
-
-    bool expired()
-    {
-        struct timeval now, res;
-        gettimeofday(&now, NULL);
-        timersub(&end_time, &now, &res);        
-        //printf("left %d ms\n", (res.tv_sec < 0) ? 0 : res.tv_sec * 1000 + res.tv_usec / 1000);
-        //if (res.tv_sec > 0 || res.tv_usec > 0)
-        //  printf("expired %d %d\n", res.tv_sec, res.tv_usec);
-        return res.tv_sec < 0 || (res.tv_sec == 0 && res.tv_usec <= 0);
-    }
-    
-
-    void countdown_ms(int ms)  
-    {
-        struct timeval now;
-        gettimeofday(&now, NULL);
-        struct timeval interval = {ms / 1000, (ms % 1000) * 1000};
-        //printf("interval %d %d\n", interval.tv_sec, interval.tv_usec);
-        timeradd(&now, &interval, &end_time);
-    }
-
-    
-    void countdown(int seconds)
-    {
-        struct timeval now;
-        gettimeofday(&now, NULL);
-        struct timeval interval = {seconds, 0};
-        timeradd(&now, &interval, &end_time);
-    }
-
-    
-    int left_ms()
-    {
-        struct timeval now, res;
-        gettimeofday(&now, NULL);
-        timersub(&end_time, &now, &res);
-        //printf("left %d ms\n", (res.tv_sec < 0) ? 0 : res.tv_sec * 1000 + res.tv_usec / 1000);
-        return (res.tv_sec < 0) ? 0 : res.tv_sec * 1000 + res.tv_usec / 1000;
-    }
-    
-private:
-
-    struct timeval end_time;
-};
-
-
-#endif
\ No newline at end of file
diff -r 7f7aba7a4a8b -r bec5faa6a303 Linux-example/linux-main.cpp
--- a/Linux-example/linux-main.cpp	Thu Jul 30 13:49:18 2015 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,149 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2014 IBM Corp.
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * and Eclipse Distribution License v1.0 which accompany this distribution.
- *
- * The Eclipse Public License is available at
- *    http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at
- *   http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *    Ian Craggs - initial API and implementation and/or initial documentation
- *******************************************************************************/
-  
- /**
-  This is a sample program to illustrate the use of the MQTT Client library
-  on Linux.  The Client class requires two classes which mediate
-  access to system interfaces for networking and timing.  As long as these two
-  classes provide the required public programming interfaces, it does not matter
-  what facilities they use underneath. In this program, they use the Linux
-  system libraries.
- 
- */
-
-#if defined(LINUX)
-
-#include "LinuxMQTT.h"
-#include "LinuxIPStack.h"
-#include "MQTTClient.h"
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/param.h>
-#include <sys/time.h>
-#include <sys/select.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <errno.h>
-#include <fcntl.h>
-
-#include <stdlib.h>
-#include <string.h>
-#include <signal.h>
-
-#define DEFAULT_STACK_SIZE -1
-
-
-int arrivedcount = 0;
-
-void messageArrived(MQTT::Message* message)
-{
-	printf("Message %d arrived: qos %d, retained %d, dup %d, packetid %d\n", 
-		++arrivedcount, message->qos, message->retained, message->dup, message->id);
-    printf("Payload %.*s\n", message->payloadlen, (char*)message->payload);
-}
-
-
-int connect(MQTT::Client<IPStack, Countdown>::connectionLostInfo* info)
-{
-    const char* hostname = "localhost"; //"m2m.eclipse.org";
-    int port = 1883;
-    printf("Connecting to %s:%d\n", hostname, port);
-    int rc = info->network->connect(hostname, port);
-	if (rc != 0)
-	    printf("rc from TCP connect is %d\n", rc);
- 
-    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;       
-    data.MQTTVersion = 3;
-    data.clientID.cstring = (char*)"mbed-icraggs";
-    rc = info->client->connect(&data);
-	if (rc != 0)
-	    printf("rc from MQTT connect is %d\n", rc);
-    
-    return rc;
-}
-
-
-int main(int argc, char* argv[])
-{   
-    IPStack ipstack = IPStack();
-    float version = 0.3;
-    const char* topic = "mbed-sample";
-    
-    printf("Version is %f\n", version);
-              
-    MQTT::Client<IPStack, Countdown> client = MQTT::Client<IPStack, Countdown>(ipstack);
-    
-    client.setConnectionLostHandler(connect);
-
-    MQTT::Client<IPStack, Countdown>::connectionLostInfo info = {&client, &ipstack};
-    int rc = connect(&info);
-    
-    rc = client.subscribe(topic, MQTT::QOS2, messageArrived);   
-    if (rc != 0)
-        printf("rc from MQTT subscribe is %d\n", rc);
-
-    MQTT::Message message;
-
-    // QoS 0
-    char buf[100];
-    sprintf(buf, "Hello World!  QoS 0 message from app version %f", version);
-    message.qos = MQTT::QOS0;
-    message.retained = false;
-    message.dup = false;
-    message.payload = (void*)buf;
-    message.payloadlen = strlen(buf)+1;
-    rc = client.publish(topic, &message);
-    while (arrivedcount == 0)
-        client.yield(100);
-        
-    // QoS 1
-	printf("Now QoS 1\n");
-    sprintf(buf, "Hello World!  QoS 1 message from app version %f", version);
-    message.qos = MQTT::QOS1;
-    message.payloadlen = strlen(buf)+1;
-    rc = client.publish(topic, &message);
-    while (arrivedcount == 1)
-        client.yield(100);
-        
-    // QoS 2
-    sprintf(buf, "Hello World!  QoS 2 message from app version %f", version);
-    message.qos = MQTT::QOS2;
-    message.payloadlen = strlen(buf)+1;
-    rc = client.publish(topic, &message);
-    while (arrivedcount == 2)
-        client.yield(100);
-    
-    rc = client.unsubscribe(topic);
-    if (rc != 0)
-        printf("rc from unsubscribe was %d\n", rc);
-    
-    rc = client.disconnect();
-    if (rc != 0)
-        printf("rc from disconnect was %d\n", rc);
-    
-    ipstack.disconnect();
-    
-    printf("Finishing with %d messages received\n", arrivedcount);
-    
-    return 0;
-}
-
-#endif
diff -r 7f7aba7a4a8b -r bec5faa6a303 MQTT.lib
--- a/MQTT.lib	Thu Jul 30 13:49:18 2015 +0000
+++ b/MQTT.lib	Sat Jan 14 14:12:53 2017 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/teams/mqtt/code/MQTT/#c299463ae853
+http://mbed.org/teams/mqtt/code/MQTT/#e335fcc1a663
diff -r 7f7aba7a4a8b -r bec5faa6a303 main.cpp
--- a/main.cpp	Thu Jul 30 13:49:18 2015 +0000
+++ b/main.cpp	Sat Jan 14 14:12:53 2017 +0000
@@ -1,135 +1,167 @@
-/*******************************************************************************
- * Copyright (c) 2014, 2015 IBM Corp.
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * and Eclipse Distribution License v1.0 which accompany this distribution.
- *
- * The Eclipse Public License is available at
- *    http://www.eclipse.org/legal/epl-v10.html
- * and the Eclipse Distribution License is available at
- *   http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- *    Ian Craggs - initial API and implementation and/or initial documentation
- *    Ian Craggs - make sure QoS2 processing works, and add device headers
- *******************************************************************************/
- 
- /**
-  This is a sample program to illustrate the use of the MQTT Client library
-  on the mbed platform.  The Client class requires two classes which mediate
-  access to system interfaces for networking and timing.  As long as these two
-  classes provide the required public programming interfaces, it does not matter
-  what facilities they use underneath. In this program, they use the mbed
-  system libraries.
- 
- */
- 
- // change this to 0 to output messages to serial instead of LCD
-#define USE_LCD 1
+/*
+ * Author: Edoardo De Marchi
+ * Date: 14-01-2017
+ * Notes: Send the temperature value over MQTT protocol
+*/
 
-#if USE_LCD
-#include "C12832.h"
 
-#if defined(TARGET_UBLOX_C027)
-#warning "Compiling for mbed C027"
-#include "C027.h"
-#elif defined(TARGET_LPC1768)
-#warning "Compiling for mbed LPC1768"
-#include "LPC1768.h"
-#elif defined(TARGET_K64F)
-#warning "Compiling for mbed K64F"
-#include "K64F.h"
-#endif
-
-#define printf lcd.cls();lcd.printf
-
-#endif
-
-#define MQTTCLIENT_QOS2 1
-
-#include "MQTTEthernet.h"
-#include "MQTTClient.h"
-
-int arrivedcount = 0;
+#include "main.h"
 
 
 void messageArrived(MQTT::MessageData& md)
 {
     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);
-    ++arrivedcount;
+    printf("Payload [len: %d] %s\n", message.payloadlen, message.payload);
+    
+    memset(bufMQTT, 0, sizeof(bufMQTT));
+    message.payloadlen = 0;
 }
 
 
+
+
+
+
+// Thread that read the temperature from LM75 sensor
+void temp_sensor_thread(void const *argument)
+{
+    while (true) 
+    {
+        if(bStart)
+        {
+            
+            // Read Temperature
+            fTemperature = TempSensor.read_T();
+            if(fTemperature != fTemperatureTemp)
+            {         
+                int len = sprintf(bufMQTT, "The room temperature is: %4.2f degree C\n", fTemperature);
+                
+                fTemperatureTemp = fTemperature;
+                bNewValue = true;
+            }
+    
+            led3 = !led3;
+        
+        }
+        
+        osDelay(1000);  
+    } 
+} 
+
+
+
+
+
+
+
+void init()
+{
+    led1 = 0;
+    led2 = 0;
+    led3 = 0;
+    led4 = 0;
+    
+    
+    // Create Thread
+    osThreadCreate(osThread(temp_sensor_thread), NULL); 
+}
+
+
+
+
 int main(int argc, char* argv[])
 {   
-    MQTTEthernet ipstack = MQTTEthernet();
-    float version = 0.5;
-    char* topic = "mbed-sample";
+
+   
+    init();
+
+    printf("Connecting to %s:%d\n", hostbroker, port);
+        
     
-    printf("HelloMQTT: version is %f\n", version);
-              
-    MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
-    
-    char* hostname = "m2m.eclipse.org";
-    int port = 1883;
-    printf("Connecting to %s:%d\n", hostname, port);
-    int rc = ipstack.connect(hostname, port);
-    if (rc != 0)
+    // dhcp
+    MQTTEthernet ipstack = MQTTEthernet();
+
+
+    EthernetInterface& eth = ipstack.getEth();
+    printf("IP addr is %s\n", eth.getIPAddress());
+    printf("MAC addr is %s\n", eth.getMACAddress());
+    printf("Gateway addr is %s\n", eth.getGateway());
+
+
+    MQTT::Client<MQTTEthernet, Countdown> clientMQTT = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
+
+
+    // tcp connection
+    if ((rc = ipstack.connect(hostbroker, port)) != 0)
+    {
         printf("rc from TCP connect is %d\n", rc);
- 
-    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;       
-    data.MQTTVersion = 3;
-    data.clientID.cstring = "mbed-sample";
-    data.username.cstring = "testuser";
-    data.password.cstring = "testpassword";
-    if ((rc = client.connect(data)) != 0)
-        printf("rc from MQTT connect is %d\n", rc);
+    }else
+    {
+        printf("TCP connection OK\n");
+        led1 = 1;       
+    }
+
+
+
+    // Connection data         
+    MQTTPacket_connectData dataMQTT = MQTTPacket_connectData_initializer;       
+    dataMQTT.MQTTVersion = 3;
+    dataMQTT.clientID.cstring = clientID;
+    dataMQTT.username.cstring = username;
+    dataMQTT.password.cstring = password;
     
-    if ((rc = client.subscribe(topic, MQTT::QOS2, messageArrived)) != 0)
+
+    // client connection
+    if ((rc = clientMQTT.connect(dataMQTT)) != 0)
+    {
+        printf("rc from MQTT connect is %d\n", rc);
+    }else
+    {
+        printf("MQTT connection OK\n");
+        led2 = 1;
+    }
+    
+    
+    // topic subscribe
+    if ((rc = clientMQTT.subscribe(topic, MQTT::QOS2, messageArrived)) != 0)
+    {
         printf("rc from MQTT subscribe is %d\n", rc);
-
-    MQTT::Message message;
-
+    }else
+    {
+        printf("MQTT subscribe OK\n");
+    } 
+    
+    
     // QoS 0
-    char buf[100];
-    sprintf(buf, "Hello World!  QoS 0 message from app version %f\n", version);
     message.qos = MQTT::QOS0;
     message.retained = false;
     message.dup = false;
-    message.payload = (void*)buf;
-    message.payloadlen = strlen(buf)+1;
-    rc = client.publish(topic, message);
-    while (arrivedcount < 1)
-        client.yield(100);
-        
-    // QoS 1
-    sprintf(buf, "Hello World!  QoS 1 message from app version %f\n", version);
-    message.qos = MQTT::QOS1;
-    message.payloadlen = strlen(buf)+1;
-    rc = client.publish(topic, message);
-    while (arrivedcount < 2)
-        client.yield(100);
-        
-    // QoS 2
-    sprintf(buf, "Hello World!  QoS 2 message from app version %f\n", version);
-    message.qos = MQTT::QOS2;
-    message.payloadlen = strlen(buf)+1;
-    rc = client.publish(topic, message);
-    while (arrivedcount < 3)
-        client.yield(100);
+
+
+
+    // Set configuration register
+    TempSensor.write_reg(0x01, 0x00);
+    fTemperatureTemp = TempSensor.read_T();
+
+    bStart = true;
+
+    while(1) 
+    {
+
+        if(bNewValue)
+        {
+            bNewValue = false;
+            message.payload = (void*)bufMQTT;
+            message.payloadlen = strlen(bufMQTT)+1;
             
-    if ((rc = client.unsubscribe(topic)) != 0)
-        printf("rc from unsubscribe was %d\n", rc);
-    
-    if ((rc = client.disconnect()) != 0)
-        printf("rc from disconnect was %d\n", rc);
-    
-    ipstack.disconnect();
-    
-    printf("Version %.2f: finish %d msgs\n", version, arrivedcount);
-    
-    return 0;
+            // publish message
+            rc = clientMQTT.publish(topic, message);
+        }
+         
+      
+        clientMQTT.yield(100);     
+    }
 }
diff -r 7f7aba7a4a8b -r bec5faa6a303 main.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.h	Sat Jan 14 14:12:53 2017 +0000
@@ -0,0 +1,48 @@
+#pragma once 
+#include "mbed.h"
+
+#define MQTTCLIENT_QOS2 1
+
+#include "MQTTEthernet.h"
+#include "MQTTClient.h"
+#include "LM75A.h"
+
+
+RawSerial pc(USBTX,USBRX);
+
+DigitalOut led1(LED1);
+DigitalOut led2(LED2);
+DigitalOut led3(LED3);
+DigitalOut led4(LED4);
+
+// I2C
+LM75A TempSensor(p28, p27, 0x90);    //SDA, SCL, ADDRESS
+
+
+
+MQTT::Message message;
+
+
+bool bNewValue = false;
+bool bStart = false;
+volatile int i = 0;
+int rc;
+char bufMQTT[100];
+float fTemperature = 0;
+float fTemperatureTemp = 0;
+  
+
+// MQTT Data
+char* clientID = "mqtt-mbed-test";
+char* hostbroker = "m10.cloudmqtt.com";
+int port = 18305;
+char* username = "mbedUser";
+char* password = "test";
+char* topic = "temperature";
+
+
+//THREAD
+void temp_sensor_thread(void const *argument);
+osThreadDef(temp_sensor_thread, osPriorityNormal, DEFAULT_STACK_SIZE); 
+
+
diff -r 7f7aba7a4a8b -r bec5faa6a303 mbed-rtos.lib
--- a/mbed-rtos.lib	Thu Jul 30 13:49:18 2015 +0000
+++ b/mbed-rtos.lib	Sat Jan 14 14:12:53 2017 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed-rtos/#34e80e862021
+http://mbed.org/users/mbed_official/code/mbed-rtos/#58563e6cba1e
diff -r 7f7aba7a4a8b -r bec5faa6a303 mbed.bld
--- a/mbed.bld	Thu Jul 30 13:49:18 2015 +0000
+++ b/mbed.bld	Sat Jan 14 14:12:53 2017 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed/builds/6213f644d804
\ No newline at end of file
+http://mbed.org/users/mbed_official/code/mbed/builds/99b5ccf27215
\ No newline at end of file