From c3143ab956a471526ab9ff23c4e59887f31f221b Mon Sep 17 00:00:00 2001 From: impressionyang Date: Thu, 29 Sep 2022 22:26:38 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=85=20=E6=B7=BB=E5=8A=A0=EF=BC=88WiFi=20a?= =?UTF-8?q?pp=EF=BC=89=EF=BC=9A=E6=B7=BB=E5=8A=A0wifi=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=EF=BC=8C=E5=8F=AF=E4=BB=A5=E8=BF=90=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/APP/app_task_wifi/app_task_wifi.c | 133 +++++++++++++++++++++++++ main/APP/app_task_wifi/app_task_wifi.h | 36 +++++++ main/CMakeLists.txt | 2 + main/hello_world_main.c | 18 ++++ 4 files changed, 189 insertions(+) create mode 100644 main/APP/app_task_wifi/app_task_wifi.c create mode 100644 main/APP/app_task_wifi/app_task_wifi.h diff --git a/main/APP/app_task_wifi/app_task_wifi.c b/main/APP/app_task_wifi/app_task_wifi.c new file mode 100644 index 0000000..0a0a432 --- /dev/null +++ b/main/APP/app_task_wifi/app_task_wifi.c @@ -0,0 +1,133 @@ +/** + * @file app_task_wifi.c + * @author impressionyang (impressionyang@outlook.com) + * @brief + * @version 0.1 + * @date 2022-09-29 + * _ _ + * (_)_ _ ___ _______ ___ ___ (_)__ ___ __ _____ ____ ___ _ + * / / ' \/ _ \/ __/ -_|_-<(_- + * Date Version Author Description + * 2022-09-29 v1.0 impressionyang 内容 + * + */ +#include "app_task_wifi.h" +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" + +#include "freertos/event_groups.h" +#include "esp_wifi.h" +#include "esp_log.h" +#include "esp_event.h" + +/* Set the SSID and Password via project configuration, or can set directly here */ +#define DEFAULT_SSID "1022" +#define DEFAULT_PWD "w15077040648" + +#if CONFIG_EXAMPLE_WIFI_ALL_CHANNEL_SCAN +#define DEFAULT_SCAN_METHOD WIFI_ALL_CHANNEL_SCAN +#elif CONFIG_EXAMPLE_WIFI_FAST_SCAN +#define DEFAULT_SCAN_METHOD WIFI_FAST_SCAN +#else +#define DEFAULT_SCAN_METHOD WIFI_FAST_SCAN +#endif /*CONFIG_EXAMPLE_SCAN_METHOD*/ + +#if CONFIG_EXAMPLE_WIFI_CONNECT_AP_BY_SIGNAL +#define DEFAULT_SORT_METHOD WIFI_CONNECT_AP_BY_SIGNAL +#elif CONFIG_EXAMPLE_WIFI_CONNECT_AP_BY_SECURITY +#define DEFAULT_SORT_METHOD WIFI_CONNECT_AP_BY_SECURITY +#else +#define DEFAULT_SORT_METHOD WIFI_CONNECT_AP_BY_SIGNAL +#endif /*CONFIG_EXAMPLE_SORT_METHOD*/ + +#if CONFIG_EXAMPLE_FAST_SCAN_THRESHOLD +#define DEFAULT_RSSI CONFIG_EXAMPLE_FAST_SCAN_MINIMUM_SIGNAL +#if CONFIG_EXAMPLE_FAST_SCAN_WEAKEST_AUTHMODE_OPEN +#define DEFAULT_AUTHMODE WIFI_AUTH_OPEN +#elif CONFIG_EXAMPLE_FAST_SCAN_WEAKEST_AUTHMODE_WEP +#define DEFAULT_AUTHMODE WIFI_AUTH_WEP +#elif CONFIG_EXAMPLE_FAST_SCAN_WEAKEST_AUTHMODE_WPA +#define DEFAULT_AUTHMODE WIFI_AUTH_WPA_PSK +#elif CONFIG_EXAMPLE_FAST_SCAN_WEAKEST_AUTHMODE_WPA2 +#define DEFAULT_AUTHMODE WIFI_AUTH_WPA2_PSK +#else +#define DEFAULT_AUTHMODE WIFI_AUTH_OPEN +#endif +#else +#define DEFAULT_RSSI -127 +#define DEFAULT_AUTHMODE WIFI_AUTH_OPEN +#endif /*CONFIG_EXAMPLE_FAST_SCAN_THRESHOLD*/ + +static const char *TAG = "scan"; + +static void event_handler(void* arg, esp_event_base_t event_base, + int32_t event_id, void* event_data) +{ + if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START) { + esp_wifi_connect(); + } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) { + esp_wifi_connect(); + } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) { + ip_event_got_ip_t* event = (ip_event_got_ip_t*) event_data; + ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip)); + } +} + + +/* Initialize Wi-Fi as sta and set scan method */ +static void fast_scan(void) +{ + ESP_ERROR_CHECK(esp_netif_init()); + ESP_ERROR_CHECK(esp_event_loop_create_default()); + + wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); + ESP_ERROR_CHECK(esp_wifi_init(&cfg)); + + ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL, NULL)); + ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler, NULL, NULL)); + + // Initialize default station as network interface instance (esp-netif) + esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta(); + assert(sta_netif); + + // Initialize and start WiFi + wifi_config_t wifi_config = { + .sta = { + .ssid = DEFAULT_SSID, + .password = DEFAULT_PWD, + .scan_method = DEFAULT_SCAN_METHOD, + .sort_method = DEFAULT_SORT_METHOD, + .threshold.rssi = DEFAULT_RSSI, + .threshold.authmode = DEFAULT_AUTHMODE, + }, + }; + ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); + ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config)); + ESP_ERROR_CHECK(esp_wifi_start()); +} + +static void _app_wifi_task_run(void *param) +{ + fast_scan(); + while(1) { + vTaskDelay(100); + } +} + +uint8_t app_task_wifi_start() +{ + vTaskDelay(10); + xTaskCreatePinnedToCore(_app_wifi_task_run, "wifi app task", 4096, NULL, 5, NULL, tskNO_AFFINITY); + return 0; +} + +uint8_t app_task_wifi_stop() +{ + return 0; +} \ No newline at end of file diff --git a/main/APP/app_task_wifi/app_task_wifi.h b/main/APP/app_task_wifi/app_task_wifi.h new file mode 100644 index 0000000..b34c164 --- /dev/null +++ b/main/APP/app_task_wifi/app_task_wifi.h @@ -0,0 +1,36 @@ +/** + * @file app_task_wifi.h + * @author impressionyang (impressionyang@outlook.com) + * @brief + * @version 0.1 + * @date 2022-09-29 + * _ _ + * (_)_ _ ___ _______ ___ ___ (_)__ ___ __ _____ ____ ___ _ + * / / ' \/ _ \/ __/ -_|_-<(_- + * Date Version Author Description + * 2022-09-29 v1.0 impressionyang 内容 + * + */ +#ifndef __APP_TASK_WIFI_H__ +#define __APP_TASK_WIFI_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +uint8_t app_task_wifi_start(); + +uint8_t app_task_wifi_stop(); + +#ifdef __cplusplus +} +#endif +#endif//__APP_TASK_WIFI_H__ \ No newline at end of file diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index cb8e39b..18a72c3 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -2,7 +2,9 @@ idf_component_register( SRC_DIRS "." "APP/app_task_hello" + "APP/app_task_wifi" INCLUDE_DIRS "." "APP/app_task_hello" + "APP/app_task_wifi" ) diff --git a/main/hello_world_main.c b/main/hello_world_main.c index ab418dc..d6821af 100644 --- a/main/hello_world_main.c +++ b/main/hello_world_main.c @@ -12,13 +12,31 @@ #include "freertos/task.h" #include "esp_system.h" #include "esp_spi_flash.h" +#include "nvs_flash.h" #include "app_task_hello.h" +#include "app_task_wifi.h" + +static void _init_esp() +{ + // Initialize NVS + esp_err_t ret = nvs_flash_init(); + if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) { + ESP_ERROR_CHECK(nvs_flash_erase()); + ret = nvs_flash_init(); + } + ESP_ERROR_CHECK( ret ); +} void app_main(void) { printf("Hello world!\n"); + + vTaskDelay(10); + + _init_esp(); app_hello_task_start(); + app_task_wifi_start(); /* Print chip information */ esp_chip_info_t chip_info;