hwsdf
Dependencies: C12832 hw4f HW4 MQTT
Fork of HW4 by
main.cpp
- Committer:
- Hyoeunchoi
- Date:
- 2018-01-05
- Revision:
- 23:d508f2806faa
- Parent:
- 21:a68bd76740f9
- Child:
- 24:4b8390b87ab3
File content as of revision 23:d508f2806faa:
// change this to 1 to output messages to LCD instead of serial #define logMessage printf #define MQTTCLIENT_QOS2 1 #include <string> #include "mbed.h" #include "easy-connect.h" #include "MQTTNetwork.h" #include "MQTTmbed.h" #include "MQTTClient.h" #include "TCPSocket.h" #include "DHT22.h" #define WIFI_HW_RESET_PIN D4 #define MQTT_BROKER_ADDR "192.168.0.10" #define MQTT_BROKER_PORT 1883 DigitalOut wifiHwResetPin(WIFI_HW_RESET_PIN); DigitalOut led2(LED2); DHT22 dht22(D7); Serial pc(USBTX, USBRX, 115200); volatile bool flag = false; Mutex mqttMtx; char* topic_toGW = "toGW"; char* topic_fromGW = "toNUCLEO"; void messageArrived(MQTT::MessageData& md) { MQTT::Message &message = md.message; //logMessage("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id); //logMessage("Payload %.*s\r\n", message.payloadlen, (char*)message.payload); pc.printf("Subscribe from GW: %.*s\r\n", message.payloadlen, (char*)message.payload); char fwdTarget = ((char*)message.payload)[0]; switch(fwdTarget){ case '0': led2 = 0; pc.printf("LED Turn Off\r\n\r\n"); break; case '1': led2 = 1; pc.printf("LED Turn On\r\n"); break; default: pc.printf("Unknown MQTT message\r\n"); break; } } double getTemp(void){ double temp; if(dht22.sample()){ temp=dht22.getTemperature()/10.0; pc.printf("temperature: %3.1f\r\n",temp); } else{ temp=-999; pc.printf("Checksum error\r\n"); } return temp; } int main(int argc, char* argv[]) { float version = 0.5; NetworkInterface* net = easy_connect(true); if (!net) { pc.printf("Error in easy connection\r\n"); return -1; } logMessage("HelloMQTT: version is %.2f\r\n", version); wait(0.2); pc.printf("Resetting ESP8266 Hardware...\r\n"); wifiHwResetPin = 0; wait_ms(500); wifiHwResetPin = 1; MQTTNetwork mqttNetwork(net); MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork); logMessage("Connecting to %s:%d\r\n", MQTT_BROKER_ADDR, MQTT_BROKER_PORT); int rc = mqttNetwork.connect(MQTT_BROKER_ADDR, MQTT_BROKER_PORT); if (rc != 0) logMessage("rc from GW connect is %d\r\n", rc); MQTTPacket_connectData data = MQTTPacket_connectData_initializer; data.MQTTVersion = 3; data.clientID.cstring = "mbed-sample-Hyoeun"; data.username.cstring = "testuser"; data.password.cstring = "testpassword"; if ((rc = client.connect(data)) != 0) logMessage("rc from MQTT connect is %d\r\n", rc); if ((rc = client.subscribe(topic_fromGW, MQTT::QOS2, messageArrived)) != 0) logMessage("rc from MQTT subscribe is %d\r\n", rc); int count = 0; while(1){ Thread::wait(1000); char buf[100]; MQTT::Message message; if(count == 5){ pc.printf("Publish: toGW\r\n"); sprintf(buf, "{\"temp\": %3.1f}", getTemp()); message.qos = MQTT::QOS0; message.retained = false; message.dup = false; message.payload = (void*)buf; message.payloadlen = strlen(buf)+1; pc.printf("%s",message); mqttMtx.lock(); rc = client.publish(topic_toGW, message); mqttMtx.unlock(); count = 0; pc.printf("\r\n"); } if(!client.isConnected()) NVIC_SystemReset(); client.yield(10); count++; } }