ECE59500_ESP8266_K64_MQTT_Pub_Sub_client

Dependencies:   mbed ESP8266Interface MbedJSONValue mbed-rtos MQTT JSON

Committer:
sbetrabet
Date:
Fri Mar 08 04:51:18 2019 +0000
Revision:
20:568d04eb3d63
Parent:
19:9dfb938f07eb
Child:
21:f08f17225c7c
Name changed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sbetrabet 19:9dfb938f07eb 1 #include "MQTTESP8266.h"
sbetrabet 19:9dfb938f07eb 2 #include "MQTTClient.h"
sbetrabet 19:9dfb938f07eb 3 #include "string.h"
sbetrabet 19:9dfb938f07eb 4 #include "MbedJSONValue.h"
sbetrabet 19:9dfb938f07eb 5 char buf[100];
geky 17:92a64d43ee61 6
sbetrabet 20:568d04eb3d63 7 MQTTESP8266 ipstack(D1, D0, D10, "Sidsap10","Arduino111"); // change to match your wifi access point
sbetrabet 19:9dfb938f07eb 8 float version = 0.47;
sbetrabet 19:9dfb938f07eb 9 char* topic = "k64";
sbetrabet 19:9dfb938f07eb 10 char* topic2 = "k64rec";
sbetrabet 19:9dfb938f07eb 11 char* topic3 = "bulb";
sbetrabet 19:9dfb938f07eb 12
sbetrabet 19:9dfb938f07eb 13 char* key2 = "key";
sbetrabet 20:568d04eb3d63 14 char* hostname = "192.168.43.87"; // Ip
sbetrabet 19:9dfb938f07eb 15 int port = 1883;
sbetrabet 19:9dfb938f07eb 16 int rc = ipstack.connect(hostname, port);
sbetrabet 20:568d04eb3d63 17 unsigned long previousTime = 0; // will store last time LED was updated
geky 17:92a64d43ee61 18
sbetrabet 20:568d04eb3d63 19 // constants won't change:
sbetrabet 20:568d04eb3d63 20 const long interval = 20;
sbetrabet 19:9dfb938f07eb 21 MQTT::Client<MQTTESP8266, Countdown> client = MQTT::Client<MQTTESP8266, Countdown>(ipstack);
sbetrabet 19:9dfb938f07eb 22 MbedJSONValue demo;
sbetrabet 19:9dfb938f07eb 23 int arrivedcount = 0;
sbetrabet 19:9dfb938f07eb 24 //using namespace std;
sbetrabet 19:9dfb938f07eb 25 std::string my_str;
sbetrabet 19:9dfb938f07eb 26 std::string my_str2;
sbetrabet 19:9dfb938f07eb 27 std::string someString;
sbetrabet 19:9dfb938f07eb 28 std::string clearsky ("clear");
sbetrabet 19:9dfb938f07eb 29 std::string clouds ("few clouds");
sbetrabet 19:9dfb938f07eb 30 std::string snow ("light snow");
sbetrabet 19:9dfb938f07eb 31 int j=0;
sbetrabet 19:9dfb938f07eb 32 // callback for subscribe topic
icraggs 1:a1d5c7a6acbc 33
icraggs 2:638c854c0695 34
mbedAustin 18:76d0899bc3ce 35 void subscribeCallback(MQTT::MessageData& md)
icraggs 2:638c854c0695 36 {
icraggs 9:5beb8609e9f7 37 MQTT::Message &message = md.message;
sbetrabet 20:568d04eb3d63 38 printf("Message received: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
sbetrabet 19:9dfb938f07eb 39
sbetrabet 19:9dfb938f07eb 40 printf("%s",(char*)message.payload);
sbetrabet 19:9dfb938f07eb 41 printf("\r\n");
sbetrabet 19:9dfb938f07eb 42
icraggs 9:5beb8609e9f7 43 printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
sbetrabet 19:9dfb938f07eb 44 printf("nonedited payload is %s and payload is %d\n",(char*)message.payload,message.payloadlen);
sbetrabet 19:9dfb938f07eb 45 printf("hey\n");
sbetrabet 19:9dfb938f07eb 46 // int f = int(message.payload);
sbetrabet 19:9dfb938f07eb 47
sbetrabet 19:9dfb938f07eb 48 std::string someString((char*)message.payload);
sbetrabet 19:9dfb938f07eb 49 someString.resize (message.payloadlen);
sbetrabet 19:9dfb938f07eb 50 printf("Edited payload iss %s \n",someString.c_str());
sbetrabet 19:9dfb938f07eb 51 j= someString.find(clouds);
sbetrabet 19:9dfb938f07eb 52 printf("j = %d \r\n", j);
sbetrabet 19:9dfb938f07eb 53
sbetrabet 19:9dfb938f07eb 54 if ( !(someString.find(clouds)) )
sbetrabet 19:9dfb938f07eb 55 {
sbetrabet 19:9dfb938f07eb 56 sprintf(buf, "dCglDR-G9WoQUiig0XMNhOV4ozIEIVu3rWdBh5IlQ7d,cloud %s\n", key2);
sbetrabet 19:9dfb938f07eb 57 message.payload = (void*)buf;
sbetrabet 19:9dfb938f07eb 58 message.payloadlen = strlen(buf)+1;
sbetrabet 19:9dfb938f07eb 59 rc = client.publish(topic3, message);
sbetrabet 20:568d04eb3d63 60 printf("if condition checked, its cloudy\r\n");
sbetrabet 19:9dfb938f07eb 61 }
sbetrabet 19:9dfb938f07eb 62 else if ( !(someString.find(clearsky)) )
sbetrabet 19:9dfb938f07eb 63 {
sbetrabet 20:568d04eb3d63 64 sprintf(buf, "dCglDR-G9WoQUiig0XMNhOV4ozIEIVu3rWdBh5IlQ7d,clearsky %s\r\n", key2);
sbetrabet 19:9dfb938f07eb 65 message.payload = (void*)buf;
sbetrabet 19:9dfb938f07eb 66 message.payloadlen = strlen(buf)+1;
sbetrabet 19:9dfb938f07eb 67 rc = client.publish(topic3, message);
sbetrabet 20:568d04eb3d63 68 printf("if condition checked, its clear\r\n");
sbetrabet 19:9dfb938f07eb 69 }
sbetrabet 19:9dfb938f07eb 70 else if ( !(someString.find(snow)) )
sbetrabet 19:9dfb938f07eb 71 {
sbetrabet 20:568d04eb3d63 72 sprintf(buf, "dCglDR-G9WoQUiig0XMNhOV4ozIEIVu3rWdBh5IlQ7d,snow %s\r\n",key2);
sbetrabet 19:9dfb938f07eb 73 message.payload = (void*)buf;
sbetrabet 19:9dfb938f07eb 74 message.payloadlen = strlen(buf)+1;
sbetrabet 19:9dfb938f07eb 75 rc = client.publish(topic3, message);
sbetrabet 20:568d04eb3d63 76 printf("if condition checked, its snowy\r\n");
sbetrabet 19:9dfb938f07eb 77 }
sbetrabet 19:9dfb938f07eb 78 else
sbetrabet 19:9dfb938f07eb 79 {
sbetrabet 20:568d04eb3d63 80 printf("went into else\r\n");
sbetrabet 19:9dfb938f07eb 81 }
sbetrabet 19:9dfb938f07eb 82
icraggs 2:638c854c0695 83 }
icraggs 0:0cae29831d01 84
icraggs 2:638c854c0695 85 int main(int argc, char* argv[])
sbetrabet 19:9dfb938f07eb 86 {
sbetrabet 19:9dfb938f07eb 87 wait (1);
sbetrabet 20:568d04eb3d63 88 printf("Starting\r\n");
sbetrabet 19:9dfb938f07eb 89
sbetrabet 20:568d04eb3d63 90 printf("Version is %f\r\n", version);
geky 17:92a64d43ee61 91
sbetrabet 19:9dfb938f07eb 92
geky 17:92a64d43ee61 93
icraggs 6:e4c690c45021 94 if (rc != 0)
sbetrabet 20:568d04eb3d63 95 printf("rc from TCP connect is %d\r\n", rc);
geky 17:92a64d43ee61 96
geky 17:92a64d43ee61 97 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
sbetrabet 19:9dfb938f07eb 98 //data.MQTTVersion = 3;
sbetrabet 19:9dfb938f07eb 99 //data.clientID.cstring = "mbed-clientID";
sbetrabet 19:9dfb938f07eb 100 //data.username.cstring = "testuser";
sbetrabet 19:9dfb938f07eb 101 //data.password.cstring = "testpassword";
sbetrabet 19:9dfb938f07eb 102
icraggs 16:28d062c5522b 103 if ((rc = client.connect(data)) != 0)
sbetrabet 20:568d04eb3d63 104 printf("rc from MQTT connect is %d\r\n", rc);
geky 17:92a64d43ee61 105
sbetrabet 19:9dfb938f07eb 106 if ((rc = client.subscribe(topic2, MQTT::QOS1, subscribeCallback)) != 0)
sbetrabet 20:568d04eb3d63 107 printf("Recv'd from MQTT subscribe is %d\r\n", rc);
icraggs 2:638c854c0695 108
icraggs 2:638c854c0695 109 MQTT::Message message;
sbetrabet 19:9dfb938f07eb 110 // QoS 0
sbetrabet 20:568d04eb3d63 111 time_t seconds = time(NULL);
sbetrabet 20:568d04eb3d63 112
sbetrabet 20:568d04eb3d63 113 sprintf(buf, "fa02d31610ce9ea0de15b22bb2fe279d, %s\r\n", key2);
icraggs 2:638c854c0695 114 message.qos = MQTT::QOS0;
icraggs 2:638c854c0695 115 message.retained = false;
icraggs 2:638c854c0695 116 message.dup = false;
icraggs 2:638c854c0695 117 message.payload = (void*)buf;
icraggs 2:638c854c0695 118 message.payloadlen = strlen(buf)+1;
sbetrabet 20:568d04eb3d63 119
sbetrabet 20:568d04eb3d63 120
icraggs 16:28d062c5522b 121 rc = client.publish(topic, message);
sbetrabet 19:9dfb938f07eb 122 wait(5);
sbetrabet 19:9dfb938f07eb 123 /*
sbetrabet 20:568d04eb3d63 124 sprintf(buf, "dCglDR-G9WoQUiig0XMNhOV4ozIEIVu3rWdBh5IlQ7d, %s\r\n", key2);
sbetrabet 19:9dfb938f07eb 125 message.payload = (void*)buf;
sbetrabet 19:9dfb938f07eb 126 message.payloadlen = strlen(buf)+1;
sbetrabet 19:9dfb938f07eb 127 rc = client.publish(topic2, message);
sbetrabet 19:9dfb938f07eb 128 */
sbetrabet 20:568d04eb3d63 129
sbetrabet 19:9dfb938f07eb 130 while (arrivedcount < 10)
icraggs 2:638c854c0695 131 client.yield(100);
sbetrabet 20:568d04eb3d63 132
sbetrabet 20:568d04eb3d63 133
sbetrabet 19:9dfb938f07eb 134 /*
icraggs 2:638c854c0695 135 // QoS 1
sbetrabet 20:568d04eb3d63 136 sprintf(buf, "Hello World! QoS 1 message from app version %f\r\n", version);
icraggs 2:638c854c0695 137 message.qos = MQTT::QOS1;
icraggs 2:638c854c0695 138 message.payloadlen = strlen(buf)+1;
icraggs 16:28d062c5522b 139 rc = client.publish(topic, message);
sbetrabet 19:9dfb938f07eb 140 while (arrivedcount < 10)
icraggs 2:638c854c0695 141 client.yield(100);
sbetrabet 19:9dfb938f07eb 142
icraggs 2:638c854c0695 143 // QoS 2
sbetrabet 20:568d04eb3d63 144 sprintf(buf, "Hello World! QoS 2 message from app version %f\r\n", version);
icraggs 2:638c854c0695 145 message.qos = MQTT::QOS2;
icraggs 2:638c854c0695 146 message.payloadlen = strlen(buf)+1;
icraggs 16:28d062c5522b 147 rc = client.publish(topic, message);
icraggs 12:086a9314e8a5 148 while (arrivedcount < 3)
icraggs 2:638c854c0695 149 client.yield(100);
geky 17:92a64d43ee61 150
icraggs 12:086a9314e8a5 151 // n * QoS 2
sbetrabet 19:9dfb938f07eb 152
geky 17:92a64d43ee61 153 for (int i = 1; i <= 10; ++i) {
sbetrabet 20:568d04eb3d63 154 sprintf(buf, "Hello World! QoS 2 message number %d from app version %f\r\n", i, version);
icraggs 12:086a9314e8a5 155 message.qos = MQTT::QOS2;
icraggs 12:086a9314e8a5 156 message.payloadlen = strlen(buf)+1;
icraggs 16:28d062c5522b 157 rc = client.publish(topic, message);
icraggs 12:086a9314e8a5 158 while (arrivedcount < i + 3)
icraggs 12:086a9314e8a5 159 client.yield(100);
icraggs 12:086a9314e8a5 160 }
sbetrabet 19:9dfb938f07eb 161 */
sbetrabet 19:9dfb938f07eb 162
icraggs 8:a3e3113054a1 163 if ((rc = client.unsubscribe(topic)) != 0)
sbetrabet 20:568d04eb3d63 164 printf("rc from unsubscribe was %d\r\n", rc);
geky 17:92a64d43ee61 165
icraggs 8:a3e3113054a1 166 if ((rc = client.disconnect()) != 0)
sbetrabet 20:568d04eb3d63 167 printf("rc from disconnect was %d\r\n", rc);
geky 17:92a64d43ee61 168
sbetrabet 19:9dfb938f07eb 169 //ipstack.disconnect();
sbetrabet 20:568d04eb3d63 170 //printf("Finishing with %d messages received\r\n", arrivedcount);
geky 17:92a64d43ee61 171
icraggs 0:0cae29831d01 172 return 0;
icraggs 0:0cae29831d01 173 }