news 2026/6/23 21:35:59

ESP32 事件循环作用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ESP32 事件循环作用

我是嵌入式学习菌,一名热爱学习的嵌入式工程师

关注我,一起变得更加优秀!

嵌入式学习菌
CSDN、B 站视频号同名同步分享嵌入式学习点滴~ 无捷径唯有坚持,愿与你并肩稳步前行!
15篇原创内容
公众号

1.事件循环函数:

这个函数是ESP-IDF框架中的esp_event_loop_create_default,核心作用是创建一个默认的系统事件循环,用于管理ESP32的系统事件(比如WiFi、蓝牙、外设等模块的事件)。

举个实际场景:WiFi连接状态监听

比如你要开发ESP32的WiFiStation功能,需要监听“WiFi连接成功”“WiFi断开”等事件,就必须依赖这个默认事件循环:

步骤1:先调用esp_event_loop_create_default创建循环(你的代码里需要先执行这个函数,否则事件无法分发)

//1.创建默认事件循环(就是你截图里的这个函数)esp_err_tret=esp_event_loop_create_default();if(ret!=ESP_OK){ESP_LOGE("MAIN","创建事件循环失败:%s",esp_err_to_name(ret));return;}步骤2:注册WiFi事件的回调函数//2.定义一个“WiFi连接成功”的回调函数staticvoidon_wifi_connected(void*arg,esp_event_base_tevent_base,int32_tevent_id,void*event_data){ESP_LOGI("WIFI","成功连接到路由器!");//这里可以写连接成功后的逻辑(比如启动网络请求)}//3.把回调函数注册到默认事件循环中esp_event_handler_register(WIFI_EVENT,WIFI_EVENT_STA_CONNECTED,on_wifi_connected,NULL);步骤3:初始化并启动WiFi//4.初始化WiFi为Station模式wifi_init_config_tcfg=WIFI_INIT_CONFIG_DEFAULT();esp_wifi_init(&cfg);//配置WiFi参数(SSID、密码)并启动esp_wifi_set_mode(WIFI_MODE_STA);wifi_config_twifi_cfg={.sta={.ssid="你的WiFi名称",.password="你的WiFi密码"}};esp_wifi_set_config(WIFI_IF_STA,&wifi_cfg);esp_wifi_start();

这个函数在例子中的作用

当WiFi成功连接路由器时,ESP32的WiFi模块会向“默认事件循环”发送一个WIFI_EVENT_STA_CONNECTED事件;而你注册的on_wifi_connected回调函数,正是通过这个默认事件循环接收到事件后被触发执行的。

2.挂载SPIFFS文件系统

在ESP32中基于ESP-IDF框架初始化、挂载SPIFFS文件系统(SPIFlashFileSystem),并完成文件系统完整性检查、容量信息获取,确保SPIFFS可用(SPIFFS是ESP32专为SPIFlash设计的轻量级文件系统,适合存储小文件、配置、日志等)。

ESP-IDF编译后程序自身的内存/Flash占用统计,它和SPIFFS文件系统的关系是:SPIFFS占用的是Flash的独立分区,不在这个表格的统计范围内。

SPIFFS文件系统存储在ESP32的SPIFlash(闪存)中,而Flash是非易失性存储介质,所以只要正常完成文件写入(比如调用fclose确保数据刷入Flash),SPIFFS里的内容掉电后不会丢失。

下面分步骤拆解代码的具体作用,结合每一行逻辑说明:

