MQTT Client for Kakao IoT chatbot lecture.

Dependencies:   DHT MQTT WIZnetInterface mbed

Fork of openHAB_mqtt_W7500 by DongEun Koak

Committer:
kaizen
Date:
Tue Dec 29 07:35:33 2015 +0000
Revision:
16:3bd1b60a8a21
Parent:
15:d4604c47da41
Child:
17:d07286cd2088
openHAB Example using WIZwiki-W7500

Who changed what in which revision?

UserRevisionLine numberNew contents of line
justinkim 8:f837e0d255e8 1 #include "mbed.h"
bangbh 9:21574e058141 2 #include "DHT.h"
bangbh 9:21574e058141 3 #include "MQTTEthernet.h"
bangbh 9:21574e058141 4 #include "MQTTClient.h"
justinkim 8:f837e0d255e8 5
justinkim 8:f837e0d255e8 6 #define ECHO_SERVER_PORT 7
justinkim 8:f837e0d255e8 7
bangbh 9:21574e058141 8 #include "mbed.h"
bangbh 9:21574e058141 9
bangbh 9:21574e058141 10 int arrivedcount = 0;
kaizen 16:3bd1b60a8a21 11 DigitalOut sw1(D9);
kaizen 16:3bd1b60a8a21 12 DigitalOut sw2(D10);
kaizen 16:3bd1b60a8a21 13 DigitalOut sw3(D11);
bangbh 9:21574e058141 14
kaizen 16:3bd1b60a8a21 15
kaizen 16:3bd1b60a8a21 16 void sw1_messageArrived(MQTT::MessageData& md)
justinkim 8:f837e0d255e8 17 {
bangbh 9:21574e058141 18 MQTT::Message &message = md.message;
kaizen 16:3bd1b60a8a21 19 printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
kaizen 16:3bd1b60a8a21 20
kaizen 16:3bd1b60a8a21 21 if( strncmp((char*)message.payload,"1",message.payloadlen) == 0 ){
kaizen 16:3bd1b60a8a21 22 sw1 = 1;
kaizen 16:3bd1b60a8a21 23 } else{
kaizen 16:3bd1b60a8a21 24 sw1 = 0;
kaizen 16:3bd1b60a8a21 25 }
kaizen 16:3bd1b60a8a21 26 }
kaizen 16:3bd1b60a8a21 27
kaizen 16:3bd1b60a8a21 28 void sw2_messageArrived(MQTT::MessageData& md)
kaizen 16:3bd1b60a8a21 29 {
kaizen 16:3bd1b60a8a21 30 MQTT::Message &message = md.message;
kaizen 16:3bd1b60a8a21 31 printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
kaizen 16:3bd1b60a8a21 32 if( strncmp((char*)message.payload,"1",message.payloadlen) == 0 ){
kaizen 16:3bd1b60a8a21 33 sw2 = 1;
kaizen 16:3bd1b60a8a21 34 } else{
kaizen 16:3bd1b60a8a21 35 sw2 = 0;
kaizen 16:3bd1b60a8a21 36 }
kaizen 16:3bd1b60a8a21 37 }
kaizen 16:3bd1b60a8a21 38
kaizen 16:3bd1b60a8a21 39 void sw3_messageArrived(MQTT::MessageData& md)
kaizen 16:3bd1b60a8a21 40 {
kaizen 16:3bd1b60a8a21 41 MQTT::Message &message = md.message;
kaizen 16:3bd1b60a8a21 42 printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\r\n", message.qos, message.retained, message.dup, message.id);
kaizen 16:3bd1b60a8a21 43 if( strncmp((char*)message.payload,"1",message.payloadlen) == 0 ){
kaizen 16:3bd1b60a8a21 44 sw3 = 1;
kaizen 16:3bd1b60a8a21 45 } else{
kaizen 16:3bd1b60a8a21 46 sw3 = 0;
kaizen 16:3bd1b60a8a21 47 }
bangbh 9:21574e058141 48 }
bangbh 9:21574e058141 49
bangbh 9:21574e058141 50 void baud(int baudrate) {
bangbh 9:21574e058141 51 Serial s(USBTX, USBRX);
bangbh 9:21574e058141 52 s.baud(baudrate);
bangbh 9:21574e058141 53 }
bangbh 9:21574e058141 54
bangbh 9:21574e058141 55 int main (void)
bangbh 9:21574e058141 56 {
bangbh 9:21574e058141 57 DHT sensor(D4, DHT11);
kaizen 16:3bd1b60a8a21 58 sw1 = 0; sw2 = 0; sw3 = 0;
bangbh 9:21574e058141 59 baud(115200);
justinkim 8:f837e0d255e8 60 printf("Wait a second...\r\n");
kaizen 16:3bd1b60a8a21 61
bangbh 9:21574e058141 62 MQTTEthernet ipstack = MQTTEthernet();
kaizen 16:3bd1b60a8a21 63 printf("IP Address : %s\r\n",ipstack.getEth().getIPAddress());
bangbh 9:21574e058141 64 MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
bangbh 9:21574e058141 65
kaizen 16:3bd1b60a8a21 66 char* hostname = "192.168.0.100";
bangbh 9:21574e058141 67 int port = 1883;
bangbh 9:21574e058141 68
bangbh 9:21574e058141 69 int rc = ipstack.connect(hostname, port);
bangbh 9:21574e058141 70 if (rc != 0)
kaizen 16:3bd1b60a8a21 71 {
bangbh 9:21574e058141 72 printf("rc from TCP connect is %d\n", rc);
kaizen 16:3bd1b60a8a21 73 return 0;
kaizen 16:3bd1b60a8a21 74 }
kaizen 16:3bd1b60a8a21 75 printf("TCP connection is successful\r\n");
bangbh 9:21574e058141 76
bangbh 15:d4604c47da41 77 char MQTTClientID[30];
justinkim 8:f837e0d255e8 78
bangbh 9:21574e058141 79 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
bangbh 9:21574e058141 80 data.MQTTVersion = 3;
bangbh 15:d4604c47da41 81 sprintf(MQTTClientID,"WIZwiki-W7500-client-%d",rand()%1000);
bangbh 15:d4604c47da41 82 data.clientID.cstring = MQTTClientID;
kaizen 16:3bd1b60a8a21 83 data.username.cstring = "";
kaizen 16:3bd1b60a8a21 84 data.password.cstring = "";
kaizen 16:3bd1b60a8a21 85
kaizen 16:3bd1b60a8a21 86 if ((rc = client.connect(data)) != 0)
kaizen 16:3bd1b60a8a21 87 {
kaizen 16:3bd1b60a8a21 88 printf("rc from MQTT connect is %d\r\n", rc);
kaizen 16:3bd1b60a8a21 89 return 0;
kaizen 16:3bd1b60a8a21 90 }
kaizen 16:3bd1b60a8a21 91 printf("MQTT connection is successful\r\n");
bangbh 9:21574e058141 92
bangbh 9:21574e058141 93
kaizen 16:3bd1b60a8a21 94 char *sw1 = "/wiznet/sw1";
kaizen 16:3bd1b60a8a21 95 if ((rc = client.subscribe(sw1, MQTT::QOS1, sw1_messageArrived)) != 0)
kaizen 16:3bd1b60a8a21 96 {
kaizen 16:3bd1b60a8a21 97 printf("rc from MQTT subscribe is %d\r\n", rc);
kaizen 16:3bd1b60a8a21 98 return 0;
kaizen 16:3bd1b60a8a21 99 }
kaizen 16:3bd1b60a8a21 100 printf("Added subscription for sw1\r\n");
kaizen 16:3bd1b60a8a21 101
kaizen 16:3bd1b60a8a21 102 char *sw2 = "/wiznet/sw2";
kaizen 16:3bd1b60a8a21 103 if ((rc = client.subscribe(sw2, MQTT::QOS1, sw2_messageArrived)) != 0)
kaizen 16:3bd1b60a8a21 104 {
kaizen 16:3bd1b60a8a21 105 printf("rc from MQTT subscribe is %d\r\n", rc);
kaizen 16:3bd1b60a8a21 106 return 0;
kaizen 16:3bd1b60a8a21 107 }
kaizen 16:3bd1b60a8a21 108 printf("Added subscription for sw2\r\n");
kaizen 16:3bd1b60a8a21 109
kaizen 16:3bd1b60a8a21 110 char *sw3 = "/wiznet/sw3";
kaizen 16:3bd1b60a8a21 111 if ((rc = client.subscribe(sw3, MQTT::QOS1, sw3_messageArrived)) != 0)
kaizen 16:3bd1b60a8a21 112 {
kaizen 16:3bd1b60a8a21 113 printf("rc from MQTT subscribe is %d\r\n", rc);
kaizen 16:3bd1b60a8a21 114 return 0;
kaizen 16:3bd1b60a8a21 115 }
kaizen 16:3bd1b60a8a21 116 printf("Added subscription for sw3\r\n");
kaizen 16:3bd1b60a8a21 117
bangbh 9:21574e058141 118 MQTT::Message message;
bangbh 9:21574e058141 119 char buf[100];
bangbh 9:21574e058141 120 int error = 0;
bangbh 9:21574e058141 121 float hum = 0.0f, temp = 0.0f;
bangbh 13:36456500fb7e 122 char i = 0;
bangbh 13:36456500fb7e 123 while (true)
justinkim 8:f837e0d255e8 124 {
bangbh 13:36456500fb7e 125 if(i > 100) i = 0;
bangbh 9:21574e058141 126 error = sensor.readData();
bangbh 9:21574e058141 127 if (0 == error) {
bangbh 9:21574e058141 128 hum = sensor.ReadHumidity();
bangbh 9:21574e058141 129 temp = sensor.ReadTemperature(CELCIUS);
justinkim 8:f837e0d255e8 130 }
kaizen 16:3bd1b60a8a21 131 message.qos = MQTT::QOS1;
bangbh 9:21574e058141 132 message.retained = false;
bangbh 9:21574e058141 133 message.dup = false;
bangbh 13:36456500fb7e 134
bangbh 13:36456500fb7e 135 sprintf(buf, "%3.1f", hum);
bangbh 9:21574e058141 136 message.payload = (void*)buf;
bangbh 13:36456500fb7e 137 message.payloadlen = strlen(buf);
kaizen 16:3bd1b60a8a21 138 rc = client.publish("/wiznet/humidity",message);
kaizen 16:3bd1b60a8a21 139 printf("publish humidity data %s\r\n",(char*)message.payload);
bangbh 13:36456500fb7e 140
bangbh 9:21574e058141 141 sprintf(buf, "%3.1f", temp);
bangbh 9:21574e058141 142 message.payload = (void*)buf;
bangbh 13:36456500fb7e 143 message.payloadlen = strlen(buf);
kaizen 16:3bd1b60a8a21 144 rc = client.publish("/wiznet/temperature", message);
kaizen 16:3bd1b60a8a21 145 printf("publish temperature data %s\r\n",(char*)message.payload);
bangbh 13:36456500fb7e 146
kaizen 16:3bd1b60a8a21 147 client.yield(60000);
justinkim 8:f837e0d255e8 148 }
justinkim 8:f837e0d255e8 149 }
justinkim 8:f837e0d255e8 150