Broker https://moodle.kent.ac.uk/2015/pluginfile.php/226454/mod_resource/content/2/co657_assessment_5.pdf
Dependencies: C12832 EthernetInterface MQTT mbed-rtos mbed
main.cpp
- Committer:
- co657_fh98
- Date:
- 2016-01-25
- Revision:
- 1:7f748889f3c9
- Parent:
- 0:c46614e52b7c
File content as of revision 1:7f748889f3c9:
/** CO657 Assessment 5 - Aggregation and Visualisation - SmartPlant https://moodle.kent.ac.uk/2015/mod/resource/view.php?id=190889 Broker Mid Point Device Receives temperature from Xbee and sends to MQTT. Subscribes to commands MQTT and sends any received commands over Xbee. Copyright (C) Frederick Harrington(fh98) and Harry Jones(hj80), University Of Kent 24/01/2016 **/ /** Libraries used **/ #include "mbed.h" #include "C12832.h" #include "PubSubClient.h" #include "EthernetInterface.h" #include <iostream> /** Libraries used **/ C12832 lcd (D11, D13, D12, D7, D10); Serial xbee (D1, D0); EthernetInterface eth; Serial pc (USBTX, USBRX); /** Hardware declarations used **/ char* topicTopic = "unikent/users/fh98/topics"; char* tempTopic = "unikent/users/fh98/a5/plant"; char* commandsTopic = "unikent/users/fh98/a5/commands"; char* clientID = "fh98"; //char* ip = "129.12.3.210"; Not using doughnut. char* ip = "85.119.83.194"; //test.mosquitto.org int port = 1883; //Callback for incoming messages. void callback(char* topic, char* payload, unsigned int len){ lcd.printf("Topic: %s\r\n", topic); lcd.printf("Payload: %s\r\n", payload); xbee.printf(payload); } //MQTT declarations PubSubClient mqtt (ip, port, callback); //Main Method int main() { //Function based declarations. char str[10]={10}; eth.init(); eth.connect(); lcd.printf("Ethernet Working \r\n"); lcd.printf("IP: %s\r\n\r\n", eth.getIPAddress()); lcd.printf("Connecting to: \r\n"); lcd.printf("IP: %s\r\n", ip); lcd.printf("Port: %d\r\n", port); lcd.printf("\r\n"); wait(1.0); lcd.cls(); bool connected = false; int attempts = 10; //While loops and if else for connecting to the MQTT server. while(!connected){ if(!mqtt.connect(clientID)){ lcd.printf("Error connecting to MQTT, try:%d\r\n", attempts); attempts--; } else{ lcd.printf("Connected to MQTT\r\n\r\n"); connected = true; } if(attempts == 0){ lcd.printf("Failed to connect to MQTT, aborting.\r\n"); return -1; } } //Publishing to the topic based topic. char buffer[150]; sprintf(buffer, "%s\n%s\n", tempTopic, commandsTopic); mqtt.publish(topicTopic, buffer); //Subscribe to the commands MQTT topic. mqtt.subscribe(commandsTopic); //Main loop while (true) { //Reading from Xbee. xbee.scanf("%s", str); //LCD display. lcd.cls(); lcd.locate(1,1); lcd.printf("Broker"); lcd.locate(32,12); lcd.printf("Last Published"); lcd.locate(40,21); lcd.printf("%sC", str); //Publish to the temperature topic. mqtt.publish(tempTopic, str); wait(5.0); //Loop the subscribed topics. mqtt.loop(); } }