1.配置SPIFFS挂载参数esp_vfs_spiffs_conf_tconf={.base_path="/spiffs",//SPIFFS挂载到VFS的路径(后续访问文件用/spiffs/xxx).partition_label=NULL,//使用分区表中第一个标记为SPIFFS的分区(留空默认匹配).max_files=10,//允许同时打开的最大文件数(限制资源占用).format_if_mount_failed=true,//挂载失败时自动格式化(首次使用/文件系统损坏时生效)};

这一步是定义SPIFFS的挂载规则:比如后续要读写/spiffs/config.json文件,就是通过.base_path指定的路径访问;.format_if_mount_failed是关键容错参数,首次烧录固件后SPIFFS分区为空,挂载会失败,开启这个参数会自动格式化分区,让挂载成功。

2.注册并挂载SPIFFS到VFS

err=esp_vfs_spiffs_register(&conf);if(err!=ESP_OK){ESP_LOGE("SPIFFS","ERROR");}

esp_vfs_spiffs_register是核心函数:

把SPIFFS文件系统注册到ESP-IDF的VFS(虚拟文件系统)中,让ESP32可以用标准C文件操作函数(如fopen/fwrite/fread)访问SPIFFS;

若返回非ESP_OK(比如分区不存在、Flash损坏),打印错误日志。

3.检查SPIFFS文件系统完整性

err=esp_spiffs_check(conf.partition_label);if(err!=ESP_OK){ESP_LOGE("SPIFFS","spiffscheckerror");}else{ESP_LOGI("SPIFFS","spiffschecksuccess");

esp_spiffs_check用于校验SPIFFS分区的完整性:

检查文件系统的元数据、目录结构是否损坏;

若损坏则打印错误(需手动处理或重新格式化),正常则打印成功日志。

4.获取SPIFFS容量信息

size_ttotal=0,used=0;err=esp_spiffs_info(conf.partition_label,&total,&used);if(err==ESP_OK){ESP_LOGI("SPIFFS","total:%d,used:%d",total,used);}

esp_spiffs_info读取SPIFFS分区的总容量和已用容量:

比如打印total:1048576,used:123456,表示SPIFFS总大小1MB,已使用约120KB;

方便开发者监控文件系统占用情况,避免存储溢出。

整体作用总结+实际应用举例

这段代码是ESP32使用SPIFFS的“初始化模板”,完成后就能像操作普通文件一样读写SPIFFS里的文件,比如:

//挂载成功后,向/spiffs/test.txt写入内容FILE*f=fopen("/spiffs/test.txt","w");if(f){fprintf(f,"HelloSPIFFS!");fclose(f);ESP_LOGI("SPIFFS","文件写入成功");}//读取/spiffs/test.txt的内容charbuf[32]={0};f=fopen("/spiffs/test.txt","r");if(f){fread(buf,1,sizeof(buf)-1,f);fclose(f);ESP_LOGI("SPIFFS","读取到内容:%s",buf);//输出:HelloSPIFFS!}

小编也为零基础小白整理了一份嵌入式学习资料大全。

思维导图、C语言学习、单片机、学习笔记、实例项目……你需要的知识都在这儿!

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

5、Ubuntu系统网络与图形界面使用指南

Ubuntu系统网络与图形界面使用指南 1. 无线网络配置 在过去,为Linux系统配置无线网络是一项艰巨的任务,需要许多复杂的步骤才能连接到无线网络。但现在情况已大为改观,Ubuntu系统包含了一个名为Network Manager的实用工具,它让连接和管理无线网络变得极其简单。 当你登录…

作者头像 李华
网站建设 2026/6/23 18:33:47

快速构建MCP工具的开发包FastMCP

FastMCP是一个用于快速构建MCP(Model Context Protocol)服务器的Python框架,它能帮你轻松地将自定义工具和数据源接入大型语言模型(LLM)。你的核心需求是查询天气和热点新闻,这正是FastMCP的典型应用场景。…

作者头像 李华
网站建设 2026/6/22 23:27:42

推荐字节的文档图像解析工具Dolphin

字节跳动开源的Dolphin,是一个基于多模态大语言模型的高级文档图像解析工具。和传统OCR(仅识别文字)不同,它能够深度理解文档的版面,并将图文、表格、公式等复杂元素一并转化为结构化数据。📄 核心原理&…

作者头像 李华
网站建设 2026/6/23 14:12:32

查 Intel CPU 信息不用绕弯!这个专属查询工具,精准直达官网详情~

不管是装机选配件、升级电脑硬件,还是想了解自己设备的 CPU 性能参数,查询 Intel CPU 的详细信息都是必经步骤。但 Intel 官网页面复杂,搜索入口隐蔽,想要快速找到目标型号的核心参数、功耗、兼容性等信息并不容易,往往…

作者头像 李华
网站建设 2026/6/23 18:36:30

Dify平台提示词调试功能提升AI输出质量实测

Dify平台提示词调试功能提升AI输出质量实测 在当前大模型技术飞速发展的背景下,企业对AI应用的期待早已超越“能说会道”的初级阶段,转向稳定、可控、可维护的生产级系统。然而现实是,许多团队仍困于“调Prompt靠猜、改逻辑全靠重写”的手工模…

作者头像 李华