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));通过上面结构体的配置去初始化wifiesp_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() );启动wifiESP_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-Fi802.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——它们统统都在这一层。

相关新闻

5秒无损转换B站缓存视频:m4s-converter快速入门指南

5秒无损转换B站缓存视频:m4s-converter快速入门指南

5秒无损转换B站缓存视频:m4s-converter快速入门指南 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经为B站缓存视频无法在其…

2026/6/20 18:39:43阅读更多 →
嵌入式GUI显示驱动与VNC服务器:从硬件加速到远程调试实战

嵌入式GUI显示驱动与VNC服务器:从硬件加速到远程调试实战

1. 显示驱动层:嵌入式GUI的硬件基石在嵌入式图形界面开发中,无论你用的是emWin、TouchGFX还是LVGL,最终要面对的一个核心问题就是:如何让屏幕上亮起你想要的像素?这个问题的答案,就藏在“显示驱动”这个看似…

2026/6/20 18:39:43阅读更多 →
追觅宣布回归主业,千帆过尽未来何在?

追觅宣布回归主业,千帆过尽未来何在?

据北京日报的报道,6月18日,记者从追觅了解到,该公司正在进行战略调整,未来将回归主营业务,全面聚焦智能家庭、户外庭院、智能出行、具身智能四大赛道,对其余业务将进行大规模整合、合并或转型。据公开信息&…

2026/6/20 18:34:43阅读更多 →
TWR-KL25Z模块化嵌入式平台:从ARM Cortex-M0+入门到低功耗物联网应用实战

TWR-KL25Z模块化嵌入式平台:从ARM Cortex-M0+入门到低功耗物联网应用实战

1. 从零开始认识TWR-KL25Z:一个模块化嵌入式开发的“乐高”平台如果你和我一样,在嵌入式开发这条路上摸爬滚打多年,肯定经历过这样的场景:为了验证一个新想法,需要花大量时间焊接电路、调试最小系统、连接各种外设&…

2026/6/20 19:44:49阅读更多 →
测试转大模型:从问题定位到方案成型

测试转大模型:从问题定位到方案成型

聊《测试转大模型:从问题定位到方案成型》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要本文概述文章目标、核心观点和实践价值。摘要:做了几年测试,突然发现手里那套接口自…

2026/6/20 19:44:49阅读更多 →
NXP KMA210磁角度传感器:原理、应用与编程配置全解析

NXP KMA210磁角度传感器:原理、应用与编程配置全解析

1. 项目概述:从磁阻效应到智能角度感知 在工业自动化和汽车电子领域,精确、可靠的角度测量是许多核心功能得以实现的基础。无论是汽车方向盘的转角检测、电机转子的位置反馈,还是机器人关节的姿态控制,传统的接触式电位器或光学编…

2026/6/20 19:44:49阅读更多 →
Kinetis K22F低功耗模式下I2S/SAI接口时序分析与工程实践

Kinetis K22F低功耗模式下I2S/SAI接口时序分析与工程实践

1. 项目概述与核心价值在便携式音频设备、智能穿戴和物联网节点这类对功耗极其敏感的应用里,工程师们常常面临一个两难选择:既要实现高质量的音频播放或采集,又要将系统功耗压到最低,以延长电池续航。我最近在为一个无线耳机项目选…

2026/6/20 19:44:49阅读更多 →
Seed-2.0-lite全模态Agent实战解析:音画同步、GUI操作与动态工具链

Seed-2.0-lite全模态Agent实战解析:音画同步、GUI操作与动态工具链

1. 项目概述:这不是一次普通模型更新,而是一次“全模态生产级Agent”的落地实测字节跳动Doubao团队在2024年4月28日悄然上线了Seed-2.0-lite新版本——这个代号“260428”的更新,远不止是参数微调或训练数据扩充。我作为连续三年深度参与字节…

2026/6/20 19:44:49阅读更多 →
微信小程序数据可视化终极指南:3分钟快速集成ECharts图表库

微信小程序数据可视化终极指南:3分钟快速集成ECharts图表库

微信小程序数据可视化终极指南:3分钟快速集成ECharts图表库 【免费下载链接】echarts-for-weixin 基于 Apache ECharts 的微信小程序图表库 项目地址: https://gitcode.com/gh_mirrors/ec/echarts-for-weixin 还在为微信小程序中的数据展示而烦恼吗&#xff…

2026/6/20 19:39:48阅读更多 →
【课程设计/毕业设计】基于 Web 的高校县志馆藏信息综合管理系统设计与实现 基于Django的青岛滨海学院特色文献捐赠流转管理系统的设计与实现【附源码、数据库、万字文档】

【课程设计/毕业设计】基于 Web 的高校县志馆藏信息综合管理系统设计与实现 基于Django的青岛滨海学院特色文献捐赠流转管理系统的设计与实现【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/6/20 0:02:40阅读更多 →
MC68HC908RF2A定时器PWM生成原理与实战:无缓冲与缓冲模式详解

MC68HC908RF2A定时器PWM生成原理与实战:无缓冲与缓冲模式详解

1. 项目概述与核心价值在嵌入式开发,尤其是电机驱动、LED调光、开关电源这些需要精确控制“能量”的领域,脉冲宽度调制(PWM)技术是工程师手中的一把瑞士军刀。它的本质很简单:用一个固定频率的方波,通过改变…

2026/6/20 0:02:40阅读更多 →
在银河麒麟V10桌面(2205版本)上实战部署软RAID 1:从模块黑名单到自动挂载

在银河麒麟V10桌面(2205版本)上实战部署软RAID 1:从模块黑名单到自动挂载

1. 银河麒麟V10桌面系统与软RAID 1基础认知 第一次在银河麒麟V10桌面上折腾软RAID 1时,我踩了不少坑。这个国产操作系统基于Linux内核,但2205版本对软RAID模块做了特殊处理,需要额外操作才能正常使用。软RAID 1其实就是磁盘镜像技术&#xff…

2026/6/20 0:02:40阅读更多 →