21 extern SemaphoreHandle_t xSemaphoreUnits; ///< Units lock semaphore |
21 extern SemaphoreHandle_t xSemaphoreUnits; ///< Units lock semaphore |
22 extern DS18B20_State *ds18b20_state; ///< DS18B20 state |
22 extern DS18B20_State *ds18b20_state; ///< DS18B20 state |
23 extern SemaphoreHandle_t xSemaphoreDS18B20; ///< DS18B20 lock semaphore |
23 extern SemaphoreHandle_t xSemaphoreDS18B20; ///< DS18B20 lock semaphore |
24 extern ADC_State *adc_state; ///< ADC state |
24 extern ADC_State *adc_state; ///< ADC state |
25 extern SemaphoreHandle_t xSemaphoreADC; ///< ADC lock semaphore |
25 extern SemaphoreHandle_t xSemaphoreADC; ///< ADC lock semaphore |
|
26 extern SemaphoreHandle_t xSemaphoreWiFi; |
26 extern WIFI_State *wifi_state; ///< WiFi state |
27 extern WIFI_State *wifi_state; ///< WiFi state |
27 extern EventGroupHandle_t xEventGroupUser; |
28 extern EventGroupHandle_t xEventGroupUser; |
28 extern int count_pub; ///< Published MQTT messages in transit |
29 extern int count_pub; ///< Published MQTT messages in transit |
29 |
30 |
30 |
31 |
120 xSemaphoreUnits = xSemaphoreCreateMutex(); |
121 xSemaphoreUnits = xSemaphoreCreateMutex(); |
121 |
122 |
122 xTaskCreate(&task_user, "task_user", 4096, NULL,10, &xTaskUser); |
123 xTaskCreate(&task_user, "task_user", 4096, NULL,10, &xTaskUser); |
123 xTaskCreate(&task_ds18b20, "task_ds18b20", 2560, NULL, 8, &xTaskDS18B20); |
124 xTaskCreate(&task_ds18b20, "task_ds18b20", 2560, NULL, 8, &xTaskDS18B20); |
124 xTaskCreate(&task_adc, "task_adc", 2560, NULL, 8, &xTaskADC); |
125 xTaskCreate(&task_adc, "task_adc", 2560, NULL, 8, &xTaskADC); |
|
126 esp_log_level_set("MQTT_CLIENT", ESP_LOG_ERROR); |
|
127 xTaskCreate(&task_mqtt, "task_mqtt", 4096, NULL, 5, &xTaskMQTT); |
125 esp_log_level_set("wifi", ESP_LOG_ERROR); |
128 esp_log_level_set("wifi", ESP_LOG_ERROR); |
126 xTaskCreate(&task_wifi, "task_wifi", 4096, NULL, 3, &xTaskWifi); |
129 xTaskCreate(&task_wifi, "task_wifi", 4096, NULL, 3, &xTaskWifi); |
127 vTaskDelay(10 / portTICK_PERIOD_MS); |
130 vTaskDelay(10 / portTICK_PERIOD_MS); |
128 esp_log_level_set("MQTT_CLIENT", ESP_LOG_ERROR); |
131 int wait = 150; |
129 xTaskCreate(&task_mqtt, "task_mqtt", 4096, NULL, 5, &xTaskMQTT); |
132 while (wait) { |
|
133 if (ready_WiFi()) { |
|
134 ESP_LOGI(TAG, "Online in %.1f seconds", (150 - wait) / 10.0); |
|
135 wait = 0; |
|
136 } else { |
|
137 wait--; |
|
138 if (wait < 1) |
|
139 ESP_LOGE(TAG, "Timeout network connection"); |
|
140 } |
|
141 vTaskDelay(100 / portTICK_PERIOD_MS); |
|
142 } |
130 |
143 |
131 /* |
144 /* |
132 * Main application loop. |
145 * Main application loop. |
133 */ |
146 */ |
134 while (1) { |
147 while (1) { |
137 |
150 |
138 /* Measure process */ |
151 /* Measure process */ |
139 while (1) { |
152 while (1) { |
140 switch (Main_Loop1) { |
153 switch (Main_Loop1) { |
141 case ML1_INIT: |
154 case ML1_INIT: |
|
155 status_WiFi(); |
142 Main_Loop1 = ML1_CONNECT; |
156 Main_Loop1 = ML1_CONNECT; |
143 requestWiFi_system(true); |
|
144 request_ds18b20(); |
157 request_ds18b20(); |
145 request_adc(); |
158 request_adc(); |
146 break; |
159 break; |
147 |
160 |
148 case ML1_CONNECT: |
161 case ML1_CONNECT: |
149 if (ready_WiFi()) { |
162 if (ready_WiFi()) { |
150 Main_Loop1 = ML1_MQTT_CONNECT; |
163 Main_Loop1 = ML1_MQTT_CONNECT; |
151 user_refresh(); |
164 user_refresh(); |
|
165 if (! ready_mqtt()) |
|
166 connect_mqtt(true); |
152 } |
167 } |
153 break; |
168 break; |
154 |
169 |
155 case ML1_MQTT_CONNECT: |
170 case ML1_MQTT_CONNECT: |
156 if (ready_ds18b20() && ready_adc()) { |
171 if (ready_ds18b20() && ready_adc()) { |
157 connect_mqtt(true); |
|
158 Main_Loop1 = ML1_WAITCON; |
172 Main_Loop1 = ML1_WAITCON; |
159 |
173 |
160 uint32_t temp[DS18B20_MAX]; |
174 uint32_t temp[DS18B20_MAX]; |
161 int state[DS18B20_MAX], i; |
175 int state[DS18B20_MAX], i; |
162 char rom_code[DS18B20_MAX][17]; |
176 char rom_code[DS18B20_MAX][17]; |
240 publishLogs(); |
254 publishLogs(); |
241 Main_Loop1 = ML1_WAITACK; |
255 Main_Loop1 = ML1_WAITACK; |
242 break; |
256 break; |
243 |
257 |
244 case ML1_WAITACK: |
258 case ML1_WAITACK: |
245 if (count_pub == 0) // Wait until all published messages are sent. |
259 if (count_pub == 0) { // Wait until all published messages are sent. |
246 Main_Loop1 = ML1_MQTT_DISCONNECT; |
|
247 break; |
|
248 |
|
249 case ML1_MQTT_DISCONNECT: |
|
250 connect_mqtt(false); // Doesn't really disconnect. |
|
251 Main_Loop1 = ML1_DISCONNECT; |
|
252 break; |
|
253 |
|
254 case ML1_DISCONNECT: |
|
255 if (! ready_mqtt()) { |
|
256 requestWiFi_system(false); |
|
257 Main_Loop1 = ML1_WIFI_OFF; |
|
258 } |
|
259 break; |
|
260 |
|
261 case ML1_WIFI_OFF: |
|
262 if (! ready_WiFi()) { |
|
263 ESP_LOGI(TAG, "Main loop: Done, user busy: %s", user_busy() ? "true":"false"); |
260 ESP_LOGI(TAG, "Main loop: Done, user busy: %s", user_busy() ? "true":"false"); |
264 Main_Loop1 = ML1_DONE; |
261 Main_Loop1 = ML1_DONE; |
265 user_refresh(); |
262 user_refresh(); |
266 } |
263 } |
267 break; |
264 break; |
268 |
265 |
269 case ML1_DONE: |
266 case ML1_DONE: |
270 /* Wait here until the timer resets the loop */ |
267 /* Wait here until the timer resets the loop */ |