MQTT_Ethernet

Dependencies:   DHT MQTT WIZnetInterface mbed-src

Fork of MQTTw7500 by James Bruce

Revision:
9:21574e058141
Parent:
8:f837e0d255e8
Child:
12:4f0489448955
--- a/main.cpp	Tue Jun 23 00:36:34 2015 +0000
+++ b/main.cpp	Sun Jun 28 22:48:46 2015 +0000
@@ -1,55 +1,86 @@
 #include "mbed.h"
-#include "EthernetInterface.h"
+#include "DHT.h"
+#include "MQTTEthernet.h"
+#include "MQTTClient.h"
 
 #define ECHO_SERVER_PORT   7
 
-int main (void) 
+#include "mbed.h"
+ 
+int arrivedcount = 0;
+ 
+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;
+}
+
+void baud(int baudrate) {
+    Serial s(USBTX, USBRX);
+    s.baud(baudrate);
+}
+
+int main (void)
+{
+    DHT sensor(D4, DHT11);
+    AnalogIn ain(A1);
+    baud(115200);
     printf("Wait a second...\r\n");
-    uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x00, 0x01, 0x02}; 
-    EthernetInterface eth;
-    eth.init(mac_addr); //Use DHCP
-    eth.connect();
-    printf("Server IP Address is %s\r\n", eth.getIPAddress());
+    char* topic = "hello/wiznet";
+    MQTTEthernet ipstack = MQTTEthernet();
+    
+    MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
+    
+    char* hostname = "104.199.146.45";
+    int port = 1883;
+    
+    int rc = ipstack.connect(hostname, port);
+    if (rc != 0)
+        printf("rc from TCP connect is %d\n", rc);
+        
+    printf("Topic: %s\r\n",topic);
     
-    TCPSocketServer server;
-    server.bind(ECHO_SERVER_PORT);
-    server.listen();
-    
+    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;       
+    data.MQTTVersion = 3;
+    data.clientID.cstring = "WIZwiki-W7500";
+    data.username.cstring = "testuser";
+    data.password.cstring = "testpassword";  
+
+    if ((rc = client.connect(data)) != 0)
+        printf("rc from MQTT connect is %d\n", rc);
+ 
+    if ((rc = client.subscribe(topic, MQTT::QOS1, messageArrived)) != 0)
+        printf("rc from MQTT subscribe is %d\n", rc); 
+        
+    MQTT::Message message;
+    char buf[100];
+    int error = 0;
+    float hum = 0.0f, temp = 0.0f;
     while (true) 
     {
-        printf("Wait for new connection...\r\n");
-        TCPSocketConnection client;
-        server.accept(client);
-        client.set_blocking(false, 15000); // Timeout after (1.5)s
-        
-        printf("Connection from: %s\r\n", client.get_address());
-        char buffer[256];
-        while (true) {
-            int n = client.receive(buffer, sizeof(buffer));
-            if (n <= 0) break;
-            
-            // print received message to terminal
-            buffer[n] = '\0';
-            printf("Received message from Client :'%s'\r\n",buffer);
-            
-            // reverse the message
-            char temp;
-            for(int f = 0, l = n-1; f<l; f++,l--){
-                temp = buffer[f];
-                buffer[f] = buffer[l];
-                buffer[l] = temp;
-                }
-            
-            // print reversed message to terminal
-            printf("Sending message to Client: '%s'\r\n",buffer);
-            
-            // Echo received message back to client
-            client.send_all(buffer, n);
-            if (n <= 0) break;
+        error = sensor.readData();
+        if (0 == error) {
+            hum = sensor.ReadHumidity();
+            temp = sensor.ReadTemperature(CELCIUS);
         }
-        
-        client.close();
+        sprintf(buf, "%3.1f", hum);
+        message.qos = MQTT::QOS0;
+        message.retained = false;
+        message.dup = false;
+        message.payload = (void*)buf;
+        message.payloadlen = strlen(buf)+1;
+        rc = client.publish("wiznet/hum", message);
+        sprintf(buf, "%3.1f", temp);
+        message.payload = (void*)buf;
+        message.payloadlen = strlen(buf)+1;
+        rc = client.publish("wiznet/temp", message);
+        sprintf(buf, "%3.1f", ain.read()*100.0f);
+        message.payload = (void*)buf;
+        message.payloadlen = strlen(buf)+1;
+        rc = client.publish("wiznet/cds", message);
+        client.yield(1000);
     }
 }