main/co2meter.c

changeset 47
1ab1f4a8c328
parent 38
46e2c385e9de
child 50
aae0056bc20b
equal deleted inserted replaced
46:2cf4b15895f2 47:1ab1f4a8c328
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 */

mercurial