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@47:c3707a4f69a7, 2018-03-08 (annotated)
- Committer:
- DuyLionTran
- Date:
- Thu Mar 08 14:19:48 2018 +0000
- Revision:
- 47:c3707a4f69a7
- Parent:
- 46:f545b8f7f242
- Child:
- 48:a7ed665844cd
* version 2.7.5a 03-08-2018: DS18B20 problem discovered at line 42th ReadSensor.cpp; Upload RTC time converted to epoch
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| DuyLionTran | 34:601effb7b7fe | 1 | /** |
| DuyLionTran | 34:601effb7b7fe | 2 | * Revision |
| DuyLionTran | 34:601effb7b7fe | 3 | * version 1.0 |
| DuyLionTran | 34:601effb7b7fe | 4 | * .... |
| DuyLionTran | 41:6aed398adcc4 | 5 | * version 2.5 02-14-2018: 3rd relay and remote time setting are added |
| DuyLionTran | 41:6aed398adcc4 | 6 | * version 2.6 02-14-2018: DO Sensor added, calibration is still on the way |
| DuyLionTran | 41:6aed398adcc4 | 7 | * version 2.6.3 02-19-2018: developing calibration. the average voltage is ok |
| DuyLionTran | 41:6aed398adcc4 | 8 | * version 2.6.5 02-21-2018: developing calibration. Sensor read is completely ok |
| DuyLionTran | 41:6aed398adcc4 | 9 | * version 2.6.8 02-27-2018: developing DO calibration. DS18B20 temperature sensor is added |
| DuyLionTran | 42:3656e1b2f20a | 10 | * version 2.7 03-04-2018: DO calibration complete. IWDG is added |
| DuyLionTran | 43:dcde0e66874a | 11 | * version 2.7.5 03-08-2018: DS18B20 & IWDG is being developed |
| DuyLionTran | 45:92da959d624b | 12 | * version 2.7.5a 03-08-2018: DS18B20 problem discovered at line 42th ReadSensor.cpp |
| DuyLionTran | 47:c3707a4f69a7 | 13 | Upload RTC time converted to epoch |
| DuyLionTran | 34:601effb7b7fe | 14 | */ |
| DuyLionTran | 32:8226837c56ae | 15 | |
| DuyLionTran | 32:8226837c56ae | 16 | /*************************************************************** |
| DuyLionTran | 32:8226837c56ae | 17 | * Includes |
| DuyLionTran | 32:8226837c56ae | 18 | ***************************************************************/ |
| DuyLionTran | 32:8226837c56ae | 19 | #include "mbed.h" |
| DuyLionTran | 32:8226837c56ae | 20 | |
| DuyLionTran | 32:8226837c56ae | 21 | #include "ReadSensor.h" |
| DuyLionTran | 32:8226837c56ae | 22 | #include "SimpleMQTT.h" |
| DuyLionTran | 33:5b90257d2d57 | 23 | #include "CommandExecution.h" |
| DuyLionTran | 32:8226837c56ae | 24 | #include "flash_programming.h" |
| DuyLionTran | 32:8226837c56ae | 25 | |
| DuyLionTran | 41:6aed398adcc4 | 26 | #include "stm32l4xx_hal_iwdg.h" |
| DuyLionTran | 41:6aed398adcc4 | 27 | |
| DuyLionTran | 32:8226837c56ae | 28 | /*************************************************************** |
| DuyLionTran | 32:8226837c56ae | 29 | * Definitions |
| DuyLionTran | 32:8226837c56ae | 30 | ***************************************************************/ |
| DuyLionTran | 41:6aed398adcc4 | 31 | //#define READ_ANALOG_SOFTTIMER |
| DuyLionTran | 41:6aed398adcc4 | 32 | |
| DuyLionTran | 33:5b90257d2d57 | 33 | #define READ_SECOND 1 /* Read timer every 1 second(s) */ |
| DuyLionTran | 33:5b90257d2d57 | 34 | #define INTERVAL_BETWEEN_EACH_UPLOAD_TYPE 5 /* The interval between each upload type in second */ |
| DuyLionTran | 33:5b90257d2d57 | 35 | #define RECONNECT_WIFI 60 /* Try to reconnect to wifi */ |
| DuyLionTran | 41:6aed398adcc4 | 36 | #ifdef READ_ANALOG_SOFTTIMER |
| DuyLionTran | 41:6aed398adcc4 | 37 | #define READ_ANALOG_MS 30 |
| DuyLionTran | 41:6aed398adcc4 | 38 | #endif |
| DuyLionTran | 41:6aed398adcc4 | 39 | #define PROCESS_SENSOR_VALUE_S 2 |
| DuyLionTran | 41:6aed398adcc4 | 40 | #define CALIB_STATE_CHANGE_PERIOD_S 5 |
| DuyLionTran | 32:8226837c56ae | 41 | |
| DuyLionTran | 32:8226837c56ae | 42 | /*************************************************************** |
| DuyLionTran | 32:8226837c56ae | 43 | * Variables |
| DuyLionTran | 32:8226837c56ae | 44 | ***************************************************************/ |
| DuyLionTran | 32:8226837c56ae | 45 | bool isUploading = false; |
| DuyLionTran | 46:f545b8f7f242 | 46 | bool isSendingData = false; |
| DuyLionTran | 47:c3707a4f69a7 | 47 | uint8_t uploadType = SENSOR_VALUE; |
| DuyLionTran | 41:6aed398adcc4 | 48 | uint8_t currentCalibMode = 1; |
| DuyLionTran | 41:6aed398adcc4 | 49 | uint8_t calibStateCounter = 0; |
| DuyLionTran | 32:8226837c56ae | 50 | |
| DuyLionTran | 33:5b90257d2d57 | 51 | uint32_t lastRead = 0; |
| DuyLionTran | 33:5b90257d2d57 | 52 | uint32_t noWiFilastRead = 0; |
| DuyLionTran | 33:5b90257d2d57 | 53 | uint16_t intervalSecondCounter = 0; |
| DuyLionTran | 33:5b90257d2d57 | 54 | uint32_t uploadPeriodCounter = 0; |
| DuyLionTran | 41:6aed398adcc4 | 55 | |
| DuyLionTran | 41:6aed398adcc4 | 56 | #ifdef READ_ANALOG_SOFTTIMER |
| DuyLionTran | 41:6aed398adcc4 | 57 | uint32_t lastReadAnalog = 0; |
| DuyLionTran | 41:6aed398adcc4 | 58 | #endif |
| DuyLionTran | 32:8226837c56ae | 59 | |
| DuyLionTran | 33:5b90257d2d57 | 60 | struct UploadValue DataStruct; |
| DuyLionTran | 41:6aed398adcc4 | 61 | IWDG_HandleTypeDef IwdgHandle; |
| DuyLionTran | 32:8226837c56ae | 62 | |
| DuyLionTran | 36:d0b628087ac8 | 63 | extern float doValue; |
| DuyLionTran | 45:92da959d624b | 64 | extern float temperature; |
| DuyLionTran | 41:6aed398adcc4 | 65 | extern bool isCalibrating; |
| DuyLionTran | 32:8226837c56ae | 66 | |
| DuyLionTran | 32:8226837c56ae | 67 | /*************************************************************** |
| DuyLionTran | 32:8226837c56ae | 68 | * Structs/Classess |
| DuyLionTran | 32:8226837c56ae | 69 | ***************************************************************/ |
| DuyLionTran | 32:8226837c56ae | 70 | static Serial pc(SERIAL_TX, SERIAL_RX); |
| DuyLionTran | 32:8226837c56ae | 71 | |
| DuyLionTran | 40:4356c209c58d | 72 | //DigitalOut myled(LED1); |
| DuyLionTran | 40:4356c209c58d | 73 | DigitalOut myled(A6); |
| DuyLionTran | 34:601effb7b7fe | 74 | DigitalOut espEn(D2); |
| DuyLionTran | 34:601effb7b7fe | 75 | DigitalOut espRs(D7); |
| DuyLionTran | 32:8226837c56ae | 76 | |
| DuyLionTran | 36:d0b628087ac8 | 77 | Timer UploadTimer; |
| DuyLionTran | 41:6aed398adcc4 | 78 | #ifdef READ_ANALOG_SOFTTIMER |
| DuyLionTran | 41:6aed398adcc4 | 79 | Timer ReadAnalogTimer; |
| DuyLionTran | 41:6aed398adcc4 | 80 | #endif |
| DuyLionTran | 41:6aed398adcc4 | 81 | Ticker DisplayDO; |
| DuyLionTran | 40:4356c209c58d | 82 | |
| DuyLionTran | 32:8226837c56ae | 83 | /*************************************************************** |
| DuyLionTran | 32:8226837c56ae | 84 | * Unity function definitions |
| DuyLionTran | 32:8226837c56ae | 85 | ***************************************************************/ |
| DuyLionTran | 33:5b90257d2d57 | 86 | void ReadAllFlashValues(); |
| DuyLionTran | 41:6aed398adcc4 | 87 | void SensorRun(); |
| DuyLionTran | 40:4356c209c58d | 88 | void enableESP(); |
| DuyLionTran | 40:4356c209c58d | 89 | |
| DuyLionTran | 40:4356c209c58d | 90 | void BinkLEDStart(); |
| DuyLionTran | 41:6aed398adcc4 | 91 | |
| DuyLionTran | 32:8226837c56ae | 92 | /*************************************************************** |
| DuyLionTran | 32:8226837c56ae | 93 | * Unity function declarations |
| DuyLionTran | 32:8226837c56ae | 94 | ***************************************************************/ |
| DuyLionTran | 33:5b90257d2d57 | 95 | void ReadAllFlashValues() { |
| DuyLionTran | 47:c3707a4f69a7 | 96 | DataStruct.ADC_TEMPVal = 0; |
| DuyLionTran | 47:c3707a4f69a7 | 97 | DataStruct.ADC_DOVal = 0; |
| DuyLionTran | 47:c3707a4f69a7 | 98 | DataStruct.SENSOR_TEMPVal = 0; |
| DuyLionTran | 47:c3707a4f69a7 | 99 | DataStruct.SENSOR_DOVal = 0; |
| DuyLionTran | 43:dcde0e66874a | 100 | DataStruct.RELAY_State_1 = FP_ReadValue(RELAY1_ADDRESS); |
| DuyLionTran | 43:dcde0e66874a | 101 | DataStruct.RELAY_State_2 = FP_ReadValue(RELAY2_ADDRESS); |
| DuyLionTran | 43:dcde0e66874a | 102 | DataStruct.RELAY_State_3 = FP_ReadValue(RELAY3_ADDRESS); |
| DuyLionTran | 43:dcde0e66874a | 103 | DataStruct.CONFIG_Mode = FP_ReadValue(MODE_ADDRESS); |
| DuyLionTran | 43:dcde0e66874a | 104 | DataStruct.CONFIG_OxyThreshold = FP_ReadValue(OXY_THRES_ADDRESS); |
| DuyLionTran | 43:dcde0e66874a | 105 | DataStruct.CONFIG_TemperatureThreshold = FP_ReadValue(TEMP_THRES_ADDRESS); |
| DuyLionTran | 43:dcde0e66874a | 106 | DataStruct.CONFIG_UploadInterval = FP_ReadValue(UPLOAD_PERIOD_ADDRESS); |
| DuyLionTran | 33:5b90257d2d57 | 107 | printf("All values: %d %d %d %d %d %d\r\n", DataStruct.RELAY_State_1, DataStruct.RELAY_State_2, |
| DuyLionTran | 43:dcde0e66874a | 108 | DataStruct.CONFIG_Mode, DataStruct.CONFIG_OxyThreshold, |
| DuyLionTran | 43:dcde0e66874a | 109 | DataStruct.CONFIG_TemperatureThreshold, DataStruct.CONFIG_UploadInterval); |
| DuyLionTran | 34:601effb7b7fe | 110 | CE_HandleRelays(DataStruct.RELAY_State_1, DataStruct.RELAY_State_2, DataStruct.RELAY_State_3); |
| DuyLionTran | 33:5b90257d2d57 | 111 | } |
| DuyLionTran | 32:8226837c56ae | 112 | |
| DuyLionTran | 41:6aed398adcc4 | 113 | void SensorRun() { |
| DuyLionTran | 47:c3707a4f69a7 | 114 | if (!isSendingData) { |
| DuyLionTran | 47:c3707a4f69a7 | 115 | for (uint8_t j = 0; j < SCOUNT; j++) { |
| DuyLionTran | 47:c3707a4f69a7 | 116 | SENSOR_AnalogRead(); |
| DuyLionTran | 47:c3707a4f69a7 | 117 | } |
| DuyLionTran | 47:c3707a4f69a7 | 118 | SENSOR_GetDOValue(); |
| DuyLionTran | 47:c3707a4f69a7 | 119 | DataStruct.SENSOR_DOVal = doValue; |
| DuyLionTran | 47:c3707a4f69a7 | 120 | DataStruct.SENSOR_TEMPVal = temperature; |
| DuyLionTran | 47:c3707a4f69a7 | 121 | if (isCalibrating) { |
| DuyLionTran | 47:c3707a4f69a7 | 122 | SENSOR_DoCalibration(currentCalibMode); |
| DuyLionTran | 47:c3707a4f69a7 | 123 | if (currentCalibMode == 3) { |
| DuyLionTran | 47:c3707a4f69a7 | 124 | currentCalibMode = 1; |
| DuyLionTran | 47:c3707a4f69a7 | 125 | isCalibrating = false; |
| DuyLionTran | 47:c3707a4f69a7 | 126 | } |
| DuyLionTran | 47:c3707a4f69a7 | 127 | calibStateCounter++; |
| DuyLionTran | 47:c3707a4f69a7 | 128 | |
| DuyLionTran | 47:c3707a4f69a7 | 129 | /* Change calibration mode every PROCESS_SENSOR_VALUE_S*CALIB_STATE_CHANGE_PERIOD_S second(s) */ |
| DuyLionTran | 47:c3707a4f69a7 | 130 | if ((calibStateCounter % CALIB_STATE_CHANGE_PERIOD_S) == 0) { |
| DuyLionTran | 47:c3707a4f69a7 | 131 | currentCalibMode++; |
| DuyLionTran | 47:c3707a4f69a7 | 132 | } |
| DuyLionTran | 47:c3707a4f69a7 | 133 | } |
| DuyLionTran | 41:6aed398adcc4 | 134 | } |
| DuyLionTran | 47:c3707a4f69a7 | 135 | else { |
| DuyLionTran | 47:c3707a4f69a7 | 136 | printf("No sensor reading because uploading data\r\n"); |
| DuyLionTran | 41:6aed398adcc4 | 137 | } |
| DuyLionTran | 36:d0b628087ac8 | 138 | } |
| DuyLionTran | 40:4356c209c58d | 139 | |
| DuyLionTran | 40:4356c209c58d | 140 | void enableESP() { |
| DuyLionTran | 40:4356c209c58d | 141 | espEn = 1; |
| DuyLionTran | 40:4356c209c58d | 142 | espRs = 1; |
| DuyLionTran | 40:4356c209c58d | 143 | printf("ESP enabled\r\n"); |
| DuyLionTran | 40:4356c209c58d | 144 | } |
| DuyLionTran | 40:4356c209c58d | 145 | |
| DuyLionTran | 40:4356c209c58d | 146 | void BinkLEDStart() { |
| DuyLionTran | 40:4356c209c58d | 147 | myled = 1; |
| DuyLionTran | 41:6aed398adcc4 | 148 | for (uint8_t j = 0; j < 8; j++) { |
| DuyLionTran | 41:6aed398adcc4 | 149 | myled = !myled; |
| DuyLionTran | 41:6aed398adcc4 | 150 | wait(0.2); |
| DuyLionTran | 41:6aed398adcc4 | 151 | } |
| DuyLionTran | 40:4356c209c58d | 152 | myled = 0; |
| DuyLionTran | 40:4356c209c58d | 153 | } |
| DuyLionTran | 32:8226837c56ae | 154 | /*************************************************************** |
| DuyLionTran | 32:8226837c56ae | 155 | * Main |
| DuyLionTran | 32:8226837c56ae | 156 | ***************************************************************/ |
| DuyLionTran | 32:8226837c56ae | 157 | int main() { |
| DuyLionTran | 32:8226837c56ae | 158 | pc.baud(115200); |
| DuyLionTran | 43:dcde0e66874a | 159 | printf("PROGRAM STARTS\r\n"); |
| DuyLionTran | 40:4356c209c58d | 160 | enableESP(); |
| DuyLionTran | 32:8226837c56ae | 161 | UploadTimer.start(); |
| DuyLionTran | 41:6aed398adcc4 | 162 | |
| DuyLionTran | 41:6aed398adcc4 | 163 | #ifdef READ_ANALOG_SOFTTIMER |
| DuyLionTran | 41:6aed398adcc4 | 164 | ReadAnalogTimer.start(); |
| DuyLionTran | 41:6aed398adcc4 | 165 | #endif |
| DuyLionTran | 41:6aed398adcc4 | 166 | |
| DuyLionTran | 40:4356c209c58d | 167 | BinkLEDStart(); |
| DuyLionTran | 40:4356c209c58d | 168 | |
| DuyLionTran | 32:8226837c56ae | 169 | lastRead = 0; |
| DuyLionTran | 41:6aed398adcc4 | 170 | pc.printf("\r\nViKa IoT Water Monitor mbed Application\r\n"); |
| DuyLionTran | 32:8226837c56ae | 171 | pc.printf("\r\nconnecting to AP\r\n"); |
| DuyLionTran | 36:d0b628087ac8 | 172 | |
| DuyLionTran | 32:8226837c56ae | 173 | NetworkInterface* network = easy_connect(true); |
| DuyLionTran | 32:8226837c56ae | 174 | if (!network) { |
| DuyLionTran | 32:8226837c56ae | 175 | printf ("Error easy_connect\n\r"); |
| DuyLionTran | 36:d0b628087ac8 | 176 | wifiConnected = false; |
| DuyLionTran | 32:8226837c56ae | 177 | } |
| DuyLionTran | 36:d0b628087ac8 | 178 | printf ("ATTEMPT CONNECT\n\r"); |
| DuyLionTran | 36:d0b628087ac8 | 179 | MQTTNetwork mqttNetwork(network); |
| DuyLionTran | 36:d0b628087ac8 | 180 | MQTT::Client<MQTTNetwork, Countdown, MQTT_MAX_PACKET_SIZE> client(mqttNetwork); |
| DuyLionTran | 36:d0b628087ac8 | 181 | MQTT_AttemptConnect(&client, &mqttNetwork, network, DataStruct); |
| DuyLionTran | 36:d0b628087ac8 | 182 | if (connack_rc == MQTT_NOT_AUTHORIZED || connack_rc == MQTT_BAD_USERNAME_OR_PASSWORD) { |
| DuyLionTran | 36:d0b628087ac8 | 183 | printf ("---ERROR line : %d, error type %d\n\r", __LINE__, connack_rc); |
| DuyLionTran | 36:d0b628087ac8 | 184 | wifiConnected = false; |
| DuyLionTran | 36:d0b628087ac8 | 185 | // while (true) |
| DuyLionTran | 36:d0b628087ac8 | 186 | // wait(1.0); // Permanent failures - don't retry |
| DuyLionTran | 36:d0b628087ac8 | 187 | } |
| DuyLionTran | 43:dcde0e66874a | 188 | |
| DuyLionTran | 43:dcde0e66874a | 189 | DisplayDO.attach(&SensorRun, PROCESS_SENSOR_VALUE_S); |
| DuyLionTran | 33:5b90257d2d57 | 190 | ReadAllFlashValues(); |
| DuyLionTran | 38:64e3e9acb49c | 191 | SENSOR_ReadDoCharacteristicValues(); |
| DuyLionTran | 40:4356c209c58d | 192 | myled = 1; |
| DuyLionTran | 32:8226837c56ae | 193 | while (true) { |
| DuyLionTran | 33:5b90257d2d57 | 194 | time_t seconds = time(NULL); |
| DuyLionTran | 41:6aed398adcc4 | 195 | #ifdef READ_ANALOG_SOFTTIMER |
| DuyLionTran | 41:6aed398adcc4 | 196 | if ((uint32_t)(ReadAnalogTimer.read_ms() - lastReadAnalog) > READ_ANALOG_MS) { |
| DuyLionTran | 41:6aed398adcc4 | 197 | SENSOR_AnalogRead(); |
| DuyLionTran | 41:6aed398adcc4 | 198 | lastReadAnalog = ReadAnalogTimer.read_ms(); |
| DuyLionTran | 41:6aed398adcc4 | 199 | } |
| DuyLionTran | 41:6aed398adcc4 | 200 | #endif |
| DuyLionTran | 33:5b90257d2d57 | 201 | if (wifiConnected) { |
| DuyLionTran | 33:5b90257d2d57 | 202 | if(connected == true) { |
| DuyLionTran | 33:5b90257d2d57 | 203 | if ((uint32_t)(UploadTimer.read() - lastRead) >= READ_SECOND) { // Read timer every readSecond(s) |
| DuyLionTran | 33:5b90257d2d57 | 204 | printf("Upload time %ds\r\n", DataStruct.CONFIG_UploadInterval); |
| DuyLionTran | 33:5b90257d2d57 | 205 | if (!isUploading) { |
| DuyLionTran | 33:5b90257d2d57 | 206 | uploadPeriodCounter++; |
| DuyLionTran | 33:5b90257d2d57 | 207 | if (uploadPeriodCounter == DataStruct.CONFIG_UploadInterval) { |
| DuyLionTran | 33:5b90257d2d57 | 208 | uploadPeriodCounter = 0; |
| DuyLionTran | 33:5b90257d2d57 | 209 | isUploading = true; |
| DuyLionTran | 33:5b90257d2d57 | 210 | intervalSecondCounter = INTERVAL_BETWEEN_EACH_UPLOAD_TYPE; |
| DuyLionTran | 33:5b90257d2d57 | 211 | } |
| DuyLionTran | 33:5b90257d2d57 | 212 | } |
| DuyLionTran | 33:5b90257d2d57 | 213 | else { |
| DuyLionTran | 33:5b90257d2d57 | 214 | if (intervalSecondCounter == INTERVAL_BETWEEN_EACH_UPLOAD_TYPE) { |
| DuyLionTran | 47:c3707a4f69a7 | 215 | isSendingData = true; |
| DuyLionTran | 33:5b90257d2d57 | 216 | if (MQTT_PublishAll(&client, seconds, uploadType, DataStruct) == MQTT::SUCCESS) { |
| DuyLionTran | 33:5b90257d2d57 | 217 | myled = 1; |
| DuyLionTran | 33:5b90257d2d57 | 218 | uploadType++; |
| DuyLionTran | 33:5b90257d2d57 | 219 | if (uploadType > CONFIG_VALUE) { |
| DuyLionTran | 33:5b90257d2d57 | 220 | isUploading = false; |
| DuyLionTran | 47:c3707a4f69a7 | 221 | uploadType = SENSOR_VALUE; |
| DuyLionTran | 33:5b90257d2d57 | 222 | commandID++; |
| DuyLionTran | 33:5b90257d2d57 | 223 | UploadTimer.reset(); |
| DuyLionTran | 33:5b90257d2d57 | 224 | } |
| DuyLionTran | 33:5b90257d2d57 | 225 | } |
| DuyLionTran | 33:5b90257d2d57 | 226 | else { |
| DuyLionTran | 33:5b90257d2d57 | 227 | myled = 0; |
| DuyLionTran | 33:5b90257d2d57 | 228 | client.disconnect(); |
| DuyLionTran | 33:5b90257d2d57 | 229 | mqttNetwork.disconnect(); |
| DuyLionTran | 38:64e3e9acb49c | 230 | /* if we have lost the connection */ |
| DuyLionTran | 38:64e3e9acb49c | 231 | MQTT_AttemptConnect(&client, &mqttNetwork, network, DataStruct); |
| DuyLionTran | 47:c3707a4f69a7 | 232 | } |
| DuyLionTran | 47:c3707a4f69a7 | 233 | isSendingData = false; |
| DuyLionTran | 33:5b90257d2d57 | 234 | intervalSecondCounter = 0; |
| DuyLionTran | 33:5b90257d2d57 | 235 | } |
| DuyLionTran | 33:5b90257d2d57 | 236 | else { |
| DuyLionTran | 33:5b90257d2d57 | 237 | intervalSecondCounter++; |
| DuyLionTran | 32:8226837c56ae | 238 | } |
| DuyLionTran | 32:8226837c56ae | 239 | } |
| DuyLionTran | 33:5b90257d2d57 | 240 | lastRead = UploadTimer.read(); |
| DuyLionTran | 33:5b90257d2d57 | 241 | } |
| DuyLionTran | 38:64e3e9acb49c | 242 | /* allow the MQTT client to receive subscribe messages and manage keep alive */ |
| DuyLionTran | 38:64e3e9acb49c | 243 | client.yield(500); |
| DuyLionTran | 33:5b90257d2d57 | 244 | } |
| DuyLionTran | 33:5b90257d2d57 | 245 | else if (connected == false) { |
| DuyLionTran | 33:5b90257d2d57 | 246 | connected = true; |
| DuyLionTran | 33:5b90257d2d57 | 247 | } |
| DuyLionTran | 33:5b90257d2d57 | 248 | } |
| DuyLionTran | 33:5b90257d2d57 | 249 | else { |
| DuyLionTran | 33:5b90257d2d57 | 250 | if ((uint32_t)(UploadTimer.read() - noWiFilastRead) >= RECONNECT_WIFI) { |
| DuyLionTran | 33:5b90257d2d57 | 251 | wifiConnected = true; |
| DuyLionTran | 33:5b90257d2d57 | 252 | network = easy_connect(true); |
| DuyLionTran | 33:5b90257d2d57 | 253 | MQTT_AttemptConnect(&client, &mqttNetwork, network, DataStruct); |
| DuyLionTran | 33:5b90257d2d57 | 254 | if (connack_rc == MQTT_NOT_AUTHORIZED || connack_rc == MQTT_BAD_USERNAME_OR_PASSWORD) { |
| DuyLionTran | 33:5b90257d2d57 | 255 | printf ("---ERROR line : %d, error type %d\n\r", __LINE__, connack_rc); |
| DuyLionTran | 33:5b90257d2d57 | 256 | wifiConnected = false; |
| DuyLionTran | 33:5b90257d2d57 | 257 | // while (true) |
| DuyLionTran | 33:5b90257d2d57 | 258 | // wait(1.0); // Permanent failures - don't retry |
| DuyLionTran | 33:5b90257d2d57 | 259 | } |
| DuyLionTran | 33:5b90257d2d57 | 260 | noWiFilastRead = UploadTimer.read(); |
| DuyLionTran | 33:5b90257d2d57 | 261 | } |
| DuyLionTran | 33:5b90257d2d57 | 262 | } |
| DuyLionTran | 32:8226837c56ae | 263 | } |
| DuyLionTran | 32:8226837c56ae | 264 | } |
| DuyLionTran | 44:8a99efffeb8e | 265 |