This is the first stage and sends data (temp, humidity) to mqtt server.
Dependencies: EthernetInterface MQTT RHT03 mbed-rtos mbed
main.cpp@0:7c734e5f2c45, 2014-05-22 (annotated)
- Committer:
- charliebsimms
- Date:
- Thu May 22 08:35:33 2014 +0000
- Revision:
- 0:7c734e5f2c45
The project aim is to develop a beehive environment monitoring system publishing data to a mqtt server.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
charliebsimms | 0:7c734e5f2c45 | 1 | #include "mbed.h" |
charliebsimms | 0:7c734e5f2c45 | 2 | #include "EthernetInterface.h" |
charliebsimms | 0:7c734e5f2c45 | 3 | #include "PubSubClient.h" |
charliebsimms | 0:7c734e5f2c45 | 4 | #include "RHT03.h" |
charliebsimms | 0:7c734e5f2c45 | 5 | #include <iostream> |
charliebsimms | 0:7c734e5f2c45 | 6 | #include <sstream> |
charliebsimms | 0:7c734e5f2c45 | 7 | #include <string> |
charliebsimms | 0:7c734e5f2c45 | 8 | #include <iomanip> |
charliebsimms | 0:7c734e5f2c45 | 9 | |
charliebsimms | 0:7c734e5f2c45 | 10 | Serial pc(USBTX, USBRX); |
charliebsimms | 0:7c734e5f2c45 | 11 | DigitalOut myled(LED1); |
charliebsimms | 0:7c734e5f2c45 | 12 | |
charliebsimms | 0:7c734e5f2c45 | 13 | char* serverIpAddr = "192.168.1.2"; |
charliebsimms | 0:7c734e5f2c45 | 14 | int port = 1883; |
charliebsimms | 0:7c734e5f2c45 | 15 | |
charliebsimms | 0:7c734e5f2c45 | 16 | |
charliebsimms | 0:7c734e5f2c45 | 17 | void callback(char* topic, char* payload, unsigned int len); |
charliebsimms | 0:7c734e5f2c45 | 18 | PubSubClient mqtt(serverIpAddr, port, callback); |
charliebsimms | 0:7c734e5f2c45 | 19 | EthernetInterface eth; |
charliebsimms | 0:7c734e5f2c45 | 20 | |
charliebsimms | 0:7c734e5f2c45 | 21 | void callback(char* topic, char* payload, unsigned int len) |
charliebsimms | 0:7c734e5f2c45 | 22 | { |
charliebsimms | 0:7c734e5f2c45 | 23 | printf("Topic: %s\r\n", topic); |
charliebsimms | 0:7c734e5f2c45 | 24 | printf("Payload: %s\r\n\r\n", payload); |
charliebsimms | 0:7c734e5f2c45 | 25 | |
charliebsimms | 0:7c734e5f2c45 | 26 | //Send incoming payloads back to topic. |
charliebsimms | 0:7c734e5f2c45 | 27 | //mqtt.publish("mbed/mybehive", payload, len); |
charliebsimms | 0:7c734e5f2c45 | 28 | } |
charliebsimms | 0:7c734e5f2c45 | 29 | |
charliebsimms | 0:7c734e5f2c45 | 30 | int main() { |
charliebsimms | 0:7c734e5f2c45 | 31 | |
charliebsimms | 0:7c734e5f2c45 | 32 | float temp,hum; |
charliebsimms | 0:7c734e5f2c45 | 33 | RHT03 humtemp(p24); |
charliebsimms | 0:7c734e5f2c45 | 34 | string var; |
charliebsimms | 0:7c734e5f2c45 | 35 | |
charliebsimms | 0:7c734e5f2c45 | 36 | printf("\r\nMQTTClient Tester\r\n"); |
charliebsimms | 0:7c734e5f2c45 | 37 | eth.init(); //Use DHCP |
charliebsimms | 0:7c734e5f2c45 | 38 | eth.connect(); |
charliebsimms | 0:7c734e5f2c45 | 39 | |
charliebsimms | 0:7c734e5f2c45 | 40 | printf("IP Address is %s\n\r", eth.getIPAddress()); |
charliebsimms | 0:7c734e5f2c45 | 41 | |
charliebsimms | 0:7c734e5f2c45 | 42 | char clientID[] = "charlie"; /*Client nanme show for MQTT server*/ |
charliebsimms | 0:7c734e5f2c45 | 43 | char pub_topic[] = "mbed/mybehive"; /*Publish to topic : "/mbed" */ |
charliebsimms | 0:7c734e5f2c45 | 44 | |
charliebsimms | 0:7c734e5f2c45 | 45 | |
charliebsimms | 0:7c734e5f2c45 | 46 | if(!mqtt.connect(clientID)){ |
charliebsimms | 0:7c734e5f2c45 | 47 | pc.printf("\r\nConnect to server failed ..\r\n"); |
charliebsimms | 0:7c734e5f2c45 | 48 | return -1; |
charliebsimms | 0:7c734e5f2c45 | 49 | } |
charliebsimms | 0:7c734e5f2c45 | 50 | |
charliebsimms | 0:7c734e5f2c45 | 51 | printf("\r\nConnect to server sucessed ..\r\n"); |
charliebsimms | 0:7c734e5f2c45 | 52 | |
charliebsimms | 0:7c734e5f2c45 | 53 | while(1) { |
charliebsimms | 0:7c734e5f2c45 | 54 | mqtt.loop(); |
charliebsimms | 0:7c734e5f2c45 | 55 | myled = 1; |
charliebsimms | 0:7c734e5f2c45 | 56 | wait(3); |
charliebsimms | 0:7c734e5f2c45 | 57 | |
charliebsimms | 0:7c734e5f2c45 | 58 | pc.printf("Read temperature\n\r"); |
charliebsimms | 0:7c734e5f2c45 | 59 | if(humtemp.readData() == RHT_ERROR_NONE) |
charliebsimms | 0:7c734e5f2c45 | 60 | { |
charliebsimms | 0:7c734e5f2c45 | 61 | //Gets the current temperature in centigrade |
charliebsimms | 0:7c734e5f2c45 | 62 | temp = humtemp.getTemperatureC(); |
charliebsimms | 0:7c734e5f2c45 | 63 | //Gets the current humidity in percentage |
charliebsimms | 0:7c734e5f2c45 | 64 | hum = humtemp.getHumidity(); |
charliebsimms | 0:7c734e5f2c45 | 65 | |
charliebsimms | 0:7c734e5f2c45 | 66 | stringstream oss; |
charliebsimms | 0:7c734e5f2c45 | 67 | oss << "{" << "\"temperature\":" << std::setprecision(4) << temp << "," << "\"humidity\":" << std::setprecision(4) << hum << "}"; |
charliebsimms | 0:7c734e5f2c45 | 68 | |
charliebsimms | 0:7c734e5f2c45 | 69 | string data = oss.str(); |
charliebsimms | 0:7c734e5f2c45 | 70 | pc.printf("temperature is %f\n\r", temp); |
charliebsimms | 0:7c734e5f2c45 | 71 | pc.printf("humidity is %f\n\r\n\r", hum); |
charliebsimms | 0:7c734e5f2c45 | 72 | pc.printf("environment is %s\n\r\n\r", data.c_str()); |
charliebsimms | 0:7c734e5f2c45 | 73 | char * value = new char [37]; |
charliebsimms | 0:7c734e5f2c45 | 74 | strcpy(value, data.c_str()); |
charliebsimms | 0:7c734e5f2c45 | 75 | mqtt.publish(pub_topic, value); |
charliebsimms | 0:7c734e5f2c45 | 76 | } |
charliebsimms | 0:7c734e5f2c45 | 77 | myled = 0; |
charliebsimms | 0:7c734e5f2c45 | 78 | wait(3); |
charliebsimms | 0:7c734e5f2c45 | 79 | } |
charliebsimms | 0:7c734e5f2c45 | 80 | } |