一、什么是ESP32的STA模式?
ESP32 的 STA 模式(Station 模式)指的是设备作为 WiFi 客户端连接到已有的无线网络(如家庭或办公室的路由器)。在这种模式下,ESP32 会扫描周围的 WiFi 网络,连接到指定的网络,并通过 DHCP 或静态配置获得一个 IP 地址,从而加入局域网或互联网。
主要特点
- 作为客户端:ESP32 在 STA 模式下不是创建自己的网络,而是加入已有的网络,类似于笔记本电脑、手机等设备。
- IP 地址分配:连接到 WiFi 后,ESP32 会通过 DHCP 从路由器获取 IP 地址,这样它就能与网络中的其他设备通信。
- 网络通信:获得 IP 地址后,ESP32 可以通过 TCP/IP 协议与远程服务器、云平台或者局域网内的其他设备进行数据交换。
- 常用场景:智能家居、物联网设备、数据采集终端、远程控制等应用,都是利用 STA 模式连接到互联网或局域网。
总结
- STA 模式 是 ESP32 作为客户端连接到现有 WiFi 网络的模式。
- 主要应用于需要联网访问互联网或局域网资源的设备。
- 通过适当初始化 NVS、esp-netif、事件循环和 WiFi 驱动,ESP32 能够在 STA 模式下正常连接并获取 IP 地址,从而实现网络通信。
这种模式在物联网设备中非常常见,有助于实现数据上传、远程控制以及与云平台的通信。
二、如何在ESP32上实现STA模式?
1.初始化NVS(非易失性存储)
在使用 WiFi 功能之前,必须初始化 NVS,因为 WiFi 驱动会从 NVS 中读取配置信息。
流程:
- 调用
nvs_flash_init()
初始化 NVS。 - 如果返回错误(例如内存页不足或版本不匹配),则先擦除 NVS 再重新初始化。
示例代码:
esp_err_t nvs_init(void)
{
esp_err_t ret;
ret = nvs_flash_init(); /* 初始化 NVS 第一次调用时,它会加载存储区域。如果存储区域有问题或不兼容,会抛出 ESP_ERR_NVS_NO_FREE_PAGES 或 ESP_ERR_NVS_NEW_VERSION_FOUND 错误。此时,我们会擦除存储并重新初始化。 */
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();
}
return ret;
}
2.创建Wi-Fi驱动事件循环并初始化和注册事件
//1.创建新的事件循环.
ESP_ERROR_CHECK(esp_event_loop_create_default());
//2.初始化WIFI连接/断开的标志事件组
wifi_event_group = xEventGroupCreate();
//3.注册事件ID和IP获取服务函数
ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,ESP_EVENT_ANY_ID,&wifi_event_handler,NULL,NULL));
ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,IP_EVENT_STA_GOT_IP,&wifi_event_handler,NULL,NULL));
3.网卡初始化并配置Wi-Fi为STA模式
//4.网卡初始化.初始化底层TCP/IP堆栈
ESP_ERROR_CHECK(esp_netif_init());
//5.使用默认WiFi Station配置创建esp_netif对象,将netif连接到WiFi并注册默认WiFi处理程序。
esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta();
assert(sta_netif); //断言检查,确保程序在运行时满足特定的条件.
//6.netif连接到WiFi并注册默认WiFi处理程序。
esp_netif_set_default_netif(sta_netif);
//7.初始化wifi配置参数为默认.
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
//8.为 WiFi 驱动初始化 WiFi 分配资源,如 WiFi 控制结构、RX/TX 缓冲区、WiFi NVS 结构等,这个 WiFi 也启动 WiFi 任务。必须先调用此API,然后才能调用所有其他WiFi API
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
ESP_LOGI(TAG_STA, "wifi init cfg !");
//9.设置WIFI为STA模式
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
ESP_LOGI(TAG_STA, "wifi set sta mode !");
//10.设置WIFI STA模式的配置
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, wifi_sta_cfg) );
ESP_LOGI(TAG_STA, "wifi init sta finished !");
4.启动Wi-Fi并连接
//11.启动WIFI
ESP_ERROR_CHECK(esp_wifi_start());
ESP_LOGI(TAG_STA, "wifi start !");
三、事件处理(关键步骤)
为了监控连接状态、IP 地址获取和断开连接等事件,需要注册事件处理函数。主要关注以下事件:
- WIFI_EVENT_STA_START:当 STA 模式启动时触发,可以主动调用
esp_wifi_connect()
。 - WIFI_EVENT_STA_DISCONNECTED:当 STA 断开连接时触发,可以重新连接。
- IP_EVENT_STA_GOT_IP:当通过 DHCP 获取到 IP 地址时触发。
示例代码:
/*
函数功能:WIFI连接事件回调服务函数,由于处理特定的WIFI事件
函数形参:
arg:传入网卡控制块
event_base:WIFI 事件
event_id:事件 ID
event_data:事件数据
*/
static void wifi_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)
{
memcpy(wifi_sta_net_info.target_ap_ssid,wifi_sta_config.sta.ssid,sizeof(wifi_sta_config.sta.ssid));
memcpy(wifi_sta_net_info.target_ap_password,wifi_sta_config.sta.password,sizeof(wifi_sta_config.sta.password));
esp_wifi_connect(); //连接目标AP
ESP_LOGI(TAG_STA, "Station started ! event_id = %d",event_id);
}
else if(event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_CONNECTED)
{
ESP_LOGI(TAG_STA,"Connect target ap successed ! event_id = %d",event_id);
xEventGroupSetBits(wifi_event_group, WIFI_CONNECTED_BIT);
}
else if(event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP)
{
s_retry_num ++;
ip_event_got_ip_t *event = (ip_event_got_ip_t *) event_data;
//ESP_LOGI(TAG_STA, "Got IP:" IPSTR, IP2STR(&event->ip_info.ip));
wifi_sta_net_info.sta_ip = event->ip_info.ip;
wifi_sta_net_info.target_ap_gw = event->ip_info.gw;
wifi_sta_net_info.target_ap_mask = event->ip_info.netmask;
ESP_ERROR_CHECK(esp_read_mac(wifi_sta_net_info.sta_mac,ESP_IF_WIFI_STA));
xEventGroupSetBits(wifi_event_group, WIFI_STA_GET_IP_BIT);
}
else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED)
{
if (s_retry_num < WIFI_STA_MAXIMUM_RETRY) //标记连接目标AP失败
{
xEventGroupClearBits(wifi_event_group, WIFI_CONNECTED_BIT);
xEventGroupSetBits(wifi_event_group, WIFI_FAIL_BIT);
s_retry_num++;
ESP_LOGI(TAG_STA, "\nThe target AP may not exist ! s_retry_num = %d\n retry to connect to the AP...",s_retry_num);
}
else //重新开始连接目标AP
{
s_retry_num = 0;
esp_wifi_connect();//连接目标AP
}
ESP_LOGI(TAG_STA,"Connect to the AP fail ! event_id = %d ",event_id);
}
else
{
ESP_LOGI(TAG_STA,"Unexpected event ! event_id = %d \n",event_id);
//esp_wifi_connect();//连接目标AP
}
}
四、测试ESP32 STA模式
测试示例代码:
/*
函数功能:WIFI STA模式连接AP测试
形 参:无
返 回 值:无
*/
void wifi_sta_test(void *pvParameters)
{
uint8_t displayFlag=0;
st7789v_clearScreen(WHITE,USE_HORIZONTAL);
wifi_sta_init(&wifi_sta_config);
while (1)
{
//等待事件标志位:等待网络连接成功/失败。成功和失败的bits会在上面注册的wifi_event_handler函数中被设置。
//xEventGroupWaitBits(事件组句柄,要等待的事件位,是否在函数返回前清除触发的标志位,是否等待所有指定的标志位,等待的时间(以系统滴答为单位) );
EventBits_t bits = xEventGroupWaitBits(wifi_event_group,WIFI_CONNECTED_BIT | WIFI_STA_GET_IP_BIT | WIFI_FAIL_BIT,pdTRUE,pdFALSE,pdMS_TO_TICKS(2000));
if(bits & WIFI_FAIL_BIT) //如果连接目标AP失败
{
display_wifi_connect_info_to_lcd(2);
esp_wifi_connect();
}
else if(bits & WIFI_STA_GET_IP_BIT)
{
display_wifi_connect_info_to_lcd(1);
s_retry_num = 0;
//*(uint8_t *)pvParameters = 1;
}
}
}
附录:完整的ESP32 STA模式实现代码
bsp_wifi_sta.h
#ifndef __BSP_WIFI_STA_H
#define __BSP_WIFI_STA_H
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "nvs_flash.h"
#include "esp_wifi.h"
#include "esp_event.h"
#include "esp_mac.h"
#include "esp_log.h"
#include "esp_netif_net_stack.h"
#include "esp_netif.h"
#include "lwip/inet.h"
#include "lwip/netdb.h"
#include "lwip/sockets.h"
#include "lwip/err.h"
#include "lwip/sys.h"
void wifi_sta_test(void *pvParameters);
#endif
bsp_wifi_sta.c
#include"bsp_wifi_sta.h"
#include"bsp_wifi_ap.h"
#include"bsp_delay.h"
#include"bsp_lcd_st7789v_spi.h"
static const char *TAG_STA = "WIFI_STA";
void wifi_sta_init(wifi_config_t *wifi_sta_cfg);
uint16_t wifi_sta_list_get(wifi_ap_record_t *ap_info_buff,uint16_t list_num);
void display_wifi_connect_info_to_lcd(uint8_t displayFlag);
//定义目标AP名称和密码
//#define TARGET_CONNECT_WIFI_SSID "XiaoHai@iPhone"
#define TARGET_CONNECT_WIFI_SSID "PHICOMM_50"
#define TARGET_CONNECT_WIFI_PWD "123456788"
//定义连接目标AP最大重连次数
#define WIFI_STA_MAXIMUM_RETRY 5
//定义事件标志位
#define WIFI_CONNECTED_BIT BIT0
#define WIFI_STA_GET_IP_BIT BIT1
#define WIFI_FAIL_BIT BIT2
//存放WIFI STA 模式下连接目标AP后的信息
typedef struct wifi_sta_connect_Info
{
esp_ip4_addr_t sta_ip; //连接目标AP后获取的IP
uint8_t sta_mac[6]; //WIFI STA 模式下的MAC地址
esp_ip4_addr_t target_ap_gw; //连接目标AP后获取的网关
esp_ip4_addr_t target_ap_mask; //连接目标AP后获取的子网掩码
uint8_t target_ap_ssid[32]; //目标AP的名称
uint8_t target_ap_password[64]; //目标AP的密码
}wifi_sta_connect_info;
wifi_sta_connect_info wifi_sta_net_info={0}; //存放WIFI STA 模式下连接AP后的信息
static int s_retry_num = 0; //重连目标AP的次数
static EventGroupHandle_t wifi_event_group; //定义一个事件标志组,用于WIFI连接/断开的标志
uint8_t lcd_display_buff[100]={0}; //定义LCD显示缓存
wifi_config_t wifi_sta_config = {
.sta = {
.ssid = TARGET_CONNECT_WIFI_SSID,//目标WIFI的
.password = TARGET_CONNECT_WIFI_PWD,//目标WIFI的密码
.scan_method = WIFI_ALL_CHANNEL_SCAN,//扫描所有信道
.failure_retry_cnt = WIFI_STA_MAXIMUM_RETRY, //最大失败重新连接次数
//.threshold.rssi = -75,
.threshold.authmode = WIFI_AUTH_OPEN,//设置设备连接到 Wi-Fi 网络时所要求的最低认证模式,如果目标 Wi-Fi 的认证模式低于设置的 authmode,设备会拒绝连接并返回错误信息。
.sae_pwe_h2e = WPA3_SAE_PWE_BOTH,//设置密码元素生成方式为SAE和PWE。
},
};
esp_err_t nvs_init(void)
{
esp_err_t ret;
ret = nvs_flash_init(); /* 初始化 NVS 第一次调用时,它会加载存储区域。如果存储区域有问题或不兼容,会抛出 ESP_ERR_NVS_NO_FREE_PAGES 或 ESP_ERR_NVS_NEW_VERSION_FOUND 错误。此时,我们会擦除存储并重新初始化。 */
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();
}
return ret;
}
/*
函数功能:WIFI连接事件回调服务函数,由于处理特定的WIFI事件
函数形参:
arg:传入网卡控制块
event_base:WIFI 事件
event_id:事件 ID
event_data:事件数据
*/
static void wifi_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)
{
memcpy(wifi_sta_net_info.target_ap_ssid,wifi_sta_config.sta.ssid,sizeof(wifi_sta_config.sta.ssid));
memcpy(wifi_sta_net_info.target_ap_password,wifi_sta_config.sta.password,sizeof(wifi_sta_config.sta.password));
esp_wifi_connect(); //连接目标AP
ESP_LOGI(TAG_STA, "Station started ! event_id = %d",event_id);
}
else if(event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_CONNECTED)
{
ESP_LOGI(TAG_STA,"Connect target ap successed ! event_id = %d",event_id);
xEventGroupSetBits(wifi_event_group, WIFI_CONNECTED_BIT);
}
else if(event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP)
{
s_retry_num ++;
ip_event_got_ip_t *event = (ip_event_got_ip_t *) event_data;
//ESP_LOGI(TAG_STA, "Got IP:" IPSTR, IP2STR(&event->ip_info.ip));
wifi_sta_net_info.sta_ip = event->ip_info.ip;
wifi_sta_net_info.target_ap_gw = event->ip_info.gw;
wifi_sta_net_info.target_ap_mask = event->ip_info.netmask;
ESP_ERROR_CHECK(esp_read_mac(wifi_sta_net_info.sta_mac,ESP_IF_WIFI_STA));
xEventGroupSetBits(wifi_event_group, WIFI_STA_GET_IP_BIT);
}
else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED)
{
if (s_retry_num < WIFI_STA_MAXIMUM_RETRY) //标记连接目标AP失败
{
xEventGroupClearBits(wifi_event_group, WIFI_CONNECTED_BIT);
xEventGroupSetBits(wifi_event_group, WIFI_FAIL_BIT);
s_retry_num++;
ESP_LOGI(TAG_STA, "\nThe target AP may not exist ! s_retry_num = %d\n retry to connect to the AP...",s_retry_num);
}
else //重新开始连接目标AP
{
s_retry_num = 0;
esp_wifi_connect();//连接目标AP
}
ESP_LOGI(TAG_STA,"Connect to the AP fail ! event_id = %d ",event_id);
}
else
{
ESP_LOGI(TAG_STA,"Unexpected event ! event_id = %d \n",event_id);
//esp_wifi_connect();//连接目标AP
}
}
/*
函数功能:WIFI STA模式初始化
形 参:
wifi_sta_cfg:WIFI的配置
返 回 值:无
*/
void wifi_sta_init(wifi_config_t *wifi_sta_cfg)
{
ESP_LOGI(TAG_STA, "wifi_sta_init.....");
//1.创建新的事件循环.
ESP_ERROR_CHECK(esp_event_loop_create_default());
//2.初始化WIFI连接/断开的标志事件组
wifi_event_group = xEventGroupCreate();
//3.注册事件ID和IP获取服务函数
ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,ESP_EVENT_ANY_ID,&wifi_event_handler,NULL,NULL));
ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,IP_EVENT_STA_GOT_IP,&wifi_event_handler,NULL,NULL));
//4.网卡初始化.初始化底层TCP/IP堆栈
ESP_ERROR_CHECK(esp_netif_init());
//5.使用默认WiFi Station配置创建esp_netif对象,将netif连接到WiFi并注册默认WiFi处理程序。
esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta();
assert(sta_netif); //断言检查,确保程序在运行时满足特定的条件.
//6.netif连接到WiFi并注册默认WiFi处理程序。
esp_netif_set_default_netif(sta_netif);
//7.初始化wifi配置参数为默认.
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
//8.为 WiFi 驱动初始化 WiFi 分配资源,如 WiFi 控制结构、RX/TX 缓冲区、WiFi NVS 结构等,这个 WiFi 也启动 WiFi 任务。必须先调用此API,然后才能调用所有其他WiFi API
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
ESP_LOGI(TAG_STA, "wifi init cfg !");
//9.设置WIFI为STA模式
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
ESP_LOGI(TAG_STA, "wifi set sta mode !");
//10.设置WIFI STA模式的配置
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, wifi_sta_cfg) );
ESP_LOGI(TAG_STA, "wifi init sta finished !");
//11.启动WIFI
ESP_ERROR_CHECK(esp_wifi_start());
ESP_LOGI(TAG_STA, "wifi start !");
while(1)
{
//等待事件标志位:等待网络连接成功/失败。成功和失败的bits会在上面注册的wifi_event_handler函数中被设置。
//xEventGroupWaitBits(事件组句柄,要等待的事件位,是否在函数返回前清除触发的标志位,是否等待所有指定的标志位,等待的时间(以系统滴答为单位) );
EventBits_t bits = xEventGroupWaitBits(wifi_event_group,WIFI_CONNECTED_BIT | WIFI_STA_GET_IP_BIT | WIFI_FAIL_BIT ,pdTRUE,pdFALSE,pdMS_TO_TICKS(2000));
if(bits & WIFI_CONNECTED_BIT)
{
display_wifi_connect_info_to_lcd(4);
}
if(bits & WIFI_STA_GET_IP_BIT) //判断事件是连接成功还是连接失败的事件。
{
display_wifi_connect_info_to_lcd(1);
break;
}
else if(bits & WIFI_FAIL_BIT) //如果连接目标AP失败
{
if(s_retry_num < WIFI_STA_MAXIMUM_RETRY)
{
display_wifi_connect_info_to_lcd(2);
esp_wifi_connect();
}
else //连接失败次数大于最大尝试次数
{
//ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT,ESP_EVENT_ANY_ID,&wifi_event_handler)); //注销事件ID和IP获取服务函数(比esp_event_handler_instance_unregister 更容易使用)
//ESP_ERROR_CHECK(esp_event_handler_unregister(IP_EVENT,IP_EVENT_STA_GOT_IP,&wifi_event_handler));
//vEventGroupDelete(wifi_event_group);
display_wifi_connect_info_to_lcd(3);
esp_wifi_connect();
return;
}
}
}
}
/*
函数功能:WIFI STA模式连接AP测试
形 参:无
返 回 值:无
*/
void wifi_sta_test(void *pvParameters)
{
uint8_t displayFlag=0;
nvs_init();
st7789v_clearScreen(WHITE,USE_HORIZONTAL);
wifi_sta_init(&wifi_sta_config);
while (1)
{
//等待事件标志位:等待网络连接成功/失败。成功和失败的bits会在上面注册的wifi_event_handler函数中被设置。
//xEventGroupWaitBits(事件组句柄,要等待的事件位,是否在函数返回前清除触发的标志位,是否等待所有指定的标志位,等待的时间(以系统滴答为单位) );
EventBits_t bits = xEventGroupWaitBits(wifi_event_group,WIFI_CONNECTED_BIT | WIFI_STA_GET_IP_BIT | WIFI_FAIL_BIT,pdTRUE,pdFALSE,pdMS_TO_TICKS(2000));
if(bits & WIFI_FAIL_BIT) //如果连接目标AP失败
{
display_wifi_connect_info_to_lcd(2);
esp_wifi_connect();
}
else if(bits & WIFI_STA_GET_IP_BIT)
{
display_wifi_connect_info_to_lcd(1);
s_retry_num = 0;
//*(uint8_t *)pvParameters = 1;
}
}
}
/*
函数功能:WIFI连接AP信息显示
形 参:
displayMode:
1:连接到目标AP并成功获取到IP 2:连接到目标AP失败 3:连接失败次数大于最大尝试次数 4:连接到目标AP
返 回 值:无
*/
void display_wifi_connect_info_to_lcd(uint8_t displayMode)
{
static uint8_t old_displayMode = 0;
if(displayMode != old_displayMode)
{
st7789v_clearScreen(WHITE,USE_HORIZONTAL);
}
if(displayMode == 1) //连接到目标AP,并成功获取到IP!
{
old_displayMode = 1;
st7789v_displayString(10,10,(uint8_t *)" WIFI STA TEST :",RED,WHITE,24,0,USE_HORIZONTAL);
st7789v_displayString(10,40,(uint8_t *)"Connect target ap successed!",BLUE,WHITE,16,0,USE_HORIZONTAL);
sprintf(lcd_display_buff,"Retry_num: %-4d",s_retry_num);
st7789v_displayString(10,60,lcd_display_buff,RED,WHITE,16,0,USE_HORIZONTAL);
sprintf(lcd_display_buff,"SSID: %-20s",wifi_sta_net_info.target_ap_ssid);
st7789v_displayString(10,80,lcd_display_buff,BLACK,WHITE,16,0,USE_HORIZONTAL);
sprintf(lcd_display_buff,"PWD: %-20s",wifi_sta_net_info.target_ap_password);
st7789v_displayString(10,100,lcd_display_buff,BLACK,WHITE,16,0,USE_HORIZONTAL);
sprintf(lcd_display_buff,"STA_IP: %d.%d.%d.%d",IP2STR(&wifi_sta_net_info.sta_ip));
st7789v_displayString(10,120,lcd_display_buff,BLACK,WHITE,16,0,USE_HORIZONTAL);
sprintf(lcd_display_buff,"GW_IP: %d.%d.%d.%d",IP2STR(&wifi_sta_net_info.target_ap_gw));
st7789v_displayString(10,140,lcd_display_buff,BLACK,WHITE,16,0,USE_HORIZONTAL);
sprintf(lcd_display_buff,"MASK: %d.%d.%d.%d",IP2STR(&wifi_sta_net_info.target_ap_mask));
st7789v_displayString(10,160,lcd_display_buff,BLACK,WHITE,16,0,USE_HORIZONTAL);
sprintf(lcd_display_buff,"STA_MAC: %02x:%02x:%02x:%02x:%02x:%02x",MAC2STR(wifi_sta_net_info.sta_mac));
st7789v_displayString(10,180,lcd_display_buff,BLACK,WHITE,16,0,USE_HORIZONTAL);
ESP_LOGI(TAG_STA,"target_ssid:%s\ntarget_passwd:%s\nsta_ip:"IPSTR"\nsta_mac: "MACSTR"\ngw_ip:"IPSTR"\nmask:"IPSTR"\n",
wifi_sta_net_info.target_ap_ssid,
wifi_sta_net_info.target_ap_password,
IP2STR(&wifi_sta_net_info.sta_ip),
MAC2STR(wifi_sta_net_info.sta_mac),
IP2STR(&wifi_sta_net_info.target_ap_gw),
IP2STR(&wifi_sta_net_info.target_ap_mask));
}
else if(displayMode == 2)//连接到目标AP失败
{
old_displayMode = 2;
ESP_LOGI(TAG_STA, "Failed to connect to SSID:%s, password:%s (The target AP may not exist !)",wifi_sta_net_info.target_ap_ssid,wifi_sta_net_info.target_ap_password);
st7789v_displayString(10,10,(uint8_t *)" WIFI STA TEST :",RED,WHITE,24,0,USE_HORIZONTAL);
st7789v_displayString(10,40,(uint8_t *)"Disconnected target ap!",RED,WHITE,16,0,USE_HORIZONTAL);
sprintf(lcd_display_buff,"Retry_num: %-4d",s_retry_num);
st7789v_displayString(10,60,lcd_display_buff,RED,WHITE,16,0,USE_HORIZONTAL);
sprintf(lcd_display_buff,"SSID: %-20s",TARGET_CONNECT_WIFI_SSID);
st7789v_displayString(10,80,lcd_display_buff,BLACK,WHITE,16,0,USE_HORIZONTAL);
sprintf(lcd_display_buff,"PWD: %-20s",TARGET_CONNECT_WIFI_PWD);
st7789v_displayString(10,100,lcd_display_buff,BLACK,WHITE,16,0,USE_HORIZONTAL);
st7789v_displayString(10,120,"Target AP may not exist !",RED,WHITE,16,0,USE_HORIZONTAL);
}
else if(displayMode == 3) //连接失败次数大于最大尝试次数
{
old_displayMode = 3;
ESP_LOGI(TAG_STA, "Failed to connect to SSID:%s, password:%s (The target AP may not exist !)",wifi_sta_net_info.target_ap_ssid,wifi_sta_net_info.target_ap_password);
st7789v_displayString(10,120,"Target AP may not exist ! ",RED,WHITE,16,0,USE_HORIZONTAL);
sprintf(lcd_display_buff,"Retry_num: %-4d",s_retry_num);
st7789v_displayString(10,60,lcd_display_buff,RED,WHITE,16,0,USE_HORIZONTAL);
delay_ms(2000);
st7789v_displayString(10,140,"Retry to connect to the AP...",RED,WHITE,16,0,USE_HORIZONTAL);
}
else if(displayMode == 4) //连接到目标AP
{
old_displayMode = 4;
st7789v_displayString(10,40,(uint8_t *)"Connected target ap ! ",RED,WHITE,16,0,USE_HORIZONTAL);
sprintf(lcd_display_buff,"Retry_num: %-4d",s_retry_num);
st7789v_displayString(10,60,lcd_display_buff,RED,WHITE,16,0,USE_HORIZONTAL);
sprintf(lcd_display_buff,"SSID: %-20s",TARGET_CONNECT_WIFI_SSID);
st7789v_displayString(10,80,lcd_display_buff,BLACK,WHITE,16,0,USE_HORIZONTAL);
sprintf(lcd_display_buff,"PWD: %-20s",TARGET_CONNECT_WIFI_PWD);
st7789v_displayString(10,100,lcd_display_buff,BLACK,WHITE,16,0,USE_HORIZONTAL);
st7789v_displayString(10,120,(uint8_t *)"Getting ip......",RED,WHITE,16,0,USE_HORIZONTAL);
}
}