news 2026/6/20 18:38:44

6.19 esp32s3学习

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
6.19 esp32s3学习

wifi设置


在连接Wi-Fi之前,需要先初始化好相关的底层组件。在ESP-IDF框架下,标准的初始化顺序通常如下:

初始化底层网络协议栈:调用 esp_netif_init()。这就像给网络通信准备好"道路和交通规则"。

创建默认事件循环:调用 esp_event_loop_create_default()。这就是一个不停运转的"消息中心",负责接收和分发所有事件。

创建默认网络接口:根据你的用途,调用 esp_netif_create_default_wifi_sta()(作为Station,连接路由器)或 esp_netif_create_default_wifi_ap()(作为AP,创建热点)。

初始化Wi-Fi驱动:调用 esp_wifi_init()。这会启动Wi-Fi硬件和底层驱动。

第二步:核心事件
准备工作完成后,就可以开始连接了。对于最常见的Station模式(连接路由器),你需要关注以下几个按顺序发生的事件:

WIFI_EVENT_STA_START:当你调用 esp_wifi_start() 后,Wi-Fi驱动启动成功就会发出此事件。你应该在这个事件的处理函数中,调用 esp_wifi_connect() 来真正发起连接。

WIFI_EVENT_STA_CONNECTED:当ESP32成功连接到路由器(AP)时触发。这代表物理层的Wi-Fi连接已建立,但此时还没有IP地址。系统会自动启动DHCP客户端开始获取IP。

IP_EVENT_STA_GOT_IP:这是最重要的一个事件!当DHCP客户端成功从路由器获取到IP地址后触发。这标志着整个网络连接已完全就绪。只有在这里,你才可以安全地创建socket、发起HTTP请求等网络通信操作。

函数解释

snprintf安全格式化字符串

头文件里用 DECLARE(声明),源文件里用 DEFINE(定义)。
所以 DECLARE 和 DEFINE 的配合是C语言管理全局资源的标准惯用法


#define ESP_EVENT_DECLARE_BASE(id) extern esp_event_base_t const id

#define ESP_EVENT_DEFINE_BASE(id) esp_event_base_t const id = #id
所以,这行代码声明了一个名为 id 的全局字符串常量,它的值就是它自己的名字 "id"。

void wifi_init_sta(void)
{
s_wifi_event_group = xEventGroupCreate();

ESP_ERROR_CHECK(esp_netif_init());tcpip协议初始化

ESP_ERROR_CHECK(esp_event_loop_create_default());
esp_netif_create_default_wifi_sta();创建sta对象

wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();初始化结构体
ESP_ERROR_CHECK(esp_wifi_init(&cfg));通过上面结构体的配置去初始化wifi

esp_event_handler_instance_t instance_any_id;用于取消相应的事件
esp_event_handler_instance_t instance_got_ip;

ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
ESP_EVENT_ANY_ID,表示捕获所有wifi事件
&event_handler,
NULL,
&instance_any_id));
ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,
IP_EVENT_STA_GOT_IP,获取到ip事件
&event_handler,
NULL,
&instance_got_ip));

wifi_config_t wifi_config = {填充结构体成员
.sta = {
.ssid = EXAMPLE_ESP_WIFI_SSID,你的wifi名称
.password = EXAMPLE_ESP_WIFI_PASS,你的wifi密码
/* Authmode threshold resets to WPA2 as default if password matches WPA2 standards (password len => 8).
* If you want to connect the device to deprecated WEP/WPA networks, Please set the threshold value
* to WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK and set the password with length and format matching to
* WIFI_AUTH_WEP/WIFI_AUTH_WPA_PSK standards.
*/

.threshold.authmode = ESP_WIFI_SCAN_AUTH_MODE_THRESHOLD,加密等级
.sae_pwe_h2e = ESP_WIFI_SAE_MODE,
.sae_h2e_identifier = EXAMPLE_H2E_IDENTIFIER,
},
};
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) );设置sta模式
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config) );将结构体配置设置进去
ESP_ERROR_CHECK(esp_wifi_start() );启动wifi

ESP_LOGI(TAG, "wifi_init_sta finished.");

/* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or connection failed for the maximum
* number of re-tries (WIFI_FAIL_BIT). The bits are set by event_handler() (see above) */
EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group,
WIFI_CONNECTED_BIT | WIFI_FAIL_BIT,
pdFALSE,
pdFALSE,
portMAX_DELAY);

/* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually
* happened. */
if (bits & WIFI_CONNECTED_BIT) {
ESP_LOGI(TAG, "connected to ap SSID:%s password:%s",
EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);
} else if (bits & WIFI_FAIL_BIT) {
ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s",
EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);
} else {
ESP_LOGE(TAG, "UNEXPECTED EVENT");
}
}

OSI 七层模型是什么


第 1 层:物理层(Physical Layer)
干什么的:负责传输原始比特流(0 和 1)。它规定了网线用什么接口、网线里有几根铜线、电压是多少伏代表“1”,多少伏代表“0”。

关键设备:网线、光纤、集线器(Hub)、中继器。

