#include "qthing.h" #include "network.h" #include "io.h" #include "environment.h" #include "device/device_config.h" #include "event.h" #include "mqtt.h" #include "freertos/FreeRTOS.h" #include "freertos/task.h" #include "freertos/event_groups.h" #include <lwip/sockets.h> #include "esp_wifi.h" #include "esp_log.h" #include "esp_event_loop.h" #include "nvs_flash.h" #define TAG "qthing-network" bool connected = false; void start_network_clients_task(void* arg) { mqtt_client_start(); vTaskDelete(NULL); } static esp_err_t event_handler(void *ctx, system_event_t *event) { switch(event->event_id) { case SYSTEM_EVENT_STA_START: ESP_LOGI(TAG, "SYSTEM_EVENT_STA_START"); log_oled("WLAN connecting"); update_wlan_connection_status(2); ESP_ERROR_CHECK(tcpip_adapter_set_hostname(TCPIP_ADAPTER_IF_STA, DEVICE_NAME)); ESP_ERROR_CHECK(esp_wifi_connect()); break; case SYSTEM_EVENT_STA_GOT_IP: ESP_LOGI(TAG, "SYSTEM_EVENT_STA_GOT_IP"); ESP_LOGI(TAG, "got ip:%s\n", ip4addr_ntoa(&event->event_info.got_ip.ip_info.ip)); log_oled("WLAN connected"); update_wlan_connection_status(1); if (!connected) { connected = true; set_status_led(0); xTaskCreate(start_network_clients_task, "start_network_clients_task", 4096, NULL, 7, NULL); } break; case SYSTEM_EVENT_STA_DISCONNECTED: ESP_LOGI(TAG, "SYSTEM_EVENT_STA_DISCONNECTED"); log_oled("WLAN disconnected"); update_wlan_connection_status(3); ESP_ERROR_CHECK(esp_wifi_connect()); break; default: break; } return ESP_OK; } void enable_wlan() { set_status_led(1); log_oled("WLAN initializing"); update_wlan_connection_status(2); // Initialize NVS esp_err_t ret = nvs_flash_init(); if (ret == ESP_ERR_NVS_NO_FREE_PAGES) { ESP_ERROR_CHECK(nvs_flash_erase()); ret = nvs_flash_init(); } ESP_ERROR_CHECK( ret ); tcpip_adapter_init(); // Don't run a DHCP client #ifdef STATIC_IP tcpip_adapter_dhcpc_stop(TCPIP_ADAPTER_IF_STA); tcpip_adapter_ip_info_t ipInfo; inet_pton(AF_INET, DEVICE_IP, &ipInfo.ip); inet_pton(AF_INET, DEVICE_GW, &ipInfo.gw); inet_pton(AF_INET, DEVICE_NETMASK, &ipInfo.netmask); tcpip_adapter_set_ip_info(TCPIP_ADAPTER_IF_STA, &ipInfo); #endif ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL)); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg)); wifi_config_t wifi_config = { WLAN_SSID, WLAN_PASSPHRASE }; ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config)); ESP_ERROR_CHECK(esp_wifi_start()); }