Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: ESP8266Interface MQTT mbed-rtos mbed-src
Fork of ESP8266_MQTT_HelloWorld by
Revision 17:92a64d43ee61, committed 2015-06-05
- 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
--- 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
