Duy tran / Mbed OS iot_water_monitor_v2

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

Committer:
Duy Tran@DESKTOP-0RPIPEQ
Date:
Mon Jan 08 22:09:56 2018 +0700
Revision:
31:0f7ea3981668
Child:
32:8226837c56ae
version 2.0: add command execution

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 1 // For receiving message handles, search "Message Handles" in SimpleMQTT.h
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 2
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 3 /***************************************************************
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 4 * Includes
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 5 ***************************************************************/
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 6 #include "mbed.h"
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 7
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 8 #include "ReadSensor.h"
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 9 #include "SimpleMQTT.h"
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 10 #include "flash_programming.h"
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 11
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 12 /***************************************************************
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 13 * Definitions
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 14 ***************************************************************/
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 15 #define RELAY_1_PIN (D11)
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 16 #define RELAY_2_PIN (D12)
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 17
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 18 /***************************************************************
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 19 * Variables
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 20 ***************************************************************/
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 21 bool isUploading = false;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 22 uint8_t uploadType = ADC_VALUE;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 23
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 24 uint32_t lastRead = 0;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 25 uint16_t readSecond = 5; /* Read timer every 2 second(s) */
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 26 uint32_t uploadPeriod = 4; /* Period between each time upload all data = uploadPeriod*readSecond = 20 s */
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 27 uint32_t uploadPeriodCounter = 0;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 28
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 29 struct UploadValue DataStruct = {19, 25, 0, 1, 0, 65, 80, 10};
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 30
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 31 /* Analog Handles */
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 32 float ADC_PHVal;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 33 float ADC_DOVal;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 34
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 35 /***************************************************************
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 36 * Structs/Classess
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 37 ***************************************************************/
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 38 static Serial pc(SERIAL_TX, SERIAL_RX);
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 39
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 40 DigitalOut myled(LED1);
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 41 DigitalOut led1(RELAY_1_PIN);
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 42 DigitalOut led2(RELAY_2_PIN);
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 43
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 44 Timer UploadTimer;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 45 /***************************************************************
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 46 * Unity function definitions
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 47 ***************************************************************/
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 48
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 49 /***************************************************************
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 50 * Unity function declarations
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 51 ***************************************************************/
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 52 void MQTT_MessageHandles(uint8_t ControlSignal) {
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 53 switch(ControlSignal) {
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 54 case (1): led1 = !led1;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 55 break;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 56 case (2): led2 = !led2;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 57 break;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 58 default: break;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 59 }
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 60 }
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 61
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 62
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 63 /***************************************************************
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 64 * Main
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 65 ***************************************************************/
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 66 int main() {
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 67 pc.baud(115200);
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 68 UploadTimer.start();
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 69 lastRead = 0;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 70 set_time(1515445620);
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 71 pc.printf("\r\nX-NUCLEO-IDW01M1 mbed Application\r\n");
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 72 pc.printf("\r\nconnecting to AP\r\n");
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 73
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 74 NetworkInterface* network = easy_connect(true);
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 75 if (!network) {
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 76 printf ("Error easy_connect\n\r");
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 77 }
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 78 MQTTNetwork mqttNetwork(network);
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 79 MQTT::Client<MQTTNetwork, Countdown, MQTT_MAX_PACKET_SIZE> client(mqttNetwork);
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 80 printf ("ATTEMPT CONNECT\n\r");
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 81 MQTT_AttemptConnect(&client, &mqttNetwork, network);
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 82 if (connack_rc == MQTT_NOT_AUTHORIZED || connack_rc == MQTT_BAD_USERNAME_OR_PASSWORD) {
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 83 printf ("---ERROR line : %d\n\r", __LINE__);
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 84 while (true)
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 85 wait(1.0); // Permanent failures - don't retry
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 86 }
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 87
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 88 myled=1;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 89 FP_WriteConfigValues(25, 26, 27);
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 90 while (true) {
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 91 time_t seconds = time(NULL);
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 92 ADC_PHVal = SENSOR_ReadPHADC();
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 93 if(connected == true) {
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 94 if ((uint32_t)(UploadTimer.read() - lastRead) >= readSecond) { // Publish a message every 3 second
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 95 printf("Upload time %ds\r\n", FP_ReadValue(UPLOAD_PERIOD_ARRESS));
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 96 if (!isUploading) {
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 97 uploadPeriodCounter++;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 98 if (uploadPeriodCounter == uploadPeriod) {
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 99 uploadPeriodCounter = 0;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 100 isUploading = true;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 101 }
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 102 }
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 103 else {
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 104 if (MQTT_PublishAll(&client, seconds, uploadType, DataStruct) == MQTT::SUCCESS) {
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 105 myled = 1;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 106 uploadType++;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 107 if (uploadType > CONFIG_VALUE) {
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 108 isUploading = false;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 109 uploadType = ADC_VALUE;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 110 commandID++;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 111 UploadTimer.reset();
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 112 }
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 113 }
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 114 else {
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 115 myled = 0;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 116 client.disconnect();
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 117 mqttNetwork.disconnect();
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 118 MQTT_AttemptConnect(&client, &mqttNetwork, network); // if we have lost the connection
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 119 }
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 120 }
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 121 lastRead = UploadTimer.read();
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 122 }
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 123 client.yield(500); // allow the MQTT client to receive subscribe messages and manage keep alive
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 124 }
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 125 else if (connected == false) {
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 126 connected = true;
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 127 }
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 128 }
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 129 }
Duy Tran@DESKTOP-0RPIPEQ 31:0f7ea3981668 130