ECE59500_ESP8266_K64_MQTT_Pub_Sub_client
Dependencies: mbed ESP8266Interface MbedJSONValue mbed-rtos MQTT JSON
Diff: main.cpp
- Revision:
- 19:9dfb938f07eb
- Parent:
- 18:76d0899bc3ce
- Child:
- 20:568d04eb3d63
--- a/main.cpp Tue Jun 09 17:57:43 2015 +0000 +++ b/main.cpp Thu Mar 07 08:55:54 2019 +0000 @@ -1,95 +1,136 @@ -/******************************************************************************* - * Copyright (c) 2014 IBM Corp. - * - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * and Eclipse Distribution License v1.0 which accompany this distribution. - * - * The Eclipse Public License is available at - * http://www.eclipse.org/legal/epl-v10.html - * and the Eclipse Distribution License is available at - * http://www.eclipse.org/org/documents/edl-v10.php. - * - * Contributors: - * Ian Craggs - initial API and implementation and/or initial documentation - *******************************************************************************/ +#include "MQTTESP8266.h" +#include "MQTTClient.h" +#include "string.h" +#include "MbedJSONValue.h" +char buf[100]; -/** - 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. +MQTTESP8266 ipstack(D1, D0, D10, "BHNTG1682GFFE2","220960b5"); // change to match your wifi access point +float version = 0.47; +char* topic = "k64"; +char* topic2 = "k64rec"; +char* topic3 = "bulb"; + +char* key2 = "key"; +char* hostname = "192.168.0.6"; // Ip +int port = 1883; +int rc = ipstack.connect(hostname, port); -*/ +MQTT::Client<MQTTESP8266, Countdown> client = MQTT::Client<MQTTESP8266, Countdown>(ipstack); +MbedJSONValue demo; +int arrivedcount = 0; +//using namespace std; +std::string my_str; +std::string my_str2; +std::string someString; +std::string clearsky ("clear"); +std::string clouds ("few clouds"); +std::string snow ("light snow"); +int j=0; +// callback for subscribe topic -#include "MQTTESP8266.h" -#include "MQTTClient.h" - -int arrivedcount = 0; - -// callback for subscribe topic void subscribeCallback(MQTT::MessageData& md) { MQTT::Message &message = md.message; printf("Message received: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id); + + printf("%s",(char*)message.payload); + printf("\r\n"); + printf("Payload %.*s\n", message.payloadlen, (char*)message.payload); - ++arrivedcount; + printf("nonedited payload is %s and payload is %d\n",(char*)message.payload,message.payloadlen); + printf("hey\n"); + // int f = int(message.payload); + + std::string someString((char*)message.payload); + someString.resize (message.payloadlen); + printf("Edited payload iss %s \n",someString.c_str()); + j= someString.find(clouds); + printf("j = %d \r\n", j); + + if ( !(someString.find(clouds)) ) + { + sprintf(buf, "dCglDR-G9WoQUiig0XMNhOV4ozIEIVu3rWdBh5IlQ7d,cloud %s\n", key2); + message.payload = (void*)buf; + message.payloadlen = strlen(buf)+1; + rc = client.publish(topic3, message); + printf("if condition checked, its cloudy\n"); + } + else if ( !(someString.find(clearsky)) ) + { + sprintf(buf, "dCglDR-G9WoQUiig0XMNhOV4ozIEIVu3rWdBh5IlQ7d,clearsky %s\n", key2); + message.payload = (void*)buf; + message.payloadlen = strlen(buf)+1; + rc = client.publish(topic3, message); + printf("if condition checked, its clear\n"); + } + else if ( !(someString.find(snow)) ) + { + sprintf(buf, "dCglDR-G9WoQUiig0XMNhOV4ozIEIVu3rWdBh5IlQ7d,snow %s\n",key2); + message.payload = (void*)buf; + message.payloadlen = strlen(buf)+1; + rc = client.publish(topic3, message); + printf("if condition checked, its snowy\n"); + } + else + { + printf("went into else\n"); + } + } -// main function that sets up the subscription and makes a couple publishes int main(int argc, char* argv[]) -{ +{ + wait (1); printf("Starting\n"); - MQTTESP8266 ipstack(D1, D0, D10, "demossid","passphrase"); // change to match your wifi access point - float version = 0.47; - char* topic = "mbed-sample"; - + printf("Version is %f\n", version); - MQTT::Client<MQTTESP8266, Countdown> client = MQTT::Client<MQTTESP8266, Countdown>(ipstack); + - char* hostname = "85.119.83.194"; // test.mosquitto.org - int port = 1883; - int rc = ipstack.connect(hostname, port); if (rc != 0) printf("rc from TCP connect is %d\n", rc); MQTTPacket_connectData data = MQTTPacket_connectData_initializer; - data.MQTTVersion = 3; - data.clientID.cstring = "mbed-clientID"; - data.username.cstring = "testuser"; - data.password.cstring = "testpassword"; + //data.MQTTVersion = 3; + //data.clientID.cstring = "mbed-clientID"; + //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, subscribeCallback)) != 0) + if ((rc = client.subscribe(topic2, MQTT::QOS1, subscribeCallback)) != 0) printf("Recv'd from MQTT subscribe is %d\n", rc); MQTT::Message message; + // QoS 0 - // QoS 0 - char buf[100]; - sprintf(buf, "Hello World! QoS 0 message from app version %f\n", version); + sprintf(buf, "fa02d31610ce9ea0de15b22bb2fe279d, %s\n", key2); message.qos = MQTT::QOS0; message.retained = false; message.dup = false; message.payload = (void*)buf; message.payloadlen = strlen(buf)+1; rc = client.publish(topic, message); - while (arrivedcount < 1) + wait(5); + /* + sprintf(buf, "dCglDR-G9WoQUiig0XMNhOV4ozIEIVu3rWdBh5IlQ7d, %s\n", key2); + message.payload = (void*)buf; + message.payloadlen = strlen(buf)+1; + rc = client.publish(topic2, message); + */ + while (arrivedcount < 10) client.yield(100); - + /* // QoS 1 sprintf(buf, "Hello World! QoS 1 message from app version %f\n", version); message.qos = MQTT::QOS1; message.payloadlen = strlen(buf)+1; rc = client.publish(topic, message); - while (arrivedcount < 2) + while (arrivedcount < 10) client.yield(100); - + // QoS 2 sprintf(buf, "Hello World! QoS 2 message from app version %f\n", version); message.qos = MQTT::QOS2; @@ -99,6 +140,7 @@ client.yield(100); // n * QoS 2 + 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; @@ -107,15 +149,16 @@ 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(); - printf("Finishing with %d messages received\n", arrivedcount); + //ipstack.disconnect(); + //printf("Finishing with %d messages received\n", arrivedcount); return 0; }