Fawwaz Nadzmy / ESP-PN-V04

Dependencies:   ESP8266Interface MQTT mbed-rtos mbed-src

Fork of ESP8266_MQTT_HelloWorld by ESP8266

Files at this revision

API Documentation at this revision

Comitter:
geky
Date:
Fri Jun 05 15:15:24 2015 +0000
Parent:
16:28d062c5522b
Child:
18:76d0899bc3ce
Commit message:
Modified to use ESP8266

Changed in this revision

C12832.lib Show diff for this revision Revisions of this file
ESP8266Interface.lib Show annotated file Show diff for this revision Revisions of this file
EthernetInterface.lib Show diff for this revision Revisions of this file
MQTTESP8266.h 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
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
--- a/C12832.lib	Mon Oct 06 11:42:25 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://mbed.org/teams/components/code/C12832/#03069e3deaa4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ESP8266Interface.lib	Fri Jun 05 15:15:24 2015 +0000
@@ -0,0 +1,1 @@
+http://developer.mbed.org/teams/ESP8266/code/ESP8266Interface/#c180905b5b79
--- a/EthernetInterface.lib	Mon Oct 06 11:42:25 2014 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-https://mbed.org/users/mbed_official/code/EthernetInterface/#f69b81aa9eb1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MQTTESP8266.h	Fri Jun 05 15:15:24 2015 +0000
@@ -0,0 +1,44 @@
+
+#if !defined(MQTTESP8266_H)
+#define MQTTESP8266_H
+
+#include "MQTTmbed.h"
+#include "ESP8266Interface.h"
+#include "MQTTSocket.h"
+
+// This struct is only used to workaround the order that the interfaces are initialized
+// MQTTSocket contains a TCPSocketConnection which needs the ESP8266Interface to be 
+// instantiated first. Unfortunately the only way to instantiate a member before a superclass 
+// is through another superclass.
+struct MQTTESP8266Holder {
+    MQTTESP8266Holder(PinName tx, PinName rx, PinName reset, const char *ssid, const char *pass) :
+            _wifi(tx, rx, reset, ssid, pass) {}
+    
+    ESP8266Interface _wifi;
+};
+
+// Straightforward implementation of a MQTT interface
+class MQTTESP8266 : public MQTTESP8266Holder, public MQTTSocket {    
+private:
+    MQTTESP8266Holder::_wifi;
+    //ESP8266Interface _wifi;
+    
+public:    
+    MQTTESP8266(PinName tx, PinName rx, PinName reset, const char *ssid, const char *pass) :
+            MQTTESP8266Holder(tx, rx, reset, ssid, pass) {
+        _wifi.init();
+        _wifi.connect();
+    }
+    
+    ESP8266Interface& getInterface() {
+        return _wifi;
+    }
+    
+    void reconnect() {
+        _wifi.disconnect();
+        _wifi.connect();
+    }
+};
+
+
+#endif
--- a/main.cpp	Mon Oct 06 11:42:25 2014 +0000
+++ b/main.cpp	Fri Jun 05 15:15:24 2015 +0000
@@ -13,22 +13,19 @@
  * 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 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.
- 
- */
+
+/**
+ 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.
+
+*/
 
 
-#include "C12832.h"
-C12832 lcd(p5, p7, p6, p8, p11);
-
-#include "MQTTEthernet.h"
+#include "MQTTESP8266.h"
 #include "MQTTClient.h"
 
 int arrivedcount = 0;
@@ -37,43 +34,38 @@
 void messageArrived(MQTT::MessageData& md)
 {
     MQTT::Message &message = md.message;
-    lcd.cls();
-    lcd.locate(0,3);
     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;
-    lcd.puts((char*)message.payload);
 }
 
-
 int main(int argc, char* argv[])
-{   
-    MQTTEthernet ipstack = MQTTEthernet();
+{
+    printf("Starting\n");
+    MQTTESP8266 ipstack(D1, D0, D10, "ssid", "password");
     float version = 0.47;
     char* topic = "mbed-sample";
-    
-    lcd.printf("Version is %f\n", version);
+
     printf("Version is %f\n", version);
-              
-    MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
-    
-    char* hostname = "m2m.eclipse.org";
+
+    MQTT::Client<MQTTESP8266, Countdown> client = MQTT::Client<MQTTESP8266, Countdown>(ipstack);
+
+    char* hostname = "192.168.1.20";
     int port = 1883;
-    lcd.printf("Connecting to %s:%d\n", hostname, port);
     int rc = ipstack.connect(hostname, port);
     if (rc != 0)
-        lcd.printf("rc from TCP connect is %d\n", rc);
- 
-    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;       
+        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)
-        lcd.printf("rc from MQTT connect is %d\n", rc);
-    
-    if ((rc = client.subscribe(topic, MQTT::QOS1, messageArrived)) != 0)
-        lcd.printf("rc from MQTT subscribe is %d\n", rc);
+        printf("rc from MQTT connect is %d\n", rc);
+
+    if ((rc = client.subscribe("mbed-sample", MQTT::QOS1, messageArrived)) != 0)
+        printf("rc from MQTT subscribe is %d\n", rc);
 
     MQTT::Message message;
 
@@ -88,7 +80,7 @@
     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;
@@ -96,7 +88,7 @@
     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;
@@ -104,10 +96,9 @@
     rc = client.publish(topic, message);
     while (arrivedcount < 3)
         client.yield(100);
-        
+
     // n * QoS 2
-    for (int i = 1; i <= 10; ++i)
-    {
+    for (int i = 1; i <= 10; ++i) {
         sprintf(buf, "Hello World!  QoS 2 message number %d from app version %f\n", i, version);
         message.qos = MQTT::QOS2;
         message.payloadlen = strlen(buf)+1;
@@ -115,19 +106,15 @@
         while (arrivedcount < i + 3)
             client.yield(100);
     }
-    
+
     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();
-    
-    lcd.cls();
-    lcd.locate(0,3);
-    lcd.printf("Version %.2f: finish %d msgs\n", version, arrivedcount);
     printf("Finishing with %d messages received\n", arrivedcount);
-    
+
     return 0;
 }
--- a/mbed-rtos.lib	Mon Oct 06 11:42:25 2014 +0000
+++ b/mbed-rtos.lib	Fri Jun 05 15:15:24 2015 +0000
@@ -1,1 +1,1 @@
-http://mbed.org/users/mbed_official/code/mbed-rtos/#34e80e862021
+http://mbed.org/users/mbed_official/code/mbed-rtos/#e45e4ac7c3c8
--- a/mbed.bld	Mon Oct 06 11:42:25 2014 +0000
+++ b/mbed.bld	Fri Jun 05 15:15:24 2015 +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/cbbeb26dbd92
\ No newline at end of file