ECE59500_ESP8266_K64_MQTT_Pub_Sub_client

Dependencies:   mbed ESP8266Interface MbedJSONValue mbed-rtos MQTT JSON

Committer:
sbetrabet
Date:
Fri Mar 08 07:05:46 2019 +0000
Revision:
21:f08f17225c7c
Parent:
20:568d04eb3d63
Maual and auto override added;

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 21:f08f17225c7c 4 #include "rgbled.h"
sbetrabet 19:9dfb938f07eb 5 #include "MbedJSONValue.h"
sbetrabet 19:9dfb938f07eb 6 char buf[100];
geky 17:92a64d43ee61 7
sbetrabet 20:568d04eb3d63 8 MQTTESP8266 ipstack(D1, D0, D10, "Sidsap10","Arduino111"); // change to match your wifi access point
sbetrabet 19:9dfb938f07eb 9 float version = 0.47;
sbetrabet 19:9dfb938f07eb 10 char* topic = "k64";
sbetrabet 19:9dfb938f07eb 11 char* topic2 = "k64rec";
sbetrabet 21:f08f17225c7c 12 char* topic3 = "bulb";
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 21:f08f17225c7c 17 unsigned int 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 21:f08f17225c7c 21 int flag =0;
sbetrabet 19:9dfb938f07eb 22 MQTT::Client<MQTTESP8266, Countdown> client = MQTT::Client<MQTTESP8266, Countdown>(ipstack);
sbetrabet 21:f08f17225c7c 23 //MbedJSONValue demo;
sbetrabet 19:9dfb938f07eb 24 int arrivedcount = 0;
sbetrabet 19:9dfb938f07eb 25 //using namespace std;
sbetrabet 19:9dfb938f07eb 26 std::string my_str;
sbetrabet 19:9dfb938f07eb 27 std::string my_str2;
sbetrabet 19:9dfb938f07eb 28 std::string someString;
sbetrabet 19:9dfb938f07eb 29 std::string clearsky ("clear");
sbetrabet 19:9dfb938f07eb 30 std::string clouds ("few clouds");
sbetrabet 19:9dfb938f07eb 31 std::string snow ("light snow");
sbetrabet 21:f08f17225c7c 32 std::string automatic ("automatic");
sbetrabet 21:f08f17225c7c 33 std::string manual ("manual");
sbetrabet 19:9dfb938f07eb 34 int j=0;
sbetrabet 21:f08f17225c7c 35 rgbled rgb(PTB22, PTE26, PTB21); // create rgb object with pin definitions for FRDM-K64F board
sbetrabet 21:f08f17225c7c 36
sbetrabet 19:9dfb938f07eb 37 // callback for subscribe topic
icraggs 1:a1d5c7a6acbc 38
mbedAustin 18:76d0899bc3ce 39 void subscribeCallback(MQTT::MessageData& md)
icraggs 2:638c854c0695 40 {
icraggs 9:5beb8609e9f7 41 MQTT::Message &message = md.message;
sbetrabet 20:568d04eb3d63 42 printf("Message received: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
sbetrabet 19:9dfb938f07eb 43
sbetrabet 19:9dfb938f07eb 44 printf("%s",(char*)message.payload);
sbetrabet 19:9dfb938f07eb 45 printf("\r\n");
sbetrabet 19:9dfb938f07eb 46
icraggs 9:5beb8609e9f7 47 printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
sbetrabet 21:f08f17225c7c 48 printf("nonedited payload is %s and payload is %d\r\n",(char*)message.payload,message.payloadlen);
sbetrabet 21:f08f17225c7c 49
sbetrabet 19:9dfb938f07eb 50 // int f = int(message.payload);
sbetrabet 19:9dfb938f07eb 51
sbetrabet 19:9dfb938f07eb 52 std::string someString((char*)message.payload);
sbetrabet 19:9dfb938f07eb 53 someString.resize (message.payloadlen);
sbetrabet 21:f08f17225c7c 54 printf("Edited payload iss %s \r\n",someString.c_str());
sbetrabet 21:f08f17225c7c 55 //j= someString.find(clouds);
sbetrabet 21:f08f17225c7c 56 //printf("j = %d \r\n", j);
sbetrabet 19:9dfb938f07eb 57
sbetrabet 19:9dfb938f07eb 58 if ( !(someString.find(clouds)) )
sbetrabet 19:9dfb938f07eb 59 {
sbetrabet 19:9dfb938f07eb 60 sprintf(buf, "dCglDR-G9WoQUiig0XMNhOV4ozIEIVu3rWdBh5IlQ7d,cloud %s\n", key2);
sbetrabet 19:9dfb938f07eb 61 message.payload = (void*)buf;
sbetrabet 19:9dfb938f07eb 62 message.payloadlen = strlen(buf)+1;
sbetrabet 19:9dfb938f07eb 63 rc = client.publish(topic3, message);
sbetrabet 20:568d04eb3d63 64 printf("if condition checked, its cloudy\r\n");
sbetrabet 21:f08f17225c7c 65 //rgb.set(red);
sbetrabet 21:f08f17225c7c 66
sbetrabet 19:9dfb938f07eb 67 }
sbetrabet 19:9dfb938f07eb 68 else if ( !(someString.find(clearsky)) )
sbetrabet 19:9dfb938f07eb 69 {
sbetrabet 20:568d04eb3d63 70 sprintf(buf, "dCglDR-G9WoQUiig0XMNhOV4ozIEIVu3rWdBh5IlQ7d,clearsky %s\r\n", key2);
sbetrabet 19:9dfb938f07eb 71 message.payload = (void*)buf;
sbetrabet 19:9dfb938f07eb 72 message.payloadlen = strlen(buf)+1;
sbetrabet 19:9dfb938f07eb 73 rc = client.publish(topic3, message);
sbetrabet 20:568d04eb3d63 74 printf("if condition checked, its clear\r\n");
sbetrabet 21:f08f17225c7c 75
sbetrabet 21:f08f17225c7c 76 //rgb.set(yellow);
sbetrabet 19:9dfb938f07eb 77 }
sbetrabet 19:9dfb938f07eb 78 else if ( !(someString.find(snow)) )
sbetrabet 19:9dfb938f07eb 79 {
sbetrabet 21:f08f17225c7c 80
sbetrabet 20:568d04eb3d63 81 sprintf(buf, "dCglDR-G9WoQUiig0XMNhOV4ozIEIVu3rWdBh5IlQ7d,snow %s\r\n",key2);
sbetrabet 19:9dfb938f07eb 82 message.payload = (void*)buf;
sbetrabet 19:9dfb938f07eb 83 message.payloadlen = strlen(buf)+1;
sbetrabet 19:9dfb938f07eb 84 rc = client.publish(topic3, message);
sbetrabet 20:568d04eb3d63 85 printf("if condition checked, its snowy\r\n");
sbetrabet 21:f08f17225c7c 86
sbetrabet 21:f08f17225c7c 87 // rgb.set(blue);
sbetrabet 21:f08f17225c7c 88 }
sbetrabet 21:f08f17225c7c 89 else if ( !(someString.find(automatic)) )
sbetrabet 21:f08f17225c7c 90 {
sbetrabet 21:f08f17225c7c 91
sbetrabet 21:f08f17225c7c 92 printf("Automatic, i.e Decide based on weather \r\n");
sbetrabet 21:f08f17225c7c 93 flag = 0;
sbetrabet 21:f08f17225c7c 94 // rgb.set(blue);
sbetrabet 21:f08f17225c7c 95 }
sbetrabet 21:f08f17225c7c 96 else if ( !(someString.find(manual)) )
sbetrabet 21:f08f17225c7c 97 {
sbetrabet 21:f08f17225c7c 98
sbetrabet 21:f08f17225c7c 99 printf("Manual Flag set \r\n");
sbetrabet 21:f08f17225c7c 100 flag = 1;
sbetrabet 21:f08f17225c7c 101 // rgb.set(blue);
sbetrabet 19:9dfb938f07eb 102 }
sbetrabet 19:9dfb938f07eb 103 else
sbetrabet 19:9dfb938f07eb 104 {
sbetrabet 20:568d04eb3d63 105 printf("went into else\r\n");
sbetrabet 19:9dfb938f07eb 106 }
sbetrabet 19:9dfb938f07eb 107
icraggs 2:638c854c0695 108 }
icraggs 0:0cae29831d01 109
icraggs 2:638c854c0695 110 int main(int argc, char* argv[])
sbetrabet 19:9dfb938f07eb 111 {
sbetrabet 19:9dfb938f07eb 112 wait (1);
sbetrabet 20:568d04eb3d63 113 printf("Starting\r\n");
sbetrabet 19:9dfb938f07eb 114
sbetrabet 21:f08f17225c7c 115 set_time(1256729737);
sbetrabet 21:f08f17225c7c 116 time_t seconds = time(NULL);
sbetrabet 21:f08f17225c7c 117 previousTime = (unsigned int)seconds;
sbetrabet 21:f08f17225c7c 118
sbetrabet 21:f08f17225c7c 119
sbetrabet 20:568d04eb3d63 120 printf("Version is %f\r\n", version);
sbetrabet 21:f08f17225c7c 121
sbetrabet 21:f08f17225c7c 122 rgb.active(false); // set led output to active low
sbetrabet 21:f08f17225c7c 123 rgb.set(none); // set led output of all off
sbetrabet 21:f08f17225c7c 124
sbetrabet 19:9dfb938f07eb 125
geky 17:92a64d43ee61 126
icraggs 6:e4c690c45021 127 if (rc != 0)
sbetrabet 20:568d04eb3d63 128 printf("rc from TCP connect is %d\r\n", rc);
geky 17:92a64d43ee61 129
geky 17:92a64d43ee61 130 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
sbetrabet 19:9dfb938f07eb 131 //data.MQTTVersion = 3;
sbetrabet 19:9dfb938f07eb 132 //data.clientID.cstring = "mbed-clientID";
sbetrabet 19:9dfb938f07eb 133 //data.username.cstring = "testuser";
sbetrabet 19:9dfb938f07eb 134 //data.password.cstring = "testpassword";
sbetrabet 19:9dfb938f07eb 135
icraggs 16:28d062c5522b 136 if ((rc = client.connect(data)) != 0)
sbetrabet 20:568d04eb3d63 137 printf("rc from MQTT connect is %d\r\n", rc);
geky 17:92a64d43ee61 138
sbetrabet 19:9dfb938f07eb 139 if ((rc = client.subscribe(topic2, MQTT::QOS1, subscribeCallback)) != 0)
sbetrabet 20:568d04eb3d63 140 printf("Recv'd from MQTT subscribe is %d\r\n", rc);
icraggs 2:638c854c0695 141
icraggs 2:638c854c0695 142 MQTT::Message message;
sbetrabet 19:9dfb938f07eb 143 // QoS 0
sbetrabet 21:f08f17225c7c 144
sbetrabet 20:568d04eb3d63 145
sbetrabet 20:568d04eb3d63 146 sprintf(buf, "fa02d31610ce9ea0de15b22bb2fe279d, %s\r\n", key2);
icraggs 2:638c854c0695 147 message.qos = MQTT::QOS0;
icraggs 2:638c854c0695 148 message.retained = false;
icraggs 2:638c854c0695 149 message.dup = false;
icraggs 2:638c854c0695 150 message.payload = (void*)buf;
icraggs 2:638c854c0695 151 message.payloadlen = strlen(buf)+1;
sbetrabet 20:568d04eb3d63 152
sbetrabet 20:568d04eb3d63 153
icraggs 16:28d062c5522b 154 rc = client.publish(topic, message);
sbetrabet 19:9dfb938f07eb 155 wait(5);
sbetrabet 21:f08f17225c7c 156
sbetrabet 19:9dfb938f07eb 157 /*
sbetrabet 20:568d04eb3d63 158 sprintf(buf, "dCglDR-G9WoQUiig0XMNhOV4ozIEIVu3rWdBh5IlQ7d, %s\r\n", key2);
sbetrabet 19:9dfb938f07eb 159 message.payload = (void*)buf;
sbetrabet 19:9dfb938f07eb 160 message.payloadlen = strlen(buf)+1;
sbetrabet 19:9dfb938f07eb 161 rc = client.publish(topic2, message);
sbetrabet 19:9dfb938f07eb 162 */
sbetrabet 20:568d04eb3d63 163
sbetrabet 19:9dfb938f07eb 164 while (arrivedcount < 10)
sbetrabet 21:f08f17225c7c 165 { client.yield(100);
sbetrabet 21:f08f17225c7c 166
sbetrabet 21:f08f17225c7c 167 time_t seconds = time(NULL);
sbetrabet 21:f08f17225c7c 168 //printf("%u\r\n", (unsigned int)seconds);
sbetrabet 21:f08f17225c7c 169 wait(1);
sbetrabet 21:f08f17225c7c 170 if ( seconds - previousTime >= interval )
sbetrabet 21:f08f17225c7c 171 {
sbetrabet 21:f08f17225c7c 172 if (flag ==0)
sbetrabet 21:f08f17225c7c 173 {
sbetrabet 21:f08f17225c7c 174 //printf("its been a few seconds \r\n");
sbetrabet 21:f08f17225c7c 175 printf("Checking the weather\r\n");
sbetrabet 21:f08f17225c7c 176 previousTime =seconds;
sbetrabet 21:f08f17225c7c 177 sprintf(buf, "fa02d31610ce9ea0de15b22bb2fe279d, %s\r\n", key2);
sbetrabet 21:f08f17225c7c 178 message.qos = MQTT::QOS0;
sbetrabet 21:f08f17225c7c 179 message.retained = false;
sbetrabet 21:f08f17225c7c 180 message.dup = false;
sbetrabet 21:f08f17225c7c 181 message.payload = (void*)buf;
sbetrabet 21:f08f17225c7c 182 message.payloadlen = strlen(buf)+1;
sbetrabet 21:f08f17225c7c 183 rc = client.publish(topic, message);
sbetrabet 21:f08f17225c7c 184 }
sbetrabet 21:f08f17225c7c 185 }
sbetrabet 21:f08f17225c7c 186 }
sbetrabet 20:568d04eb3d63 187
sbetrabet 20:568d04eb3d63 188
sbetrabet 19:9dfb938f07eb 189 /*
icraggs 2:638c854c0695 190 // QoS 1
sbetrabet 20:568d04eb3d63 191 sprintf(buf, "Hello World! QoS 1 message from app version %f\r\n", version);
icraggs 2:638c854c0695 192 message.qos = MQTT::QOS1;
icraggs 2:638c854c0695 193 message.payloadlen = strlen(buf)+1;
icraggs 16:28d062c5522b 194 rc = client.publish(topic, message);
sbetrabet 19:9dfb938f07eb 195 while (arrivedcount < 10)
icraggs 2:638c854c0695 196 client.yield(100);
sbetrabet 19:9dfb938f07eb 197
icraggs 2:638c854c0695 198 // QoS 2
sbetrabet 20:568d04eb3d63 199 sprintf(buf, "Hello World! QoS 2 message from app version %f\r\n", version);
icraggs 2:638c854c0695 200 message.qos = MQTT::QOS2;
icraggs 2:638c854c0695 201 message.payloadlen = strlen(buf)+1;
icraggs 16:28d062c5522b 202 rc = client.publish(topic, message);
icraggs 12:086a9314e8a5 203 while (arrivedcount < 3)
icraggs 2:638c854c0695 204 client.yield(100);
geky 17:92a64d43ee61 205
icraggs 12:086a9314e8a5 206 // n * QoS 2
sbetrabet 19:9dfb938f07eb 207
geky 17:92a64d43ee61 208 for (int i = 1; i <= 10; ++i) {
sbetrabet 20:568d04eb3d63 209 sprintf(buf, "Hello World! QoS 2 message number %d from app version %f\r\n", i, version);
icraggs 12:086a9314e8a5 210 message.qos = MQTT::QOS2;
icraggs 12:086a9314e8a5 211 message.payloadlen = strlen(buf)+1;
icraggs 16:28d062c5522b 212 rc = client.publish(topic, message);
icraggs 12:086a9314e8a5 213 while (arrivedcount < i + 3)
icraggs 12:086a9314e8a5 214 client.yield(100);
icraggs 12:086a9314e8a5 215 }
sbetrabet 19:9dfb938f07eb 216 */
sbetrabet 19:9dfb938f07eb 217
icraggs 8:a3e3113054a1 218 if ((rc = client.unsubscribe(topic)) != 0)
sbetrabet 20:568d04eb3d63 219 printf("rc from unsubscribe was %d\r\n", rc);
geky 17:92a64d43ee61 220
icraggs 8:a3e3113054a1 221 if ((rc = client.disconnect()) != 0)
sbetrabet 20:568d04eb3d63 222 printf("rc from disconnect was %d\r\n", rc);
geky 17:92a64d43ee61 223
sbetrabet 19:9dfb938f07eb 224 //ipstack.disconnect();
sbetrabet 20:568d04eb3d63 225 //printf("Finishing with %d messages received\r\n", arrivedcount);
geky 17:92a64d43ee61 226
icraggs 0:0cae29831d01 227 return 0;
icraggs 0:0cae29831d01 228 }