当前位置: 首页 > article >正文

ESP32作为Wi-Fi STA模式的测试

一、STA模式的流程

初始化阶段 (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任务。

esp_netif_create_default_wifi_sta();

wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();

ESP_ERROR_CHECK(esp_wifi_init(&cfg));

 1.4: 创建应用任务。

配置阶段 (Configure Phase)

  • 2: 配置Wi-Fi,例如SSID、密码等参数。

ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) ); ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) );

启动阶段 (Start Phase)

  • 3.1: 启动Wi-Fi。

ESP_ERROR_CHECK(esp_wifi_start());

  • 3.2: WIFI_EVENT_STA_START事件触发,表示Wi-Fi STA已启动。
  • 3.3: 应用任务或事件任务处理STA启动后的逻辑。

连接阶段 (Connect Phase)

  • 4.1: 连接Wi-Fi网络。
  • 4.2: WIFI_EVENT_STA_CONNECTED事件触发,表示Wi-Fi STA成功连接到接入点。
  • 4.3: 应用任务处理连接后的操作。

获取IP阶段 (Got IP Phase)

  • 5.1: 启动DHCP客户端以获取IP地址。
  • 5.2: IP_EVENT_STA_GOT_IP事件触发,表示设备已成功获取IP地址。
  • 5.3: 应用任务处理与IP相关的逻辑,例如初始化套接字。
  • 5.4: 处理与套接字相关的初始化。

断开连接阶段 (Disconnect Phase)

  • 6.1: WIFI_EVENT_STA_DISCONNECTED事件触发,表示Wi-Fi STA与接入点断开连接。
  • 6.2: 处理STA断开连接后的逻辑。
  • 6.3: 处理具体的断开连接操作,例如清理资源。

IP变更阶段 (IP Change Phase)

  • 7.1: IP_EVENT_STA_GOT_IP事件表示设备的IP地址发生变更。
  • 7.2: 处理IP地址变更的具体逻辑。
  • 7.3: 套接字错误处理,例如由于IP变更引起的网络异常。

去初始化阶段 (Deinit Phase)

  • 8.1: 断开Wi-Fi连接。
  • 8.2: 停止Wi-Fi任务。
  • 8.3: 去初始化Wi-Fi,清理相关资源。

二、代码流程

ESP32作为TCP Client—— IP地址默认分配为192.168.10.x

网络调试助手作为TCP Server——IP地址: 192.168.137.1 端口号:8080

主函数初始化 STA 模式:wifi_init_sta

  • 1.初始化NVS
  • 2.初始化 TCP/IP 协议栈
  • 3.初始化esp事件循环
  • 4.创建 Wi-Fi 接口,包括IP地址、子网掩码和网关
  • 5.配置 Wi-Fi 事件处理器和IP事件处理器(函数指针指向函数wifi_event_handler)
  • 6.设置 Wi-Fi 模式为STA模式,配置STA模式参数
  • 7.启动Wi-Fi

Wi-Fi 事件处理器wifi_event_handler

  • 1.处理Wi-Fi的STA(Station,客户端模式)启动事件
  • 2.处理ESP32成功连接到指定的Wi-Fi AP事件
  • 3.处理ESP32与Wi-Fi AP断开连接事件
  • 4.处理ESP32成功从AP获取IP地址的事件(启动TCP客户端任务)

TCP 客户端任务tcp_client_task

  • 1.设置struct sockaddr_in结构体保存目标服务器的地址信息,目标AP的IP地址和端口号
  • 2.创建一个TCP套接字socket()
  • 3.使用套接字连接到目标服务器connect()
  • 4.通过send()函数发送数据到服务器,通过recv()从服务器接收数据,
  • 5.在任务退出前,关闭TCP连接和释放资源。shutdown()用于关闭套接字上的连接,close()释放套接字资源。

三、实现效果:

通过网络调试助手作为TCP Server与ESP32建立TCP连接,发送和接收数据。

注意电脑使用网络调试助手,热点设置2.5G频段,连接wifi不能使用公司wifi


http://www.kler.cn/a/488240.html

相关文章:

  • CLIP代码相关问题
  • Python中用Open3D 可视化的点云窗口快捷键
  • 荒腔走板Mac电脑本地部署 LLM
  • MySQL使用C语言连接
  • 使用SPI机制加载实现类
  • 一文流:Maven精讲
  • 深入探索 ScottPlot.WPF:在 Windows 桌面应用中绘制精美图表的利器
  • ASP.NET Core 实现微服务 -- Polly 服务降级熔断
  • 深入浅出负载均衡:理解其原理并选择最适合你的实现方式
  • Node 之 Stream 深度剖析:从原理到项目实战应用场景全解
  • 网络安全有哪些细分方向?零基础学Web安全需要掌握的知识(附系统路线+工具笔记)
  • Vue3+TS+vite项目笔记1
  • 实战设计模式之桥接模式
  • Gin框架中间件原理
  • 24级 秋季学期期末考试安排(专升本)
  • 计算机网络(二)——物理层和数据链路层
  • Lua语言的文件IO
  • Decord - 深度学习视频加载器
  • OpenCV计算机视觉 07 图像的模块匹配
  • 从configure.ac到构建环境:解析Mellanox OFED内核模块构建脚本