hwsdf
Dependencies: C12832 hw4f HW4 MQTT
Fork of HW4 by
Diff: main.cpp
- Revision:
- 24:4b8390b87ab3
- Parent:
- 23:d508f2806faa
--- a/main.cpp Fri Jan 05 17:51:46 2018 +0000 +++ b/main.cpp Sat Jan 06 11:53:19 2018 +0000 @@ -9,119 +9,125 @@ #include "MQTTmbed.h" #include "MQTTClient.h" #include "TCPSocket.h" -#include "DHT22.h" +//#include "DHT22.h" +#include "DHT_2.h" #define WIFI_HW_RESET_PIN D4 -#define MQTT_BROKER_ADDR "192.168.0.10" +#define MQTT_BROKER_ADDR "192.168.0.8" #define MQTT_BROKER_PORT 1883 DigitalOut wifiHwResetPin(WIFI_HW_RESET_PIN); DigitalOut led2(LED2); -DHT22 dht22(D7); +DHT sensor(D7,DHT22); Serial pc(USBTX, USBRX, 115200); - volatile bool flag = false; - Mutex mqttMtx; - -char* topic_toGW = "toGW"; -char* topic_fromGW = "toNUCLEO"; +char* topic1 = "LED"; +char* topic2 = "TEMPER"; +char* topic3 = "LEDS"; 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); + 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); + + char fwdTarget = ((char *)message.payload)[0]; + switch(fwdTarget) + { + case '0': // turn off + led2 = 0; + break; + case '1': //turn on + led2 = 1; + break; + case '2': //LED status + flag = true; + break; + default: + pc.printf("Unknown MQTT message\n"); + break; + } +} +int main(int argc, char* argv[]) +{ //network setting + float version = 0.5; + pc.baud(115200); + logMessage("MQTT example: version is %.2f\r\n", version); + wait(0.2); //delay startup + pc.printf("Resetting ESP8266 Hardware...\r\n"); + pc.printf("Attempting to connect to access point...\r\n"); + + NetworkInterface* network = easy_connect(true); + if (!network) { + pc.printf("Error in east connection\r\n"); + return -1; + } + + MQTTNetwork mqttNetwork(network); + 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 TCP connect is %d\r\n", rc); + + + MQTTPacket_connectData data = MQTTPacket_connectData_initializer; + data.MQTTVersion = 3; + data.clientID.cstring = "mbed-jcm"; + data.username.cstring = "user-jcm"; + data.password.cstring = "testpassword"; + if ((rc = client.connect(data)) != 0) + logMessage("rc from MQTT connect is %d\r\n", rc); + if ((rc = client.subscribe(topic1, MQTT::QOS0, messageArrived)) != 0) + logMessage("rc from MQTT subscribe is %d\r\n", rc); + + float c = 0; + int error = 0; + int count =0; + pc.printf("starting to read temperature...\r\n"); + + while(1){ + Thread::wait(1000); + char buf[100]; + + error = sensor.readData(); + + if (count == 5) { + pc.printf("5 secs over!"); + pc.printf("Publish: TEMPER\r\n"); + if (0 == error) { + c = sensor.ReadTemperature(CELCIUS); + printf("Temperature: %.1f\r\n", c); + } else if(error == 6){ + printf("CheckSum Error\r\n"); + + sprintf(buf, "%3.1f", c); + message.qos = MQTT::QOS2; + message.retained = false; + message.dup = false; + message.payload = (void*)buf; + message.payloadlen = strlen(buf)+1; + mqttMtx.lock(); + rc = client.publish(topic2, message); + mqttMtx.unlock(); + + count = 0; + } + if(!client.isConnected()) + NVIC_SystemReset(); // soft reset + + client.yield(10); + count++; + pc.printf("%d\r\n",count); + + } + } - 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; + return 0; } -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++; - } -} -