stash
This commit is contained in:
		
							parent
							
								
									b7ccdfd5d3
								
							
						
					
					
						commit
						56cddf7073
					
				
					 7 changed files with 79 additions and 20 deletions
				
			
		|  | @ -8,6 +8,6 @@ RUN cd app/modules/sdk; export CT_EXPERIMENTAL=y; export CT_ALLOW_BUILD_AS_ROOT= | |||
| USER 0 | ||||
| RUN apt remove --purge -y python2 && apt autoremove --purge -y && apt install -y python3 python3-serial | ||||
| RUN apt install -y --reinstall python-is-python3 | ||||
| USER 0 | ||||
| USER 1000 | ||||
| WORKDIR /app | ||||
| ENV PATH=/app/modules/sdk/xtensa-lx106-elf/bin:$PATH | ||||
|  |  | |||
|  | @ -11,9 +11,9 @@ | |||
| #include <espressif/esp_common.h> | ||||
| #include <esp/uart.h> | ||||
| 
 | ||||
| void user_init(void) | ||||
| { | ||||
|      | ||||
| #define PUB_MSG_LEN 16 | ||||
| 
 | ||||
| void user_init(void) { | ||||
|     uart_set_baud(0, 115200); | ||||
|     printf("SDK version: %s\n", sdk_system_get_sdk_version()); | ||||
| 
 | ||||
|  | @ -30,4 +30,11 @@ void user_init(void) | |||
|     xTaskCreate(&httpd_task, "httpd_task", 1024, NULL, 2, NULL); | ||||
| 
 | ||||
|     xTaskCreate(&lux_task, "lux_task", 512, NULL, 1, NULL); | ||||
| 
 | ||||
|     wifi_alive = xSemaphoreCreateBinary(); | ||||
|     publish_queue = xQueueCreate(3, PUB_MSG_LEN); | ||||
| 
 | ||||
|     xTaskCreate(&beat_task, "beat_task", 256, NULL, 3, NULL); | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ | |||
| //
 | ||||
| 
 | ||||
| #include "mqtt.h" | ||||
| #include "wifi.h" | ||||
| 
 | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
|  | @ -22,15 +23,18 @@ extern "C" { | |||
| 
 | ||||
| /* You can use http://test.mosquitto.org/ to test mqtt_client instead
 | ||||
|  * of setting up your own MQTT server */ | ||||
| #define MQTT_HOST ("172.16.0.42") | ||||
| //#define MQTT_HOST ("172.16.0.42")
 | ||||
| #define MQTT_HOST ("10.23.42.187") | ||||
| #define MQTT_PORT 1883 | ||||
| 
 | ||||
| #define MQTT_USER NULL | ||||
| #define MQTT_PASS NULL | ||||
| 
 | ||||
| QueueHandle_t publish_queue; | ||||
| 
 | ||||
| #define PUB_MSG_LEN 16 | ||||
| 
 | ||||
| QueueHandle_t publish_queue; | ||||
| 
 | ||||
| extern "C" void beat_task(void *pvParameters) { | ||||
|     TickType_t xLastWakeTime = xTaskGetTickCount(); | ||||
|     char msg[PUB_MSG_LEN]; | ||||
|  | @ -98,13 +102,14 @@ extern "C" void mqtt_task(void *pvParameters) { | |||
|     strcat(mqtt_client_id, get_my_id()); | ||||
| 
 | ||||
|     while (1) { | ||||
|         xSemaphoreTake(wifi_alive, portMAX_DELAY); | ||||
|         printf("%s: started\n\r", __func__); | ||||
|         printf("%s: (Re)connecting to MQTT server %s ... ", __func__, | ||||
|                MQTT_HOST); | ||||
|         ret = mqtt_network_connect(&network, MQTT_HOST, MQTT_PORT); | ||||
|         if(ret) { | ||||
|             printf("error: %d\n\r", ret); | ||||
|             taskYIELD(); | ||||
|             printf("error 1: %d\n\r", ret); | ||||
|             vTaskDelay(1000 / portTICK_PERIOD_MS); | ||||
|             continue; | ||||
|         } | ||||
|         printf("done\n\r"); | ||||
|  | @ -121,9 +126,9 @@ extern "C" void mqtt_task(void *pvParameters) { | |||
|         printf("Send MQTT connect ... "); | ||||
|         ret = mqtt_connect(&client, &data); | ||||
|         if(ret) { | ||||
|             printf("error: %d\n\r", ret); | ||||
|             printf("error 2: %d\n\r", ret); | ||||
|             mqtt_network_disconnect(&network); | ||||
|             taskYIELD(); | ||||
|             vTaskDelay(1000 / portTICK_PERIOD_MS); | ||||
|             continue; | ||||
|         } | ||||
|         printf("done\r\n"); | ||||
|  |  | |||
|  | @ -5,6 +5,10 @@ | |||
| #ifndef FIRMWARE_MQTT_H | ||||
| #define FIRMWARE_MQTT_H | ||||
| 
 | ||||
| 
 | ||||
| #include <FreeRTOS.h> | ||||
| #include <queue.h> | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| extern "C" { | ||||
| #endif | ||||
|  | @ -12,6 +16,8 @@ extern "C" { | |||
| void mqtt_task(void *pvParameters); | ||||
| void beat_task(void *pvParameters); | ||||
| 
 | ||||
| extern QueueHandle_t publish_queue; | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif | ||||
|  |  | |||
|  | @ -60,7 +60,8 @@ void websocket_task(void *pvParameter) { | |||
|                 UNLOCK_TCPIP_CORE(); | ||||
|             } else | ||||
|                 syslog("buffer too small -1\n"); | ||||
|             vTaskDelayMs(1000); | ||||
| 
 | ||||
|             taskYIELD(); | ||||
|         } | ||||
| 
 | ||||
|         //Global Info
 | ||||
|  | @ -94,7 +95,8 @@ void websocket_task(void *pvParameter) { | |||
|                 UNLOCK_TCPIP_CORE(); | ||||
|             } else | ||||
|                 syslog("buffer too small 0\n"); | ||||
|             vTaskDelayMs(1000); | ||||
| 
 | ||||
|             taskYIELD(); | ||||
|         } | ||||
| 
 | ||||
|         //Connection Info
 | ||||
|  | @ -117,7 +119,8 @@ void websocket_task(void *pvParameter) { | |||
|                 UNLOCK_TCPIP_CORE(); | ||||
|             } else | ||||
|                 syslog("buffer too small 1\n"); | ||||
|             vTaskDelayMs(1000); | ||||
| 
 | ||||
|             taskYIELD(); | ||||
|         } | ||||
| 
 | ||||
|         if(has_changed.wifi) { | ||||
|  | @ -175,7 +178,8 @@ void websocket_task(void *pvParameter) { | |||
|                     syslog("buffer too small 2\n"); | ||||
|             } | ||||
| 
 | ||||
|             vTaskDelayMs(1000); | ||||
| 
 | ||||
|             taskYIELD(); | ||||
| 
 | ||||
|             if(opmode == STATION_MODE || opmode == STATIONAP_MODE) { | ||||
|                 uint8_t hwaddr[6]; | ||||
|  | @ -204,7 +208,8 @@ void websocket_task(void *pvParameter) { | |||
| 
 | ||||
|         } | ||||
| 
 | ||||
|         vTaskDelayMs(250); | ||||
| 
 | ||||
|         taskYIELD(); | ||||
|         { | ||||
|             uint8_t response[3]; | ||||
|             uint16_t val; | ||||
|  | @ -354,11 +359,11 @@ void websocket_cb(struct tcp_pcb *pcb, char *data, u16_t data_len, | |||
|     if(ret == OK) { | ||||
|         if(cmd == 'R' || cmd == 'C') { // Restart
 | ||||
|             printf("rebooting now"); | ||||
|             vTaskDelay(1000 / portTICK_PERIOD_MS); | ||||
|             taskYIELD(); | ||||
|             vPortEnterCritical(); | ||||
|             sdk_system_restart(); | ||||
|         } else if(cmd == 'X') { // Clear Config
 | ||||
|             vTaskDelay(1000 / portTICK_PERIOD_MS); | ||||
|             taskYIELD(); | ||||
|             system_clear_config(); | ||||
|         } | ||||
|     } | ||||
|  | @ -378,8 +383,9 @@ void websocket_open_cb(struct tcp_pcb *pcb, const char *uri) { | |||
| extern "C" void httpd_task(void *pvParameters) { | ||||
|     (void) pvParameters; | ||||
| 
 | ||||
|     while (!uxSemaphoreGetCount(wifi_available_semaphore)) | ||||
|         vTaskDelay(500 / portTICK_PERIOD_MS); | ||||
|     //while (!uxSemaphoreGetCount(wifi_available_semaphore))
 | ||||
|     //    taskYIELD();
 | ||||
|     printf("httpd_task: wifi is available\n"); | ||||
|     websocket_register_callbacks((tWsOpenHandler) websocket_open_cb, (tWsHandler) websocket_cb); | ||||
|     httpd_init(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -32,6 +32,7 @@ char *wifi_ap_ssid = nullptr; | |||
| char *wifi_ap_password = nullptr; | ||||
| 
 | ||||
| SemaphoreHandle_t wifi_available_semaphore = nullptr; | ||||
| SemaphoreHandle_t wifi_alive = nullptr; | ||||
| 
 | ||||
| [[noreturn]] static void dns_task(void *pvParameters) { | ||||
|     char *wifi_ap_ip_addr = nullptr; | ||||
|  | @ -347,5 +348,38 @@ extern "C" void wifi_task(void *pvParameters) { | |||
|     xSemaphoreGive(wifi_available_semaphore); | ||||
| 
 | ||||
|     //monitor loop connection here
 | ||||
|     vTaskDelete(nullptr); | ||||
|     uint8_t status = 0; | ||||
|     uint8_t retries = 30; | ||||
| 
 | ||||
|     while (1) { | ||||
|         while ((status != STATION_GOT_IP) && (retries)) { | ||||
|             status = sdk_wifi_station_get_connect_status(); | ||||
|             printf("%s: status = %d\n\r", __func__, status); | ||||
|             if(status == STATION_WRONG_PASSWORD) { | ||||
|                 printf("WiFi: wrong password\n\r"); | ||||
|                 break; | ||||
|             } else if(status == STATION_NO_AP_FOUND) { | ||||
|                 printf("WiFi: AP not found\n\r"); | ||||
|                 break; | ||||
|             } else if(status == STATION_CONNECT_FAIL) { | ||||
|                 printf("WiFi: connection failed\r\n"); | ||||
|                 break; | ||||
|             } | ||||
|             vTaskDelay(1000 / portTICK_PERIOD_MS); | ||||
|             --retries; | ||||
|         } | ||||
|         if(status == STATION_GOT_IP) { | ||||
|             printf("WiFi: Connected\n\r"); | ||||
|             xSemaphoreGive(wifi_alive); | ||||
|             taskYIELD(); | ||||
|         } | ||||
| 
 | ||||
|         while ((status = sdk_wifi_station_get_connect_status()) == STATION_GOT_IP) { | ||||
|             xSemaphoreGive(wifi_alive); | ||||
|             taskYIELD(); | ||||
|         } | ||||
|         printf("WiFi: disconnected\n\r"); | ||||
|         sdk_wifi_station_disconnect(); | ||||
|         vTaskDelay(1000 / portTICK_PERIOD_MS); | ||||
|     } | ||||
| } | ||||
|  | @ -13,6 +13,7 @@ extern "C" { | |||
| #endif | ||||
| 
 | ||||
| extern SemaphoreHandle_t wifi_available_semaphore; | ||||
| extern SemaphoreHandle_t wifi_alive; | ||||
| 
 | ||||
| void wifi_task(void *pvParameters); | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue