Kim jihyeon
/
HelloMQTT
,
Fork of HelloMQTT by
main.cpp@23:e3422d0d3cc2, 2018-01-05 (annotated)
- Committer:
- 2814970
- Date:
- Fri Jan 05 12:20:31 2018 +0000
- Revision:
- 23:e3422d0d3cc2
- Parent:
- 21:a68bd76740f9
,
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
2814970 | 23:e3422d0d3cc2 | 1 | /* |
icraggs | 17:0811bdbdd78a | 2 | #include "C12832.h" |
2814970 | 23:e3422d0d3cc2 | 3 | #include "easy-connect.h" |
2814970 | 23:e3422d0d3cc2 | 4 | #include "MQTTNetwork.h" |
2814970 | 23:e3422d0d3cc2 | 5 | #include "MQTTmbed.h" |
2814970 | 23:e3422d0d3cc2 | 6 | #include "MQTTClient.h" |
2814970 | 23:e3422d0d3cc2 | 7 | */ |
Jan Jongboom |
20:49c9daf2b0ff | 8 | |
Jan Jongboom |
20:49c9daf2b0ff | 9 | #define logMessage printf |
2814970 | 23:e3422d0d3cc2 | 10 | //#define MQTTCLIENT_QOS2 1 |
2814970 | 23:e3422d0d3cc2 | 11 | #include "mbed.h" |
Jan Jongboom |
20:49c9daf2b0ff | 12 | #include "easy-connect.h" |
Jan Jongboom |
20:49c9daf2b0ff | 13 | #include "MQTTNetwork.h" |
Jan Jongboom |
20:49c9daf2b0ff | 14 | #include "MQTTmbed.h" |
icraggs | 2:638c854c0695 | 15 | #include "MQTTClient.h" |
2814970 | 23:e3422d0d3cc2 | 16 | #include "DHT.h" |
2814970 | 23:e3422d0d3cc2 | 17 | /* connect this pin to both the CH_PD (aka EN) & RST pins on the ESP8266 just in case */ |
2814970 | 23:e3422d0d3cc2 | 18 | #define WIFI_HW_RESET_PIN D4 |
2814970 | 23:e3422d0d3cc2 | 19 | /* See if you can try using a hostname here */ |
2814970 | 23:e3422d0d3cc2 | 20 | #define MQTT_BROKER_ADDR "192.168.0.9" |
2814970 | 23:e3422d0d3cc2 | 21 | #define MQTT_BROKER_PORT 1883 |
2814970 | 23:e3422d0d3cc2 | 22 | DHT sensor(D7,DHT22); |
2814970 | 23:e3422d0d3cc2 | 23 | DigitalOut wifiHwResetPin(WIFI_HW_RESET_PIN); |
2814970 | 23:e3422d0d3cc2 | 24 | DigitalOut led2(LED2); |
2814970 | 23:e3422d0d3cc2 | 25 | Serial pc(USBTX, USBRX); // computer to mbedboardSerialesp(D1, D0); |
icraggs | 2:638c854c0695 | 26 | |
icraggs | 8:a3e3113054a1 | 27 | |
2814970 | 23:e3422d0d3cc2 | 28 | |
2814970 | 23:e3422d0d3cc2 | 29 | |
2814970 | 23:e3422d0d3cc2 | 30 | volatile bool flag = false; |
2814970 | 23:e3422d0d3cc2 | 31 | |
2814970 | 23:e3422d0d3cc2 | 32 | Mutex mqttMtx; |
2814970 | 23:e3422d0d3cc2 | 33 | |
2814970 | 23:e3422d0d3cc2 | 34 | |
2814970 | 23:e3422d0d3cc2 | 35 | float t = 0; |
2814970 | 23:e3422d0d3cc2 | 36 | |
2814970 | 23:e3422d0d3cc2 | 37 | char* topic1 = "LED"; |
2814970 | 23:e3422d0d3cc2 | 38 | char* topic2 = "TEMP"; |
2814970 | 23:e3422d0d3cc2 | 39 | char* topic3 = "LEDS"; |
icraggs | 9:5beb8609e9f7 | 40 | void messageArrived(MQTT::MessageData& md) |
icraggs | 2:638c854c0695 | 41 | { |
2814970 | 23:e3422d0d3cc2 | 42 | |
icraggs | 9:5beb8609e9f7 | 43 | MQTT::Message &message = md.message; |
2814970 | 23:e3422d0d3cc2 | 44 | /* our messaging standard says the first byte denotes which thread to fwdto */ |
2814970 | 23:e3422d0d3cc2 | 45 | logMessage("Message arrived: qos%d, retained %d, dup %d, packetid%d\r\n", message.qos, message.retained, message.dup, message.id); |
Jan Jongboom |
20:49c9daf2b0ff | 46 | logMessage("Payload %.*s\r\n", message.payloadlen, (char*)message.payload); |
2814970 | 23:e3422d0d3cc2 | 47 | |
2814970 | 23:e3422d0d3cc2 | 48 | char fwdTarget= ((char *)message.payload)[0]; |
2814970 | 23:e3422d0d3cc2 | 49 | switch(fwdTarget) |
2814970 | 23:e3422d0d3cc2 | 50 | { |
2814970 | 23:e3422d0d3cc2 | 51 | case '0': // turn off |
2814970 | 23:e3422d0d3cc2 | 52 | led2 = 0; |
2814970 | 23:e3422d0d3cc2 | 53 | break; |
icraggs | 0:0cae29831d01 | 54 | |
2814970 | 23:e3422d0d3cc2 | 55 | case '1': //turn on |
2814970 | 23:e3422d0d3cc2 | 56 | led2 = 1; |
2814970 | 23:e3422d0d3cc2 | 57 | break; |
2814970 | 23:e3422d0d3cc2 | 58 | |
2814970 | 23:e3422d0d3cc2 | 59 | case '2': //LED status |
2814970 | 23:e3422d0d3cc2 | 60 | flag = true; |
2814970 | 23:e3422d0d3cc2 | 61 | break; |
2814970 | 23:e3422d0d3cc2 | 62 | |
2814970 | 23:e3422d0d3cc2 | 63 | default: |
2814970 | 23:e3422d0d3cc2 | 64 | pc.printf("Unknown MQTT message\n"); |
2814970 | 23:e3422d0d3cc2 | 65 | break; |
2814970 | 23:e3422d0d3cc2 | 66 | } |
2814970 | 23:e3422d0d3cc2 | 67 | } |
icraggs | 2:638c854c0695 | 68 | |
icraggs | 2:638c854c0695 | 69 | int main(int argc, char* argv[]) |
Jan Jongboom |
20:49c9daf2b0ff | 70 | { |
2814970 | 23:e3422d0d3cc2 | 71 | float version = 0.5; |
2814970 | 23:e3422d0d3cc2 | 72 | pc.baud(115200); |
2814970 | 23:e3422d0d3cc2 | 73 | logMessage("MQTT example: version is %.2f\r\n", version); |
2814970 | 23:e3422d0d3cc2 | 74 | wait(0.2); //delay startup |
2814970 | 23:e3422d0d3cc2 | 75 | pc.printf("Resetting ESP8266 Hardware...\r\n"); |
2814970 | 23:e3422d0d3cc2 | 76 | wifiHwResetPin= 0; |
2814970 | 23:e3422d0d3cc2 | 77 | wait_ms(500); |
2814970 | 23:e3422d0d3cc2 | 78 | wifiHwResetPin= 1; |
2814970 | 23:e3422d0d3cc2 | 79 | pc.printf("Starting MQTT example with an ESP8266 wifidevice using MbedOS.\r\n"); |
2814970 | 23:e3422d0d3cc2 | 80 | pc.printf("Attempting to connect to access point...\r\n"); |
Jan Jongboom |
20:49c9daf2b0ff | 81 | |
Jan Jongboom |
20:49c9daf2b0ff | 82 | NetworkInterface* network = easy_connect(true); |
Jan Jongboom |
20:49c9daf2b0ff | 83 | if (!network) { |
2814970 | 23:e3422d0d3cc2 | 84 | pc.printf("Error in east connection\r\n"); |
Jan Jongboom |
20:49c9daf2b0ff | 85 | return -1; |
Jan Jongboom |
20:49c9daf2b0ff | 86 | } |
Jan Jongboom |
20:49c9daf2b0ff | 87 | |
Jan Jongboom |
20:49c9daf2b0ff | 88 | MQTTNetwork mqttNetwork(network); |
Jan Jongboom |
21:a68bd76740f9 | 89 | MQTT::Client<MQTTNetwork, Countdown> client(mqttNetwork); |
2814970 | 23:e3422d0d3cc2 | 90 | |
2814970 | 23:e3422d0d3cc2 | 91 | logMessage("Connecting to %s:%d\r\n", MQTT_BROKER_ADDR, MQTT_BROKER_PORT); |
2814970 | 23:e3422d0d3cc2 | 92 | int rc= mqttNetwork.connect(MQTT_BROKER_ADDR, MQTT_BROKER_PORT); |
Jan Jongboom |
20:49c9daf2b0ff | 93 | |
2814970 | 23:e3422d0d3cc2 | 94 | if (rc!= 0) |
2814970 | 23:e3422d0d3cc2 | 95 | logMessage("rcfrom TCP connect is %d\r\n", rc); |
2814970 | 23:e3422d0d3cc2 | 96 | |
2814970 | 23:e3422d0d3cc2 | 97 | MQTTPacket_connectData data= MQTTPacket_connectData_initializer; |
2814970 | 23:e3422d0d3cc2 | 98 | data.MQTTVersion= 3; |
2814970 | 23:e3422d0d3cc2 | 99 | data.clientID.cstring= "mbed-ljw"; |
2814970 | 23:e3422d0d3cc2 | 100 | data.username.cstring= "user-ljw"; |
2814970 | 23:e3422d0d3cc2 | 101 | data.password.cstring= "testpassword"; |
Jan Jongboom |
20:49c9daf2b0ff | 102 | |
2814970 | 23:e3422d0d3cc2 | 103 | if ((rc= client.connect(data)) != 0) |
2814970 | 23:e3422d0d3cc2 | 104 | logMessage("rcfrom MQTT connect is %d\r\n", rc); |
2814970 | 23:e3422d0d3cc2 | 105 | if ((rc= client.subscribe(topic1, MQTT::QOS0, messageArrived)) != 0) |
2814970 | 23:e3422d0d3cc2 | 106 | logMessage("rcfrom MQTT subscribe is %d\r\n", rc); |
2814970 | 23:e3422d0d3cc2 | 107 | |
2814970 | 23:e3422d0d3cc2 | 108 | int count = 0; |
2814970 | 23:e3422d0d3cc2 | 109 | |
2814970 | 23:e3422d0d3cc2 | 110 | while(1) { |
2814970 | 23:e3422d0d3cc2 | 111 | Thread::wait(1000); |
Jan Jongboom |
20:49c9daf2b0ff | 112 | |
2814970 | 23:e3422d0d3cc2 | 113 | char buf[64]; |
2814970 | 23:e3422d0d3cc2 | 114 | MQTT::Message message; |
2814970 | 23:e3422d0d3cc2 | 115 | |
2814970 | 23:e3422d0d3cc2 | 116 | |
2814970 | 23:e3422d0d3cc2 | 117 | t = sensor.ReadTemperature(CELCIUS); |
icraggs | 2:638c854c0695 | 118 | |
2814970 | 23:e3422d0d3cc2 | 119 | |
2814970 | 23:e3422d0d3cc2 | 120 | |
2814970 | 23:e3422d0d3cc2 | 121 | if (count == 30) { |
2814970 | 23:e3422d0d3cc2 | 122 | pc.printf("Publish: TEMP\r\n"); |
2814970 | 23:e3422d0d3cc2 | 123 | |
2814970 | 23:e3422d0d3cc2 | 124 | sprintf(buf, "{ \"temp\": \"%.1f\"}\r\n", t); |
icraggs | 0:0cae29831d01 | 125 | |
2814970 | 23:e3422d0d3cc2 | 126 | message.qos= MQTT::QOS2; |
2814970 | 23:e3422d0d3cc2 | 127 | message.retained= false; |
2814970 | 23:e3422d0d3cc2 | 128 | message.dup= false; |
2814970 | 23:e3422d0d3cc2 | 129 | message.payload= (void*)buf; |
2814970 | 23:e3422d0d3cc2 | 130 | message.payloadlen= strlen(buf)+1; |
2814970 | 23:e3422d0d3cc2 | 131 | mqttMtx.lock(); |
2814970 | 23:e3422d0d3cc2 | 132 | rc= client.publish(topic2, message); |
2814970 | 23:e3422d0d3cc2 | 133 | mqttMtx.unlock(); |
2814970 | 23:e3422d0d3cc2 | 134 | count = 0; |
2814970 | 23:e3422d0d3cc2 | 135 | |
2814970 | 23:e3422d0d3cc2 | 136 | } |
2814970 | 23:e3422d0d3cc2 | 137 | |
2814970 | 23:e3422d0d3cc2 | 138 | if (flag) { |
2814970 | 23:e3422d0d3cc2 | 139 | pc.printf("Publish: LEDS\r\n"); |
Jan Jongboom |
20:49c9daf2b0ff | 140 | |
2814970 | 23:e3422d0d3cc2 | 141 | if (led2 == 0) |
2814970 | 23:e3422d0d3cc2 | 142 | sprintf(buf, "LED OFF"); |
2814970 | 23:e3422d0d3cc2 | 143 | else |
2814970 | 23:e3422d0d3cc2 | 144 | sprintf(buf, "LED ON"); |
2814970 | 23:e3422d0d3cc2 | 145 | |
2814970 | 23:e3422d0d3cc2 | 146 | message.qos= MQTT::QOS1; |
2814970 | 23:e3422d0d3cc2 | 147 | message.retained= false; |
2814970 | 23:e3422d0d3cc2 | 148 | message.dup= false; |
2814970 | 23:e3422d0d3cc2 | 149 | message.payload= (void*)buf; |
2814970 | 23:e3422d0d3cc2 | 150 | message.payloadlen= strlen(buf)+1; |
Jan Jongboom |
20:49c9daf2b0ff | 151 | |
2814970 | 23:e3422d0d3cc2 | 152 | mqttMtx.lock(); |
2814970 | 23:e3422d0d3cc2 | 153 | rc= client.publish(topic3, message); |
2814970 | 23:e3422d0d3cc2 | 154 | mqttMtx.unlock(); |
2814970 | 23:e3422d0d3cc2 | 155 | flag = false; |
2814970 | 23:e3422d0d3cc2 | 156 | } |
Jan Jongboom |
20:49c9daf2b0ff | 157 | |
2814970 | 23:e3422d0d3cc2 | 158 | if(!client.isConnected()) |
2814970 | 23:e3422d0d3cc2 | 159 | NVIC_SystemReset();// soft reset |
2814970 | 23:e3422d0d3cc2 | 160 | /* yield() needs to be called at least once per keepAliveInterval*/ |
2814970 | 23:e3422d0d3cc2 | 161 | client.yield(10); |
2814970 | 23:e3422d0d3cc2 | 162 | count++; |
2814970 | 23:e3422d0d3cc2 | 163 | } |
icraggs | 0:0cae29831d01 | 164 | return 0; |
icraggs | 0:0cae29831d01 | 165 | } |