记录一次脱离Arduino向ESP8266文件系统(SPIFFS)上传打包为固件的文件数据(SPIFFS 映像)的全过程

文章讲述了如何避免使用ArduinoIDE中的esp8266fs插件,而是通过分析和模仿Arduino的上传过程,利用mkspiffs和esptool工具自动生成和上传SPIFFS映像文件到ESP8266的文件系统。作者创建了批处理脚本来简化这个过程,并确保了生成的固件与Arduino上传的一致。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于ESP8266文件系统上传文件,个人通常采用Arduino中安装esp8266fs插件的方法:

通过Arduino IDE向闪存文件系统上传文件_arduino怎么创建项目文件夹_Baal Austin的博客-CSDN博客

 

但每次修改文件后再上传都需要打开Arduino使用这个插件,感觉过程比较繁琐,于是想实现自己将文件打包为固件后再上传这一功能。

根据ESP-IDF 编程指南可以知道有spiffsgen.py和mkspiffs两种工具可以生成 SPIFFS 映像(用我通俗的理解叫打包为固件的文件数据)。

g​​​​​​​SPIFFS 文件系统 - ESP32-S2 - — ESP-IDF 编程指南 v4.2 文档

接下来需要分析使用Arduino上传这个过程中调用了什么,以及在调用时传递了哪些参数。我选择使用Process Monitor来进行分析。

[搬运]进程监视器(Process Monitor)3.85完整汉化版 - 『精品软件区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

首先启动Arduino。

启动Process Monitor(启动后会自动开始捕获)。

 

使用Arduino的esp8266fs插件上传文件。

上传完成后停止Process Monitor捕获 。

 

捕获的内容很多,需要筛选重点。将Process Monitor工具栏中的同心圆图标拖拽至Arduino界面。

 

此时会过滤掉与Arduino无关的内容。

 

一次过滤完成。

 

我关注的是进程之间的调用与传递的参数,所以只保留与进程有关的选项。

 

二次过滤完后很明显的发现Arduino是通过调用mkspiffs来生成的 SPIFFS 映像。

 

 下载mkspiffs并学习其命令参数。

https://github.com/igrr/mkspiffs

 

查看Process Monitor详细信息后获得了Arduino调用mkspiffs时的传递参数。

 

简单整理一下得到了该条命令:mkspiffs.exe -c 上传的文件目录 -p 256 -b 4096 -s 45056 生成固件.bin

粘贴进去稍微修改一下写成批处理并放置在mkspiffs所在的同级目录中。

批处理:%~dp0mkspiffs -c %~dp0data -b 4096 -p 256 -s 45056 %~dp0spiffs_%date:~0,4%-%date:~5,2%-%date:~8,2%_%time:~0,2%-%time:~3,2%-%time:~6,2%--%time:~9,2%.bin

 

执行批处理后对比发现与Arduino生成的映像不一致?

 

于是将Arduino调用的mkspiffs提取出来使用(对比了一下发现Arduino调用的mkspiffs比我下载的mkspiffs时间更新一些,可能是我下载的版本有问题吧,就不纠结这个了)。

重新对比发现完全一致,打包部分至此结束。

 

上传部分使用的是esptool,写为批处理。

为了兼容Arduino的esp8266fs插件,也是在此批处理目录下创建一个名为data的文件夹,将要打包上传的文件放入data中即可。

[自动]生成文件系统数据固件并上传批处理:

set time_flag=%date:~0,4%-%date:~5,2%-%date:~8,2%_%time:~0,2%-%time:~3,2%-%time:~6,2%--%time:~9,2%
%~dp0mkspiffs -c %~dp0data -b 4096 -p 256 -s 0xB000 %~dp0spiffs_%time_flag%.bin
%~dp0esptool.exe --chip esp8266 --baud 115200 write_flash -z 0x1F0000 %~dp0spiffs_%time_flag%.bin
pause

 

[自动]生成文件系统数据固件并上传批处理执行效果:

 

经测试可以成功打包并完成文件上传且可以正常读取文件。

至此,完成脱离Arduino向ESP8266文件系统(SPIFFS)上传打包为固件的文件数据(SPIFFS 映像)的功能。

### 使用ArduinoESP8266烧录MQTT固件的步骤 #### 准备工作 为了成功地将MQTT固件烧录到ESP8266并利用Arduino开发环境完成操作,需先准备好硬件和软件资源。 - **硬件准备** - ESP8266模块(如ESP8266-01S) - Arduino板子用于编程接口 - USB转TTL串口适配器(如果直接通过Arduino无法提供足够的电平转换支持) 确保ESP8266的电源引脚正确连接至3.3V供电源,并按照如下方式设置其他重要引脚[^2]: - `3V3/VCC`接到3.3V - `EN`串联一个10kΩ电阻后接到3.3V - `RX`接到Arduino的`RX0` - `TX`接到Arduino的`TX1` - `GND`接地 - 烧写时,`GPIO0`接到GND;运行时,`GPIO0`应保持悬空状态 #### 软件安装与配置 在计算机上安装最新版本的Arduino IDE,并添加ESP8266的支持包以便能够识别该芯片作为目标设备。具体来说,在Arduino IDE首选项中加入官方提供的ESP8266库地址[^1]。 #### 编程前准备工作 打开Arduino IDE之后,选择对应的主板型号为“Generic ESP8266 Module”,同时调整上传速度为115200bps以匹配大多数情况下使用的波特率设定。另外,还需确认端口号无误,这通常会在IDE底部的状态栏显示出来。 #### MQTT固件获取 访问指定网址下载适用于ESP8266的MQTT协议栈固件文件以及配套工具链,包括但不限于Flash Download Tool v3.9以上版本、特定于ESP8266系列产品的预编译二进制镜像等资源[^4]。 #### 实际烧录过程 启动Flash Download Tool应用程序,加载之前获得的.bin格式固件映像,依据实际需求填写起始偏移量参数。特别注意的是,当执行擦除闪存区命令或者首次刷入新系统时,务必勾选相应选项以清除旧有数据残留影响后续功能表现。最后点击“Start”按钮发起正式烧录流程直至提示顺利完成为止。 ```bash # 命令行示例:使用esptool.py进行固件烧录 (假设已安装Python及相关依赖) esptool.py --port /dev/ttyUSB0 write_flash 0x0 firmware.bin ``` #### 测试验证 一旦上述所有环节均按部就班完成后,就可以尝试重启ESP8266模组看其能否自动接入预先定义好的Wi-Fi网络并向指定服务器发送心跳消息了。此时可以借助Serial Monitor监视日志输出情况进一步排查潜在错误原因所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值