Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: easy-connect-v16 Watchdog FP MQTTPacket RecordType-v-16 watersenor_and_temp_code
Application/main.cpp@31:0f7ea3981668, 2018-01-08 (annotated)
- 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?
| User | Revision | Line number | New 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 |