ESP32作为Wi-Fi AP模式的测试
一、AP模式的流程
初始化阶段 (Init Phase):
- 1.1: Main task(主任务)初始化LwIP(轻量级TCP/IP协议栈)。
ESP_ERROR_CHECK(esp_netif_init());
- 1.2: 创建和初始化Event task(事件任务)。
ESP_ERROR_CHECK(esp_event_loop_create_default());
- 1.3: 创建和初始化Wi-Fi任务。
wifi_init_softap();
- 1.4: 创建并初始化应用任务。
xTaskCreate(tcp_client_task, "tcp_client_task", 4096, NULL, 5, NULL);
配置阶段 (Configure Phase):
- 2.1: 配置Wifi,确保接入点的参数设置正确。
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
- 2.2: 注册Wifi事件处理器
ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &wifi_event_handler, NULL, NULL));
启动阶段 (Start Phase):
- 3.1: 启动Wi-Fi。ESP_ERROR_CHECK(esp_wifi_start());
- 3.2:WIFI_EVENT_AP_START 事件触发,表示Wi-Fi接入点启动完成。
esp_event_handler_instance_register处理事件触发
- 3.3:应用任务或事件任务处理接入点启动后的逻辑。
连接阶段 (Connect Phase):
- 4.1: WIFI_EVENT_AP_STA_CONNECTED 事件触发,表示有设备连接到接入点。esp_event_handler_instance_register处理事件触发
- 4.2: 应用任务或事件任务处理连接设备后的逻辑。
断开连接阶段 (Disconnect Phase):
- 5.1: WIFI_EVENT_STA_DISCONNECTED 事件触发,表示连接的设备断开。
- 5.2: 应用任务处理断开设备后的逻辑。
- 5.3: 处理断开连接的具体细节,例如清理资源或重启连接。
去初始化阶段 (Deinit Phase):
- 6.1: 断开Wi-Fi连接。
- 6.2: 停止Wi-Fi服务。
- 6.3: 去初始化Wi-Fi,清理所有Wi-Fi相关的资源。
二、代码流程
ESP32作为TCP Server—— IP地址: 192.168.10.1 端口号:8080
网络调试助手作为TCP Client——IP地址: 默认分配为192.168.10.x
主函数初始化 AP 模式:wifi_init_softap()
- 1.初始化NVS
- 2.初始化 TCP/IP 协议栈
- 3.初始化esp事件循环
- 4.创建 Wi-Fi 接口,包括IP地址、子网掩码和网关
- 5.配置 Wi-Fi 事件处理器(函数指针指向函数wifi_event_handler)
- 6.设置 Wi-Fi 模式为 AP 模式,配置 AP 模式参数
- 7.启动Wi-Fi
Wi-Fi 事件处理器wifi_event_handler
- 1.处理客户端连接事件
- 2.处理客户端断开连接事件
注意:事件处理器并不是独立的线程,而是被event_loop_task这个后台任务调度并调用的回调函数
esp_event_loop_create_default() 会创建一个默认的事件循环,并在后台启动一个专门处理事件的任务,这个任务负责处理所有注册的事件和相应的事件处理器。当注册的Wi-Fi事件发生时,事件循环任务会调用相应的事件处理器,例如你注册的wifi_event_handler
TCP 服务器任务tcp_server_task
- 1.创建TCP套接字
- 2.将创建的套接字绑定到指定的 IP 地址和端口号。
- 3.启动监听
- 4.等待客户端连接,阻塞等待客户端连接,成功接受连接后,返回新的套接字
- 5.处理客户端连接,接收数据,写回数据。
- 6.若客户端断开连接或发生错误,关闭与客户端的套接字,并重新开始等待下一个连接。
三、实现效果
通过网络调试助手作为TCP Client与ESP32建立TCP连接,发送和接收数据。