MQTT_Ethernet

Dependencies:   DHT MQTT WIZnetInterface mbed-src

Fork of MQTTw7500 by James Bruce

Committer:
wiznetw7500
Date:
Mon Jun 04 09:26:45 2018 +0000
Revision:
13:20ede19a43cd
Parent:
12:4f0489448955
MQTT_Ethernet

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wiznetw7500 13:20ede19a43cd 1 //Test of cheap 13.56 Mhz RFID-RC522 module from eBay
wiznetw7500 13:20ede19a43cd 2 //This code is based on Martin Olejar's MFRC522 library. Minimal changes
wiznetw7500 13:20ede19a43cd 3 //Adapted for Nucleo STM32 F401RE. Should work on other Nucleos too
wiznetw7500 13:20ede19a43cd 4
wiznetw7500 13:20ede19a43cd 5 //----------------------------------------
wiznetw7500 13:20ede19a43cd 6
justinkim 8:f837e0d255e8 7 #include "mbed.h"
bangbh 9:21574e058141 8 #include "DHT.h"
bangbh 9:21574e058141 9 #include "MQTTEthernet.h"
bangbh 9:21574e058141 10 #include "MQTTClient.h"
wiznetw7500 13:20ede19a43cd 11 #include <sstream>
wiznetw7500 13:20ede19a43cd 12 #include <string>
justinkim 8:f837e0d255e8 13 #define ECHO_SERVER_PORT 7
wiznetw7500 13:20ede19a43cd 14
wiznetw7500 13:20ede19a43cd 15 Serial out(USBTX,USBRX);
bangbh 9:21574e058141 16 int arrivedcount = 0;
wiznetw7500 13:20ede19a43cd 17
bangbh 9:21574e058141 18 void messageArrived(MQTT::MessageData& md)
justinkim 8:f837e0d255e8 19 {
bangbh 9:21574e058141 20 MQTT::Message &message = md.message;
bangbh 9:21574e058141 21 printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
bangbh 9:21574e058141 22 printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
bangbh 9:21574e058141 23 ++arrivedcount;
bangbh 9:21574e058141 24 }
bangbh 9:21574e058141 25
wiznetw7500 13:20ede19a43cd 26 void baud(int baudrate)
wiznetw7500 13:20ede19a43cd 27 {
bangbh 9:21574e058141 28 Serial s(USBTX, USBRX);
bangbh 9:21574e058141 29 s.baud(baudrate);
bangbh 9:21574e058141 30 }
bangbh 9:21574e058141 31
wiznetw7500 13:20ede19a43cd 32
wiznetw7500 13:20ede19a43cd 33 char* store_buf;
wiznetw7500 13:20ede19a43cd 34 unsigned long lastConnectionTime = 0;
wiznetw7500 13:20ede19a43cd 35 const unsigned long postingInterval = 20L * 1000L;
wiznetw7500 13:20ede19a43cd 36
wiznetw7500 13:20ede19a43cd 37
wiznetw7500 13:20ede19a43cd 38 int main(void)
bangbh 9:21574e058141 39 {
bangbh 9:21574e058141 40 DHT sensor(D4, DHT11);
wiznetw7500 13:20ede19a43cd 41 printf("starting...\n");
wiznetw7500 13:20ede19a43cd 42
bangbh 9:21574e058141 43 MQTTEthernet ipstack = MQTTEthernet();
wiznetw7500 13:20ede19a43cd 44 //printf("setting up mqtt ethernet");
wiznetw7500 13:20ede19a43cd 45
wiznetw7500 13:20ede19a43cd 46 while (true) {
wiznetw7500 13:20ede19a43cd 47 if(store_buf[0]=='\0') {
wiznetw7500 13:20ede19a43cd 48 MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
wiznetw7500 13:20ede19a43cd 49
wiznetw7500 13:20ede19a43cd 50 char* hostname = "mqtt.thingspeak.com";
wiznetw7500 13:20ede19a43cd 51 int port = 1883;
wiznetw7500 13:20ede19a43cd 52
wiznetw7500 13:20ede19a43cd 53
wiznetw7500 13:20ede19a43cd 54
wiznetw7500 13:20ede19a43cd 55 int rc = ipstack.connect(hostname, port);
wiznetw7500 13:20ede19a43cd 56
wiznetw7500 13:20ede19a43cd 57 out.printf("rc from TCP connect is %d\n", rc);
wiznetw7500 13:20ede19a43cd 58
wiznetw7500 13:20ede19a43cd 59 if (rc != 0)
wiznetw7500 13:20ede19a43cd 60 out.printf("rc from TCP connect is %d\n", rc);
bangbh 9:21574e058141 61
wiznetw7500 13:20ede19a43cd 62 char MQTTClientID[30];
wiznetw7500 13:20ede19a43cd 63
wiznetw7500 13:20ede19a43cd 64 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
wiznetw7500 13:20ede19a43cd 65 data.MQTTVersion = 3;
wiznetw7500 13:20ede19a43cd 66 sprintf(MQTTClientID,"WIZwikiW7500mqttclient%d",rand()%1000);
wiznetw7500 13:20ede19a43cd 67 data.clientID.cstring = MQTTClientID;
wiznetw7500 13:20ede19a43cd 68 data.username.cstring = "tsmqtttuser";
wiznetw7500 13:20ede19a43cd 69 data.password.cstring = "tsmqtttpasswrd";
wiznetw7500 13:20ede19a43cd 70
wiznetw7500 13:20ede19a43cd 71 data.writeapikey.cstring = "tsmqtttpasswrd";
wiznetw7500 13:20ede19a43cd 72 data.channelid.cstring = "tsmqtttpasswrd";
wiznetw7500 13:20ede19a43cd 73
wiznetw7500 13:20ede19a43cd 74
wiznetw7500 13:20ede19a43cd 75
wiznetw7500 13:20ede19a43cd 76 if ((rc = client.connect(data)) != 0)
wiznetw7500 13:20ede19a43cd 77 printf("rc from MQTT connect is %d\n", rc);
wiznetw7500 13:20ede19a43cd 78
wiznetw7500 13:20ede19a43cd 79 MQTT::Message message;
wiznetw7500 13:20ede19a43cd 80
bangbh 9:21574e058141 81 char buf[100];
bangbh 9:21574e058141 82 int error = 0;
bangbh 9:21574e058141 83 float hum = 0.0f, temp = 0.0f;
wiznetw7500 13:20ede19a43cd 84 char i = 0;
wiznetw7500 13:20ede19a43cd 85 while (true)
justinkim 8:f837e0d255e8 86 {
wiznetw7500 13:20ede19a43cd 87 if(i > 100) i = 0;
bangbh 9:21574e058141 88 error = sensor.readData();
bangbh 9:21574e058141 89 if (0 == error) {
bangbh 9:21574e058141 90 hum = sensor.ReadHumidity();
bangbh 9:21574e058141 91 temp = sensor.ReadTemperature(CELCIUS);
wiznetw7500 13:20ede19a43cd 92 }
bangbh 9:21574e058141 93 message.qos = MQTT::QOS0;
bangbh 9:21574e058141 94 message.retained = false;
bangbh 9:21574e058141 95 message.dup = false;
wiznetw7500 13:20ede19a43cd 96
wiznetw7500 13:20ede19a43cd 97 f (millis() - lastConnectionTime > postingInterval)
wiznetw7500 13:20ede19a43cd 98 {
wiznetw7500 13:20ede19a43cd 99
wiznetw7500 13:20ede19a43cd 100
wiznetw7500 13:20ede19a43cd 101
wiznetw7500 13:20ede19a43cd 102 sprintf(buf, "%3.1f", hum);
bangbh 9:21574e058141 103 message.payload = (void*)buf;
jamesabruce 12:4f0489448955 104 message.payloadlen = strlen(buf);
wiznetw7500 13:20ede19a43cd 105 rc = client.publish("/wiznet/humidity17",message);
wiznetw7500 13:20ede19a43cd 106 printf("publish humidity data %s\r\n",(char*)message.payload);
wiznetw7500 13:20ede19a43cd 107
bangbh 9:21574e058141 108 sprintf(buf, "%3.1f", temp);
bangbh 9:21574e058141 109 message.payload = (void*)buf;
jamesabruce 12:4f0489448955 110 message.payloadlen = strlen(buf);
wiznetw7500 13:20ede19a43cd 111 rc = client.publish("/wiznet/temperature17", message);
wiznetw7500 13:20ede19a43cd 112 printf("publish temperature data %s\r\n",(char*)message.payload);
wiznetw7500 13:20ede19a43cd 113
jamesabruce 12:4f0489448955 114
wiznetw7500 13:20ede19a43cd 115 lastConnectionTime = millis();
wiznetw7500 13:20ede19a43cd 116 /*
wiznetw7500 13:20ede19a43cd 117 if (millis() - lastConnectionTime > postingInterval)
wiznetw7500 13:20ede19a43cd 118 {
wiznetw7500 13:20ede19a43cd 119
wiznetw7500 13:20ede19a43cd 120 // do publish operation
wiznetw7500 13:20ede19a43cd 121
wiznetw7500 13:20ede19a43cd 122
wiznetw7500 13:20ede19a43cd 123 Use this function to publish to a single field directly.
wiznetw7500 13:20ede19a43cd 124
wiznetw7500 13:20ede19a43cd 125 void mqttpublish() {
wiznetw7500 13:20ede19a43cd 126
wiznetw7500 13:20ede19a43cd 127 float t = dht.readTemperature(true); // Read temperature from DHT sensor.
wiznetw7500 13:20ede19a43cd 128
wiznetw7500 13:20ede19a43cd 129 String data = String(t, DEC);
wiznetw7500 13:20ede19a43cd 130 int length = data.length();
wiznetw7500 13:20ede19a43cd 131 char msgBuffer[length];
wiznetw7500 13:20ede19a43cd 132 data.toCharArray(msgBuffer,length+1);
wiznetw7500 13:20ede19a43cd 133 printf(msgBuffer);
wiznetw7500 13:20ede19a43cd 134
wiznetw7500 13:20ede19a43cd 135 // Create a topic string and publish data to ThingSpeak channel feed.
wiznetw7500 13:20ede19a43cd 136 String topicString ="channels/" + String( channelID ) + "/publish/"+String(writeAPIKey);
wiznetw7500 13:20ede19a43cd 137 length=topicString.length();
wiznetw7500 13:20ede19a43cd 138 char topicBuffer[length];
wiznetw7500 13:20ede19a43cd 139 topicString.toCharArray(topicBuffer,length+1);
wiznetw7500 13:20ede19a43cd 140
wiznetw7500 13:20ede19a43cd 141 mqttClient.publish( topicBuffer, msgBuffer );
wiznetw7500 13:20ede19a43cd 142
wiznetw7500 13:20ede19a43cd 143 lastConnectionTime = millis();
wiznetw7500 13:20ede19a43cd 144 }
wiznetw7500 13:20ede19a43cd 145
wiznetw7500 13:20ede19a43cd 146 }
wiznetw7500 13:20ede19a43cd 147
wiznetw7500 13:20ede19a43cd 148 */
wiznetw7500 13:20ede19a43cd 149
wiznetw7500 13:20ede19a43cd 150 wait_ms(3000);
wiznetw7500 13:20ede19a43cd 151
wiznetw7500 13:20ede19a43cd 152 }
wiznetw7500 13:20ede19a43cd 153 }
wiznetw7500 13:20ede19a43cd 154
justinkim 8:f837e0d255e8 155 }
wiznetw7500 13:20ede19a43cd 156 }