,ss

Dependencies:   C12832 DHT MQTT

Fork of HelloMQTT by Kim jihyeon

Committer:
2814970
Date:
Fri Jan 05 16:27:00 2018 +0000
Revision:
24:9269143e00f4
Parent:
23:e3422d0d3cc2
jihyeon hw4;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
2814970 24:9269143e00f4 1 #define logMessage printf
2814970 24:9269143e00f4 2 #define MQTTCLIENT_QOS2 1
2814970 24:9269143e00f4 3
2814970 24:9269143e00f4 4 #include <string>
2814970 24:9269143e00f4 5 #include "mbed.h"
2814970 23:e3422d0d3cc2 6 #include "easy-connect.h"
2814970 24:9269143e00f4 7 #include "TCPSocket.h"
2814970 24:9269143e00f4 8 #include "DHT.h"
2814970 23:e3422d0d3cc2 9 #include "MQTTNetwork.h"
2814970 23:e3422d0d3cc2 10 #include "MQTTmbed.h"
2814970 23:e3422d0d3cc2 11 #include "MQTTClient.h"
Jan Jongboom 20:49c9daf2b0ff 12
2814970 23:e3422d0d3cc2 13 /* connect this pin to both the CH_PD (aka EN) & RST pins on the ESP8266 just in case */
2814970 23:e3422d0d3cc2 14 #define WIFI_HW_RESET_PIN D4
2814970 24:9269143e00f4 15
2814970 23:e3422d0d3cc2 16 /* See if you can try using a hostname here */
2814970 23:e3422d0d3cc2 17 #define MQTT_BROKER_ADDR "192.168.0.9"
2814970 23:e3422d0d3cc2 18 #define MQTT_BROKER_PORT 1883
2814970 24:9269143e00f4 19
2814970 24:9269143e00f4 20 Serial pc(USBTX, USBRX); // computer to mbed boardSerial esp(D1, D0);
2814970 24:9269143e00f4 21 DHT sensor(D7, DHT22);
2814970 24:9269143e00f4 22
2814970 23:e3422d0d3cc2 23 DigitalOut wifiHwResetPin(WIFI_HW_RESET_PIN);
2814970 23:e3422d0d3cc2 24 DigitalOut led2(LED2);
2814970 23:e3422d0d3cc2 25
2814970 23:e3422d0d3cc2 26 volatile bool flag = false;
2814970 23:e3422d0d3cc2 27
2814970 23:e3422d0d3cc2 28 Mutex mqttMtx;
2814970 23:e3422d0d3cc2 29
2814970 23:e3422d0d3cc2 30
2814970 24:9269143e00f4 31 char* topic1 = "LED2";
2814970 24:9269143e00f4 32 char* topic2 = "Temp";
2814970 24:9269143e00f4 33 /*char* topic3 = "setOff";
2814970 24:9269143e00f4 34 char* topic4 = "setOn";*/
2814970 24:9269143e00f4 35
2814970 24:9269143e00f4 36 void task_DHT();
2814970 23:e3422d0d3cc2 37
2814970 24:9269143e00f4 38 void messageArrived(MQTT::MessageData& md){
2814970 24:9269143e00f4 39 MQTT::Message &message = md.message;
2814970 24:9269143e00f4 40
2814970 23:e3422d0d3cc2 41
2814970 24:9269143e00f4 42 logMessage("\rMessage arrived: qos %d, retained %d, dup %d, packetid %d\r\n",
2814970 24:9269143e00f4 43 message.qos, message.retained, message.dup, message.id);
2814970 24:9269143e00f4 44
Jan Jongboom 20:49c9daf2b0ff 45 logMessage("Payload %.*s\r\n", message.payloadlen, (char*)message.payload);
2814970 23:e3422d0d3cc2 46
2814970 24:9269143e00f4 47 char fwdTarget = ((char *)message.payload)[0];
2814970 24:9269143e00f4 48
2814970 24:9269143e00f4 49 switch(fwdTarget){
2814970 23:e3422d0d3cc2 50 case '0': // turn off
2814970 24:9269143e00f4 51 led2 = 0;
2814970 24:9269143e00f4 52 logMessage("setOff: turn off the Red\r\n\r\n");
2814970 24:9269143e00f4 53 break;
2814970 24:9269143e00f4 54
2814970 23:e3422d0d3cc2 55 case '1': //turn on
2814970 24:9269143e00f4 56 led2 = 1;
2814970 24:9269143e00f4 57 logMessage("setOff: turn on the Red\r\n\r\n");
2814970 24:9269143e00f4 58 break;
2814970 23:e3422d0d3cc2 59
2814970 23:e3422d0d3cc2 60 default:
2814970 24:9269143e00f4 61 pc.printf("Unknown MQTT msg\r\n\r\n");
2814970 24:9269143e00f4 62 break;
2814970 23:e3422d0d3cc2 63 }
2814970 24:9269143e00f4 64 }
icraggs 2:638c854c0695 65
2814970 24:9269143e00f4 66 int main(int argc, char* argv[]){
2814970 24:9269143e00f4 67
2814970 24:9269143e00f4 68
2814970 23:e3422d0d3cc2 69 float version = 0.5;
2814970 23:e3422d0d3cc2 70 pc.baud(115200);
2814970 24:9269143e00f4 71
2814970 23:e3422d0d3cc2 72 logMessage("MQTT example: version is %.2f\r\n", version);
2814970 23:e3422d0d3cc2 73 wait(0.2); //delay startup
2814970 24:9269143e00f4 74
2814970 24:9269143e00f4 75 pc.printf("\rResetting ESP8266 Hardware...\r\n");
2814970 24:9269143e00f4 76 wifiHwResetPin = 0;
2814970 24:9269143e00f4 77 wait_ms(100);
2814970 24:9269143e00f4 78 wifiHwResetPin = 1;
2814970 24:9269143e00f4 79
2814970 24:9269143e00f4 80 pc.printf("Starting MQTT example with an ESP8266 wifi device using Mbed OS.\r\n");
2814970 23:e3422d0d3cc2 81 pc.printf("Attempting to connect to access point...\r\n");
2814970 24:9269143e00f4 82
Jan Jongboom 20:49c9daf2b0ff 83 NetworkInterface* network = easy_connect(true);
2814970 24:9269143e00f4 84
Jan Jongboom 20:49c9daf2b0ff 85 if (!network) {
2814970 23:e3422d0d3cc2 86 pc.printf("Error in east connection\r\n");
Jan Jongboom 20:49c9daf2b0ff 87 return -1;
Jan Jongboom 20:49c9daf2b0ff 88 }
2814970 24:9269143e00f4 89
Jan Jongboom 20:49c9daf2b0ff 90 MQTTNetwork mqttNetwork(network);
2814970 24:9269143e00f4 91
Jan Jongboom 21:a68bd76740f9 92 MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork);
2814970 23:e3422d0d3cc2 93
2814970 23:e3422d0d3cc2 94 logMessage("Connecting to %s:%d\r\n", MQTT_BROKER_ADDR, MQTT_BROKER_PORT);
2814970 24:9269143e00f4 95 int rc = mqttNetwork.connect(MQTT_BROKER_ADDR, MQTT_BROKER_PORT);
2814970 24:9269143e00f4 96 if (rc != 0)
2814970 24:9269143e00f4 97 logMessage("rc from TCP connect is %d\r\n", rc);
2814970 24:9269143e00f4 98
2814970 24:9269143e00f4 99 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
2814970 24:9269143e00f4 100 data.MQTTVersion = 3;
2814970 24:9269143e00f4 101 data.clientID.cstring = "mbed-jihyeon";
2814970 24:9269143e00f4 102 data.username.cstring = "user-jihyeon";
2814970 24:9269143e00f4 103 data.password.cstring = "testpassword";
2814970 23:e3422d0d3cc2 104
2814970 24:9269143e00f4 105 if ((rc = client.connect(data)) != 0)
2814970 24:9269143e00f4 106 logMessage("rc from MQTT connect is %d\r\n", rc);
2814970 24:9269143e00f4 107 if ((rc = client.subscribe(topic1, MQTT::QOS0, messageArrived))&(rc = client.subscribe(topic2, MQTT::QOS0, messageArrived)) != 0)
2814970 24:9269143e00f4 108 logMessage("rc from MQTT subscribe is %d\r\n", rc);
2814970 23:e3422d0d3cc2 109
2814970 23:e3422d0d3cc2 110 int count = 0;
2814970 24:9269143e00f4 111
2814970 24:9269143e00f4 112 int error = 0;
2814970 24:9269143e00f4 113 int c;
2814970 23:e3422d0d3cc2 114
2814970 23:e3422d0d3cc2 115 while(1) {
2814970 24:9269143e00f4 116 error = sensor.readData();
2814970 23:e3422d0d3cc2 117
2814970 24:9269143e00f4 118 if (0 == error) {
2814970 24:9269143e00f4 119
2814970 24:9269143e00f4 120 c = sensor.ReadTemperature(CELCIUS);
2814970 23:e3422d0d3cc2 121
2814970 24:9269143e00f4 122 Thread::wait(1000);
2814970 24:9269143e00f4 123 char buf[5];
2814970 24:9269143e00f4 124 MQTT::Message message;
2814970 24:9269143e00f4 125
2814970 24:9269143e00f4 126 if (count == 5) {
2814970 24:9269143e00f4 127 pc.printf("\rPublish: temp(%d *C)\r\n", c);
2814970 23:e3422d0d3cc2 128
2814970 24:9269143e00f4 129 sprintf(buf, "%d", c);
2814970 24:9269143e00f4 130 message.qos = MQTT::QOS2;
2814970 24:9269143e00f4 131 message.retained = false;
2814970 24:9269143e00f4 132 message.dup = false;
2814970 24:9269143e00f4 133 message.payload = (void*)buf;
2814970 24:9269143e00f4 134 message.payloadlen = strlen(buf)+1;
2814970 24:9269143e00f4 135 mqttMtx.lock();
2814970 24:9269143e00f4 136 rc = client.publish(topic2, message);
2814970 24:9269143e00f4 137 mqttMtx.unlock();
2814970 24:9269143e00f4 138 count = 0;
2814970 24:9269143e00f4 139 }
Jan Jongboom 20:49c9daf2b0ff 140
2814970 24:9269143e00f4 141 if(!client.isConnected())
2814970 24:9269143e00f4 142 NVIC_SystemReset(); // soft reset
2814970 24:9269143e00f4 143
Jan Jongboom 20:49c9daf2b0ff 144
2814970 24:9269143e00f4 145 client.yield(10);
2814970 24:9269143e00f4 146 count++;
2814970 24:9269143e00f4 147 } else {
2814970 24:9269143e00f4 148 printf("Error: %d\r\n", error);
2814970 24:9269143e00f4 149 }
2814970 24:9269143e00f4 150 }
2814970 24:9269143e00f4 151
icraggs 0:0cae29831d01 152 return 0;
icraggs 0:0cae29831d01 153 }
2814970 24:9269143e00f4 154