Duy tran / Mbed OS iot_water_monitor_v2

Dependencies:   easy-connect-v16 Watchdog FP MQTTPacket RecordType-v-16 watersenor_and_temp_code

Committer:
DuyLionTran
Date:
Fri Dec 29 05:23:12 2017 +0000
Revision:
21:1a63f4eaae14
Parent:
19:fbc21a964938
Child:
23:65cd2b5c76d5
version 1.7.5

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DuyLionTran 1:e7a545497bca 1 /***************************************************************
DuyLionTran 0:24bec4d463a5 2 * Includes
DuyLionTran 1:e7a545497bca 3 ***************************************************************/
DuyLionTran 0:24bec4d463a5 4 #include "mbed.h"
DuyLionTran 17:b89d884eb609 5
DuyLionTran 15:7ba48f016569 6 #include "ReadSensor.h"
DuyLionTran 15:7ba48f016569 7 #include "SimpleMQTT.h"
DuyLionTran 0:24bec4d463a5 8
DuyLionTran 1:e7a545497bca 9 /***************************************************************
DuyLionTran 1:e7a545497bca 10 * Definitions
DuyLionTran 1:e7a545497bca 11 ***************************************************************/
DuyLionTran 0:24bec4d463a5 12 #define RELAY_1_PIN (D11)
DuyLionTran 0:24bec4d463a5 13 #define RELAY_2_PIN (D12)
DuyLionTran 1:e7a545497bca 14
DuyLionTran 1:e7a545497bca 15 /***************************************************************
DuyLionTran 0:24bec4d463a5 16 * Variables
DuyLionTran 1:e7a545497bca 17 ***************************************************************/
DuyLionTran 11:3802c82a5ae9 18 uint32_t lastRead = 0;
DuyLionTran 19:fbc21a964938 19 uint32_t uploadInterval = 5+1;
DuyLionTran 21:1a63f4eaae14 20 struct UploadValue dataStruct;
DuyLionTran 3:1bc26dfb6d35 21
DuyLionTran 8:844796296dea 22 /* Analog Handles */
DuyLionTran 9:268373df20d7 23 float ADC_PHVal;
DuyLionTran 9:268373df20d7 24 float ADC_DOVal;
DuyLionTran 8:844796296dea 25
DuyLionTran 7:6fa70270f05f 26 /***************************************************************
DuyLionTran 7:6fa70270f05f 27 * Structs/Classess
DuyLionTran 7:6fa70270f05f 28 ***************************************************************/
DuyLionTran 14:0129ac8844ee 29 static Serial pc(SERIAL_TX, SERIAL_RX);
DuyLionTran 1:e7a545497bca 30
DuyLionTran 11:3802c82a5ae9 31 DigitalOut myled(LED1);
DuyLionTran 8:844796296dea 32
DuyLionTran 11:3802c82a5ae9 33 Timer timer;
DuyLionTran 1:e7a545497bca 34 /***************************************************************
DuyLionTran 7:6fa70270f05f 35 * Unity function definitions
DuyLionTran 1:e7a545497bca 36 ***************************************************************/
DuyLionTran 17:b89d884eb609 37
DuyLionTran 1:e7a545497bca 38 /***************************************************************
DuyLionTran 7:6fa70270f05f 39 * Unity function declarations
DuyLionTran 11:3802c82a5ae9 40 ***************************************************************/
DuyLionTran 7:6fa70270f05f 41
DuyLionTran 11:3802c82a5ae9 42
DuyLionTran 9:268373df20d7 43
DuyLionTran 1:e7a545497bca 44 /***************************************************************
DuyLionTran 0:24bec4d463a5 45 * Main
DuyLionTran 11:3802c82a5ae9 46 ***************************************************************/
DuyLionTran 11:3802c82a5ae9 47 int main() {
DuyLionTran 14:0129ac8844ee 48 pc.baud(115200);
DuyLionTran 11:3802c82a5ae9 49 timer.start();
DuyLionTran 11:3802c82a5ae9 50 lastRead = 0;
DuyLionTran 17:b89d884eb609 51 // set_time(1513125870);
DuyLionTran 14:0129ac8844ee 52 pc.printf("\r\nX-NUCLEO-IDW01M1 mbed Application\r\n");
DuyLionTran 14:0129ac8844ee 53 pc.printf("\r\nconnecting to AP\r\n");
DuyLionTran 11:3802c82a5ae9 54
DuyLionTran 11:3802c82a5ae9 55 NetworkInterface* network = easy_connect(true);
DuyLionTran 11:3802c82a5ae9 56 if (!network) {
DuyLionTran 11:3802c82a5ae9 57 printf ("Error easy_connect\n\r");
DuyLionTran 11:3802c82a5ae9 58 }
DuyLionTran 11:3802c82a5ae9 59 MQTTNetwork mqttNetwork(network);
DuyLionTran 19:fbc21a964938 60 MQTT::Client<MQTTNetwork, Countdown, MQTT_MAX_PACKET_SIZE> client(mqttNetwork);
DuyLionTran 11:3802c82a5ae9 61 printf ("ATTEMPT CONNECT\n\r");
DuyLionTran 15:7ba48f016569 62 MQTT_AttemptConnect(&client, &mqttNetwork, network);
DuyLionTran 19:fbc21a964938 63 if (connack_rc == MQTT_NOT_AUTHORIZED || connack_rc == MQTT_BAD_USERNAME_OR_PASSWORD) {
DuyLionTran 11:3802c82a5ae9 64 printf ("---ERROR line : %d\n\r", __LINE__);
DuyLionTran 11:3802c82a5ae9 65 while (true)
DuyLionTran 11:3802c82a5ae9 66 wait(1.0); // Permanent failures - don't retry
DuyLionTran 11:3802c82a5ae9 67 }
DuyLionTran 11:3802c82a5ae9 68
DuyLionTran 14:0129ac8844ee 69 myled=1;
DuyLionTran 11:3802c82a5ae9 70 while (true) {
DuyLionTran 14:0129ac8844ee 71 time_t seconds = time(NULL);
DuyLionTran 17:b89d884eb609 72 ADC_PHVal = SENSOR_ReadPHADC();
DuyLionTran 19:fbc21a964938 73 if(connected == true) {
DuyLionTran 11:3802c82a5ae9 74 if ((uint32_t)(timer.read() - lastRead) >= uploadInterval) { // Publish a message every 3 second
DuyLionTran 19:fbc21a964938 75 if (MQTT_PublishADC(&client, seconds, ADC_PHVal) == MQTT::SUCCESS) {
DuyLionTran 19:fbc21a964938 76 wait(0.1);
DuyLionTran 19:fbc21a964938 77 if (MQTT_PublishRelayState(&client, seconds, 1, 1) == MQTT::SUCCESS) {
DuyLionTran 19:fbc21a964938 78 myled = 1;
DuyLionTran 19:fbc21a964938 79 commandID++;
DuyLionTran 19:fbc21a964938 80 }
DuyLionTran 19:fbc21a964938 81 else {
DuyLionTran 19:fbc21a964938 82 myled=0;
DuyLionTran 19:fbc21a964938 83 client.disconnect();
DuyLionTran 19:fbc21a964938 84 mqttNetwork.disconnect();
DuyLionTran 19:fbc21a964938 85 MQTT_AttemptConnect(&client, &mqttNetwork, network); // if we have lost the connection
DuyLionTran 19:fbc21a964938 86 }
DuyLionTran 19:fbc21a964938 87 }
DuyLionTran 19:fbc21a964938 88 else {
DuyLionTran 11:3802c82a5ae9 89 myled=0;
DuyLionTran 11:3802c82a5ae9 90 client.disconnect();
DuyLionTran 11:3802c82a5ae9 91 mqttNetwork.disconnect();
DuyLionTran 19:fbc21a964938 92 MQTT_AttemptConnect(&client, &mqttNetwork, network); // if we have lost the connection
DuyLionTran 19:fbc21a964938 93
DuyLionTran 19:fbc21a964938 94 }
DuyLionTran 19:fbc21a964938 95 if ((commandID % 50) == 0) {
DuyLionTran 19:fbc21a964938 96 timer.reset();
DuyLionTran 11:3802c82a5ae9 97 }
DuyLionTran 19:fbc21a964938 98 lastRead = timer.read();
DuyLionTran 11:3802c82a5ae9 99 }
DuyLionTran 11:3802c82a5ae9 100 client.yield(500); // allow the MQTT client to receive subscribe messages and manage keep alive
DuyLionTran 19:fbc21a964938 101 }
DuyLionTran 19:fbc21a964938 102 else if (connected == false) {
DuyLionTran 11:3802c82a5ae9 103 connected = true;
DuyLionTran 19:fbc21a964938 104 }
DuyLionTran 19:fbc21a964938 105 else {
DuyLionTran 11:3802c82a5ae9 106 wait(0.5);
DuyLionTran 11:3802c82a5ae9 107 }
DuyLionTran 11:3802c82a5ae9 108 }
DuyLionTran 1:e7a545497bca 109 }
DuyLionTran 11:3802c82a5ae9 110