init
Dependencies: mbed C12832 EthernetInterface MQTT mbed-rtos picojson
main.cpp
- Committer:
- co838_mgl6
- Date:
- 2016-05-05
- Revision:
- 3:f809d8f8e572
- Parent:
- 2:a4a8003e29bd
File content as of revision 3:f809d8f8e572:
#include "LCD.h" #include "MathAlgo.hpp" #define MQTTCLIENT_QOS2 1 #include "MQTTEthernet.h" #include "MQTTClient.h" #include "picojson.h" LCD lcd; PwmOut spkr(D6); #define LED2_OFF 1 #define LED2_ON 0 Serial pc(USBTX, USBRX); #define printf pc.printf int arrivedcount = 0; enum string_code { ALERT, LAST, NOTKNOWN }; string_code hashit (std::string const& inString) { if (inString == "/alert") return ALERT; if (inString == "/last") return LAST; return NOTKNOWN; } void alert(const std::string& msg) { picojson::value v; const char * json = msg.c_str(); picojson::parse(v, json, json + msg.size()); picojson::array list = v.get("coordinates").get<picojson::array>(); picojson::array::iterator iter = list.begin(); double lng = (*iter).get<double>(); ++iter; double lat = (*iter).get<double>(); printf("ALERT : lng = %f / latt = %f\r\n", lng, lat); lcd.print("Alert from [lng:" + mathalgo::stof(lng) + "/lat:" + mathalgo::stof(lat) + "]\n"); for (float i = 2000.0; i < 10000.0; i += 100) { spkr.period(1.0/i); spkr=0.5; wait(0.02); } spkr=0.0; } void last(const std::string& msg) { picojson::value v; const char * json = msg.c_str(); picojson::parse(v, json, json + msg.size()); picojson::array list = v.get("coordinates").get<picojson::array>(); picojson::array::iterator iter = list.begin(); double lng = (*iter).get<double>(); ++iter; double lat = (*iter).get<double>(); ++iter; double depth = (*iter).get<double>(); double mag = v.get("mag").get<double>(); std::string title = v.get("title").get<std::string>(); lcd.print("Event[lng:" + mathalgo::stof(lng) + "/lat:" + mathalgo::stof(lat) + "]\n"); lcd.print("Title: " + title + "\n"); lcd.print("Magni: " + mathalgo::stof(mag) + "| Depth:" + mathalgo::stof(depth) + "\n"); } void messageArrived(MQTT::MessageData& md) { MQTT::Message &message = md.message; printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id); printf("Payload %.*s\r\n", message.payloadlen, (char*)message.payload); std::string payload ((char*)message.payload, 0, message.payloadlen); std::string topic (md.topicName.lenstring.data, 0, md.topicName.lenstring.len); ++arrivedcount; switch (hashit(topic)) { case ALERT: alert(payload); break; case LAST: last(payload); break; case NOTKNOWN: printf("Command unknown [%s]\r\n", topic.c_str()); break; } } int main(int argc, char* argv[]) { char* hostname = "92.222.87.208"; int port = 1883; char* topic1 = "/alert"; char* topic2 = "/last"; pc.baud(38400); MQTTEthernet ipstack = MQTTEthernet(); MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack); printf("Connecting to %s:%d\r\n", hostname, port); int rc = ipstack.connect(hostname, port); if (rc != 0) printf("rc from TCP connect is %d\r\n", rc); MQTTPacket_connectData data = MQTTPacket_connectData_initializer; data.MQTTVersion = 3; data.clientID.cstring = "mbed-k64f"; if ((rc = client.connect(data)) != 0) printf("rc from MQTT connect is %d\r\n", rc); if ((rc = client.subscribe(topic1, MQTT::QOS1, messageArrived)) != 0) printf("rc from MQTT subscribe /alert is %d\r\n", rc); if ((rc = client.subscribe(topic2, MQTT::QOS1, messageArrived)) != 0) printf("rc from MQTT subscribe /last is %d\r\n", rc); printf("GO RECEIVE\r\n"); while (1) { client.yield(100); } return 0; }