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