From 8c8e58fec2e09e8c145e1b2be8ad56d4f02ede9c Mon Sep 17 00:00:00 2001 From: jarvis Date: Mon, 10 Mar 2025 18:07:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E6=AD=A3=E5=B8=B8WiFi?= =?UTF-8?q?=E6=89=AB=E6=8F=8F=E7=9A=84=E7=A8=8B=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 4 +- components/FluxPower/FluxPower.c | 5 +- components/FluxSD/FluxSD.c | 17 ++- components/FluxWifi/CMakeLists.txt | 3 + components/FluxWifi/FluxWifi.c | 190 +++++++++++++++++++++++++++++ components/FluxWifi/FluxWifi.h | 23 ++++ main/CMakeLists.txt | 2 +- main/i80_controller_example_main.c | 6 + partitions_lvgl_example.csv | 2 +- sdkconfig | 12 +- 10 files changed, 251 insertions(+), 13 deletions(-) create mode 100644 components/FluxWifi/CMakeLists.txt create mode 100644 components/FluxWifi/FluxWifi.c create mode 100644 components/FluxWifi/FluxWifi.h diff --git a/.vscode/settings.json b/.vscode/settings.json index 4d4ce1b..fece4a4 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -22,6 +22,8 @@ "array": "c", "string": "c", "string_view": "c", - "span": "c" + "span": "c", + "esp_vfs_fat.h": "c", + "cstdlib": "c" } } diff --git a/components/FluxPower/FluxPower.c b/components/FluxPower/FluxPower.c index ef8368f..c05fbe9 100644 --- a/components/FluxPower/FluxPower.c +++ b/components/FluxPower/FluxPower.c @@ -3,6 +3,7 @@ static const char *TAG = "POWER_IO"; +/*电量变化引起的界面控件参数变化*/ extern lv_obj_t * ui_Batinfo_valueVoltage; extern lv_obj_t * ui_Batinfo_valueVolume; extern lv_obj_t * ui_Batinfo_SpinboxBAT; @@ -38,9 +39,9 @@ void powerTask(void) lv_slider_set_value(ui_Home_SliderHeaderBat,Bat_Voltage_Value/4.2*100,LV_ANIM_ON); lv_label_set_text_fmt(ui_Home_LabelHeaderBatValue,"%.0f%%",Bat_Voltage_Value/4.2*100); - ESP_LOGI("dd","%d",Bat_Adc_Value); + // ESP_LOGI("dd","%d",Bat_Adc_Value); - printf("in powerTask the min free stack size is %ld \r\n", (int32_t)uxTaskGetStackHighWaterMark(NULL)); + //printf("in powerTask the min free stack size is %ld \r\n", (int32_t)uxTaskGetStackHighWaterMark(NULL)); } } diff --git a/components/FluxSD/FluxSD.c b/components/FluxSD/FluxSD.c index 4f81908..2208dde 100644 --- a/components/FluxSD/FluxSD.c +++ b/components/FluxSD/FluxSD.c @@ -131,6 +131,10 @@ static esp_err_t s_example_read_file(const char *path) return ESP_OK; } + uint64_t total_bytes = 0; + uint64_t free_bytes = 0; + float free_percent = 0; + void flux_sd_init(void) { esp_err_t ret; @@ -161,7 +165,6 @@ void flux_sd_init(void) ESP_LOGI(TAG, "Mounting filesystem"); ret = esp_vfs_fat_sdmmc_mount(mount_point, &host, &slot_config, &mount_config, &card); - if (ret != ESP_OK) { if (ret == ESP_FAIL) { ESP_LOGE(TAG, "Failed to mount filesystem. " @@ -174,7 +177,7 @@ void flux_sd_init(void) return; } ESP_LOGI(TAG, "Filesystem mounted"); - + printf("hello!"); sdmmc_card_print_info(stdout, card); @@ -186,6 +189,16 @@ void flux_sd_init(void) if (ret != ESP_OK) { return; } + + + esp_vfs_fat_info(MOUNT_POINT,&total_bytes,&free_bytes); + + free_percent = (float)free_bytes / (float)total_bytes * 100; + + printf("Total space: %llu\n", total_bytes); + printf("Free space: %llu\n", free_bytes); + printf("Free percent: %.3f\n", free_percent); + } diff --git a/components/FluxWifi/CMakeLists.txt b/components/FluxWifi/CMakeLists.txt new file mode 100644 index 0000000..9099f69 --- /dev/null +++ b/components/FluxWifi/CMakeLists.txt @@ -0,0 +1,3 @@ +idf_component_register(SRCS "FluxWifi.c" + INCLUDE_DIRS "." + REQUIRES driver lwip freertos esp_wifi nvs_flash) diff --git a/components/FluxWifi/FluxWifi.c b/components/FluxWifi/FluxWifi.c new file mode 100644 index 0000000..3b6d10b --- /dev/null +++ b/components/FluxWifi/FluxWifi.c @@ -0,0 +1,190 @@ +#include +#include "FluxWifi.h" + + +wifi_ap_record_t ap_info[DEFAULT_SCAN_LIST_SIZE]; +int number = 0,ap_count=0; + +static const char* TAG = "wifi_scan"; +/** + * @brief Wi-FiʼΪstaɨ跽 + * @param + * @retval + */ +void wifi_scan(void) +{ + ESP_ERROR_CHECK(nvs_flash_init()); + ESP_ERROR_CHECK(esp_netif_init()); + ESP_ERROR_CHECK(esp_event_loop_create_default()); + vTaskDelay(50 / portTICK_PERIOD_MS); + + esp_netif_create_default_wifi_sta(); + + /* wifióʼ */ + wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); + ESP_ERROR_CHECK(esp_wifi_init(&cfg)); + memset(ap_info, 0, sizeof(ap_info)); + + /* WIFIΪSTAģʽ */ + ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA)); + + /* WIFI */ + ESP_ERROR_CHECK(esp_wifi_start()); + + /* ʼɨ踽WIFI, ȴɨ */ + esp_wifi_scan_start(NULL, true); + + /* ȡɨ */ + get_wifi_scan_result(); + + return; +} + + +/** + * @brief ȡWi-Fiɨ + * @param + * @retval + */ +static void get_wifi_scan_result(void) +{ + number = DEFAULT_SCAN_LIST_SIZE; + ap_count = 0; + + /* ȡϴɨҵAP */ + ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(&ap_count)); + /* ȡϴɨҵAPб */ + ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&number, ap_info)); + + /* ӡWIFIɨ */ + print_wifi_scan_result(ap_count, number); + + return; +} + +/** + * @brief ֤ģʽ + * @param authmode :֤ģʽ + * @retval + */ +static void print_auth_mode(int authmode) +{ + switch (authmode) { + case WIFI_AUTH_OPEN: + ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_OPEN"); + break; + case WIFI_AUTH_OWE: + ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_OWE"); + break; + case WIFI_AUTH_WEP: + ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WEP"); + break; + case WIFI_AUTH_WPA_PSK: + ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA_PSK"); + break; + case WIFI_AUTH_WPA2_PSK: + ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA2_PSK"); + break; + case WIFI_AUTH_WPA_WPA2_PSK: + ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA_WPA2_PSK"); + break; + case WIFI_AUTH_WPA2_ENTERPRISE: + ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA2_ENTERPRISE"); + break; + case WIFI_AUTH_WPA3_PSK: + ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA3_PSK"); + break; + case WIFI_AUTH_WPA2_WPA3_PSK: + ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA2_WPA3_PSK"); + break; + default: + ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_UNKNOWN"); + break; + } +} + +/** + * @brief ӡWIFI + * @param pairwise_cipher : + * @param group_cipher :Ⱥ + * @retval + */ +static void print_cipher_type(int pairwise_cipher, int group_cipher) +{ + switch (pairwise_cipher) { + case WIFI_CIPHER_TYPE_NONE: + ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_NONE"); + break; + case WIFI_CIPHER_TYPE_WEP40: + ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_WEP40"); + break; + case WIFI_CIPHER_TYPE_WEP104: + ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_WEP104"); + break; + case WIFI_CIPHER_TYPE_TKIP: + ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_TKIP"); + break; + case WIFI_CIPHER_TYPE_CCMP: + ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_CCMP"); + break; + case WIFI_CIPHER_TYPE_TKIP_CCMP: + ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_TKIP_CCMP"); + break; + default: + ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_UNKNOWN"); + break; + } + + switch (group_cipher) { + case WIFI_CIPHER_TYPE_NONE: + ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_NONE"); + break; + case WIFI_CIPHER_TYPE_WEP40: + ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_WEP40"); + break; + case WIFI_CIPHER_TYPE_WEP104: + ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_WEP104"); + break; + case WIFI_CIPHER_TYPE_TKIP: + ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_TKIP"); + break; + case WIFI_CIPHER_TYPE_CCMP: + ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_CCMP"); + break; + case WIFI_CIPHER_TYPE_TKIP_CCMP: + ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_TKIP_CCMP"); + break; + default: + ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_UNKNOWN"); + break; + } +} + +/** + * @brief ӡWi-Fiɨ + * @param ap_count ʵɨAP + * @param number ɴӡAPϢ + * @retval + */ +static void print_wifi_scan_result(uint16_t ap_count, uint16_t number) +{ + /* ӡWIFIϢ */ + ESP_LOGI(TAG, "wifi scan result, ap_count = %u, number = %u", ap_count, number); + + for (int i = 0; (i < DEFAULT_SCAN_LIST_SIZE) && (i < ap_count); i++) { + ESP_LOGI(TAG, "SSID \t\t%s", ap_info[i].ssid); + ESP_LOGI(TAG, "RSSI \t\t%d", ap_info[i].rssi); + + /* ܷʽ */ + print_auth_mode(ap_info[i].authmode); + /* */ + if (ap_info[i].authmode != WIFI_AUTH_WEP) { + print_cipher_type(ap_info[i].pairwise_cipher, ap_info[i].group_cipher); + } + + ESP_LOGI(TAG, "Channel \t\t%d\n", ap_info[i].primary); + } + + return; +} + diff --git a/components/FluxWifi/FluxWifi.h b/components/FluxWifi/FluxWifi.h new file mode 100644 index 0000000..3bf4334 --- /dev/null +++ b/components/FluxWifi/FluxWifi.h @@ -0,0 +1,23 @@ +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/event_groups.h" +#include "esp_system.h" +#include "esp_wifi.h" +#include "esp_event.h" +#include "esp_log.h" +#include "nvs_flash.h" + +#include "lwip/err.h" +#include "lwip/sys.h" + + +#define DEFAULT_SCAN_LIST_SIZE 10 + + +static void print_wifi_scan_result(uint16_t ap_count, uint16_t number); +static void print_cipher_type(int pairwise_cipher, int group_cipher); +static void print_auth_mode(int authmode); +static void get_wifi_scan_result(void); +void wifi_scan(void); + diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 7708630..19a404e 100644 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -4,7 +4,7 @@ if(CONFIG_EXAMPLE_LCD_IMAGE_FROM_EMBEDDED_BINARY) endif() idf_component_register(SRCS "i80_controller_example_main.c" "lvgl_demo_ui.c" ${embedded_images} -REQUIRES FluxUI FluxPower spiffs FluxSD FluxMod FluxButton +REQUIRES FluxUI FluxPower spiffs FluxSD FluxMod FluxButton FluxWifi INCLUDE_DIRS ".") if(CONFIG_EXAMPLE_LCD_IMAGE_FROM_FILE_SYSTEM) diff --git a/main/i80_controller_example_main.c b/main/i80_controller_example_main.c index d9febf8..c50c57d 100644 --- a/main/i80_controller_example_main.c +++ b/main/i80_controller_example_main.c @@ -38,6 +38,9 @@ /*添加电量监测头文件*/ #include "FluxPower.h" +/*添加WiFi管理头文件*/ +#include "FluxWifi.h" + static const char *TAG = "example"; #include "modbus_params.h" @@ -373,6 +376,9 @@ void app_main(void) /*拉起开机状态*/ POWER_ON; + /*进行WIFI扫描*/ + wifi_scan(); + static lv_disp_draw_buf_t disp_buf; // contains internal graphic buffer(s) called draw buffer(s) static lv_disp_drv_t disp_drv; // contains callback functions diff --git a/partitions_lvgl_example.csv b/partitions_lvgl_example.csv index 3141d59..c11b9e8 100644 --- a/partitions_lvgl_example.csv +++ b/partitions_lvgl_example.csv @@ -2,5 +2,5 @@ # Note: if you have increased the bootloader size, make sure to update the offsets to avoid overlap nvs, data, nvs, 0x9000, 0x6000, phy_init, data, phy, 0xf000, 0x1000, -factory, app, factory, 0x10000, 1M, +factory, app, factory, 0x10000, 2M, storage, data, spiffs, , 0xF0000, diff --git a/sdkconfig b/sdkconfig index 0b8f7a0..23eda9b 100644 --- a/sdkconfig +++ b/sdkconfig @@ -518,12 +518,12 @@ CONFIG_ESPTOOLPY_MONITOR_BAUD=115200 # # Partition Table # -CONFIG_PARTITION_TABLE_SINGLE_APP=y +# CONFIG_PARTITION_TABLE_SINGLE_APP is not set # CONFIG_PARTITION_TABLE_SINGLE_APP_LARGE is not set # CONFIG_PARTITION_TABLE_TWO_OTA is not set -# CONFIG_PARTITION_TABLE_CUSTOM is not set -CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions.csv" -CONFIG_PARTITION_TABLE_FILENAME="partitions_singleapp.csv" +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions_lvgl_example.csv" +CONFIG_PARTITION_TABLE_FILENAME="partitions_lvgl_example.csv" CONFIG_PARTITION_TABLE_OFFSET=0x8000 CONFIG_PARTITION_TABLE_MD5=y # end of Partition Table @@ -1124,7 +1124,7 @@ CONFIG_ESP_SYSTEM_MEMPROT_FEATURE_LOCK=y CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304 -CONFIG_ESP_MAIN_TASK_STACK_SIZE=4096 +CONFIG_ESP_MAIN_TASK_STACK_SIZE=16384 CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y # CONFIG_ESP_MAIN_TASK_AFFINITY_CPU1 is not set # CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set @@ -2475,7 +2475,7 @@ CONFIG_ESP32S3_DEFAULT_CPU_FREQ_160=y CONFIG_ESP32S3_DEFAULT_CPU_FREQ_MHZ=160 CONFIG_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE=2304 -CONFIG_MAIN_TASK_STACK_SIZE=4096 +CONFIG_MAIN_TASK_STACK_SIZE=16384 CONFIG_CONSOLE_UART_DEFAULT=y # CONFIG_CONSOLE_UART_CUSTOM is not set # CONFIG_CONSOLE_UART_NONE is not set