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