news 2026/4/15 14:33:28

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/4/14 13:04:25

一站式虾分发平台在应用分发与内测分发领域表现出色

一站式虾分发平台在应用分发与内测分发领域表现出色,其核心优势在于高效、安全、灵活且功能全面,能够满足开发者从内测到正式发布的全流程需求。以下是对虾分发平台的详细分析: 一、平台定位与核心功能 虾分发平台专注于移动应用的内测分发…

作者头像 李华
网站建设 2026/4/14 2:14:50

《自指隐》

《自指隐》一隐藏于无始 菩提影碎镜痕空 自指幽玄未示踪 不立菩提非毁镜 无痕大冶隐炉风二隐藏于万象 青山不语即说法 流水无形已演宗 一叶飘零藏宇宙 微尘旋转隐时空三隐藏于作用 剑刃光寒不显锋 弦音妙处本无宫 行云施雨皆潜化 余照山河在暗中四隐藏于相见 见面不识真面目 闻…

作者头像 李华
网站建设 2026/4/12 20:11:48

《余行论·通约篇》——东西方追寻的自指同归

引言:人类的双重追寻在人类精神演化的宏大图景中,两条追寻之路平行延展了数千年:东方贤哲向内探求心性本源,西方智者向外探索宇宙规律。表面上,这两条道路南辕北辙——一者重直觉体悟,一者重理性分析&#…

作者头像 李华
网站建设 2026/4/15 8:30:03

计算机毕设java人生感悟总结分享与遗嘱设立系统 基于Java的个人成长与人生规划管理系统 Java驱动的人生回顾与未来规划综合平台

计算机毕设java人生感悟总结分享与遗嘱设立系统7s7l69(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着社会的快速发展和人们生活水平的不断提高,越来越多的人开始…

作者头像 李华
网站建设 2026/4/13 23:39:03

Pts物理引擎实战:从零构建动态粒子世界

你是否曾想过,如何在网页上创造出令人惊叹的物理效果?当粒子在屏幕中自由飞舞、相互碰撞时,那种动态的美感是如何实现的?今天,就让我们一同探索Pts物理引擎的奥秘,亲手打造一个充满活力的粒子世界&#xff…

作者头像 李华