Kim jihyeon
/
HelloMQTT_jh
,ss
Fork of HelloMQTT by
main.cpp@24:9269143e00f4, 2018-01-05 (annotated)
- 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?
User | Revision | Line number | New 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 |