和你之前问的关联:SPI(串行外设接口) 就属于这一层的工作范畴,它规定了芯片引脚上的电平高低如何传递数据。

第 2 层:数据链路层(Data Link Layer)
干什么的:把物理层的“0 和 1”组装成数据帧(Frame),并负责在同一局域网(同一个交换机下) 内找到对方。它引入了 MAC 地址(物理地址),就像快递员在同一个小区里根据门牌号送件。

关键设备:交换机(Switch)、网桥。

关键协议:以太网(Ethernet)、Wi-Fi(802.11)。

第 3 层:网络层(Network Layer)
干什么的:负责把数据从一个网络路由转发到另一个网络。它引入了 IP 地址,就像快递总站根据邮编和城市,把包裹发往正确的城市。

关键设备:路由器(Router)。

关键协议:IP(网际协议)——这就是 TCP/IP 里的那个“IP”。

第 4 层:传输层(Transport Layer)
干什么的:负责端到端的可靠通信。它解决两个核心问题:① 数据有没有丢?② 数据顺序对不对?这一层引入了端口号(Port),用来区分电脑上不同的应用程序(比如 80 端口是网页,443 是加密网页)。

关键协议:TCP(传输控制协议)——可靠,有重传机制;以及 UDP——不可靠但速度快(用于视频通话、直播)。

第 5 层:会话层(Session Layer)
干什么的:负责建立、管理和终止通信双方之间的会话连接。通俗讲,就是“你好,我们聊完了,再见”。

实际现状:现在的网络协议栈中,这一层功能已经被弱化或并入应用层了,日常开发很少单独提它。

第 6 层:表示层(Presentation Layer)
干什么的:负责数据格式转换、加密、压缩。比如把图片转成 JPEG 格式,把文字转成 ASCII 或 Unicode,或者把数据加密防止偷看。

实际现状:同样,现在的应用层软件(如浏览器)自己就完成了这些工作,这一层也逐渐被合并了。

第 7 层:应用层(Application Layer)
干什么的:最靠近用户的一层,直接为应用程序提供网络服务。这一层规定了数据的具体“格式”和“业务逻辑”。

关键协议:HTTP(网页)、HTTPS、FTP(文件传输)、SMTP(邮件),以及你刚才问的 MQTT——它们统统都在这一层。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/20 18:38:27

暑假零基础学吉他30天入门计划:从选琴参数到训练方法论

本篇文章从产品测评视角出发,系统梳理零基础学吉他的选琴逻辑和30天训练方法论。文章涉及具体产品推荐,无任何品牌赞助合作。一、引言:为什么选琴是零基础学吉他最关键的一步 吉他是弦乐器,弦距(琴弦与品丝的距离&…

作者头像 李华
网站建设 2026/6/20 18:37:12

嵌入式GUI开发实战:emWin模拟触摸屏驱动与校准全解析

1. 项目概述与核心价值在嵌入式图形界面(GUI)开发领域,触摸屏已经从一个“锦上添花”的配置,变成了许多产品的“标配”交互方式。无论是工业HMI面板、医疗设备操作台,还是智能家居中控,一个精准、流畅、可靠…

作者头像 李华
网站建设 2026/6/20 18:37:00

Gemini多模态实操指南:图文输入技巧与音视频降维方案

1. 别被“全网最强”带偏了:先搞清 Gemini 多模态到底能做什么、不能做什么“全网最强 Gemini 多模态完整教程”——看到这个标题,我第一反应不是点开,而是把鼠标悬停在链接上,心里默念三遍:它说的“多模态”&#xff…

作者头像 李华
网站建设 2026/6/20 18:34:57

前5个月湖南“新三样”出口87.7亿元 增长势头强劲

中新网长沙6月16日电(胡晨曦 姚巍 欧阳怡佩)长沙海关15日发布数据,2026年前5个月,湖南省电动汽车、锂离子蓄电池、光伏产品“新三样”产品出口增长势头强劲,合计出口87.7亿元,同比增长28.3%。其中,电动汽车出口47亿元&…

作者头像 李华
网站建设 2026/6/20 18:29:08

i.MX8MP平台TSN实战:Qbv/Qbu/Qav配置与确定性网络性能验证

1. 项目概述:当工业网络遇上硬实时在工业自动化、机器人控制、汽车电子这些领域,网络通信的“确定性”和“低延迟”不再是锦上添花,而是生死攸关的硬指标。传统以太网采用的“尽力而为”和CSMA/CD(载波侦听多路访问/冲突检测&…

作者头像 李华
网站建设 2026/6/20 18:27:46

CVE-2024-0012漏洞复现:PAN-OS认证绕过与RCE深度剖析

1. 项目概述与漏洞背景最近在安全圈里,CVE-2024-0012这个编号热度不低,它直指网络安全领域的一个重量级选手——Palo Alto Networks的PAN-OS系统。简单来说,这是一个存在于PAN-OS Web管理界面中的身份认证绕过漏洞,攻击者利用它&a…

作者头像 李华