This is the part of Connect_Home. It is for MQTT publisher with WIZwiki-W7500. It publishes real time information to MQTT broker and it is controlled from it.

Dependencies:   DHT MQTT WIZnet_Library mbed

Committer:
joon874
Date:
Tue Sep 05 04:20:31 2017 +0000
Revision:
0:7cb36af7fae4
Connect Home project

Who changed what in which revision?

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