自己动手给ESP8285 / ESP8266 1MB 编译新版AT 固件
适用于ESP8266 或ESP8285 的1MB 版本,其他容量版本也可以参考,步骤差不多。官网上说可以到github 下载临时编译的固件,但是过去找了就发现,文件都过期了,所以不得不自己编译。而且官方固件的串口引脚都换成了15、13,我的板子上线接在1、3 上,也得自己编译了改引脚。
一、下载esp-at repo 和python 环境
GIT 当然是必须的,还要准备Python 环境,官方说是要3.7 以上的版本。我用的conda-forge,python 3.10,用pip 的话,有些包说不定装不上,比如cryptography
,我用pip 装的时候编译出错。我用的包管理器是mamba,可以直接用conda 安装后使用:
conda install mamba
找个地方先把eap-at repo 拉下来:
git clone --recursive https://github.com/espressif/esp-at.git
cd esp-at
然后切换到支持ESP8266 的分支:
git checkout release/v2.2.0.0_esp8266
用conda 创建一个给它用的虚拟环境
conda create -n espat8266
conda activate espat8266
根据里面写好的文件安装python 依赖:
mamba install --file .\requirements.txt
不想用mamba 就把mamba 换成conda。装完以后可以先运行一下它的build 脚本:
python .\build.py
按照提示,选择目标是ESP8266 1MB:
然后它会自动开始在当前目录下载ESP-IDF ,等它出错退出,然后安装ESP-IDF 的python 依赖:
mamba install --file .\esp-idf\requirements.txt
没出错就算了,大抵是确实要出错的。
二、编译环境
需要安装cmake
、ninjia
、xtensa-lx106-elf-gcc
、mconf-idf
,可能还有别的依赖,只是我系统里本来就有,所以它没提示。cmake 和ninjia 自己找来随便怎么装上,然后加入PATH。xtensa-lx106-elf-gcc 的下载地址:
https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-win32.zip
mconf-idf 到下面的链接里找:
https://github.com/espressif/kconfig-frontends/releases/
也可以参考官方文档,只是里面写的不一定都是你需要的:
https://espressif-docs.readthedocs-hosted.com/projects/esp-idf/en/v3.2.5/get-started-cmake/windows-setup-scratch.html
把需要的工具都加入PATH,准备好以后,再运行一遍build 脚本:
python .\build.py
顺利的话会输出命令行参数提示,不顺利就自己看错误信息排查吧:
module_name ESP8266_1MB
platform_name=ESP8266,module_name=ESP8266_1MB
patches check completed for updates.
Setting IDF_PATH environment variable: e:\esp-at\esp-idf
Checking Python dependencies...
e:\esp-at\esp-idf\tools\check_python_dependencies.py:22: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
import pkg_resources
Python requirements from e:\esp-at\esp-idf\requirements.txt are satisfied.
Usage: esp-idf\tools\idf.py [OPTIONS] COMMAND1 [ARGS]... [COMMAND2 [ARGS]...]...
ESP-IDF build management
Options:
-C, --project-dir PATH Project directory.
-B, --build-dir PATH Build directory.
-n, --no-warnings Disable Cmake warnings.
-v, --verbose Verbose build output.
--ccache / --no-ccache Use ccache in build. Disabled by default.
-G, --generator [Ninja|MinGW Makefiles]
CMake generator.
-D, --define-cache-entry TEXT Create a cmake cache entry. This option can be used at most once either globally, or
for one subcommand.
-b, --baud INTEGER Baud rate. This option can be used at most once either globally, or for one
subcommand.
-p, --port TEXT Serial port. This option can be used at most once either globally, or for one
subcommand.
--help Show this message and exit.
Commands:
all Aliases: build. Build the project.
...
对了,或许有人不知道,修改环境变量以后,要重启终端,修改才会同步。当然也可以直接在终端里命令行手动设置好PATH。
三、配置
运行它的配置工具,如果是windows terminal,显示的界面可能会错位,凑合看吧。
python .\build.py menuconfig
这一步它会先从github 下载一些模块,所以在界面出现之前会卡住一段时间,保证梯子畅通[doge]。默认设置大部分别改,可以在Compiler options
里把编译选项改为-Os
,生成的固件尺寸应该会稍微小一点。主要可以改的是Component config -> AT 菜单底下是否启用某一部分AT 指令的设置,默认不勾选HTTP 指令,我给勾上了。
勾的太多了固件尺寸超过1MB 会编译失败。另外可以看一下Serial flasher config 里的信息,如果之后要使用esp_flash_download_tool 下载固件,没准儿要保证设置和这里是一致的。配置完成后键盘选下面的SAVE 保存配置,然后EXIT 退出。至于串口引脚,要到另一个位置修改:
cd .\components\customized_partitions\raw_data\factory_param
打开这个目录下的factory_param_data.csv
,修改对应ESP8266 1MB 版本的uart rx 和uart tx 引脚,把默认的15、13 改为1、3:
需要15、13 的话就不改了。也可以参考官方文档:如何修改 AT 管脚 。
四、编译
配置完成就可以运行编译命令:
python .\build.py build
出错的回去,对着报错信息看看编译工具整对了没。有一个特殊的出错情况,如果提示找不到bootloader.bin
,那可能是它脚本有BUG,忽略,重新编译一次应该就ok 了。
编译成功的输出是这样的:
它会自动生成一个合并的固件文件,位置在:
cd .\build\factory
以后重复使用比较方便,flash tool 设置地址在0x0 就好了,不用按分区表设置好几个bin 文件。
五、下载固件和测试
这就没什么好说的了,按照刚才编译成功时输出的提示,可以直接就地用命令行下载:
python .\build.py flash -p COM28
COM28
是连接ESP8266 的端口。ESP8266 这边下拉GPIO0 以后再上电,进入串口下载模式。下载完以后复位,拿串口助手之类的东西输入AT 指令。AT+GMR
的输出是:
AT+GMR
AT version:2.2.2.0-dev(s-b65f53f - ESP8266 - Jul 5 2024 06:59:41)
SDK version:v3.4-84-ge19ff9af-dirty
compile time(c4d6f32a):Oct 29 2024 19:00:47
Bin version:2.2.1(ESP8266_1MB)
可以看到固件是刚刚编译的。还可以看看支持的AT 指令,确认之前配置对了没:
AT+CMD?
+CMD:0,"AT",0,0,0,1
+CMD:1,"ATE0",0,0,0,1
+CMD:2,"ATE1",0,0,0,1
+CMD:3,"AT+RST",0,0,0,1
+CMD:4,"AT+GMR",0,0,0,1
+CMD:5,"AT+CMD",0,1,0,0
+CMD:6,"AT+GSLP",0,0,1,0
+CMD:7,"AT+SYSTIMESTAMP",0,1,1,0
+CMD:8,"AT+SLEEP",0,1,1,0
+CMD:9,"AT+RESTORE",0,0,0,1
+CMD:10,"AT+SYSRAM",0,1,0,0
+CMD:11,"AT+SYSFLASH",0,1,1,0
+CMD:12,"AT+RFPOWER",0,1,1,0
+CMD:13,"AT+SYSMSG",0,1,1,0
+CMD:14,"AT+SYSROLLBACK",0,0,0,1
...
没反应或者输出不对的话,回去慢慢排查吧~
P.S.
HTTP 指令支持HTTPS 请求,但是我一发指令,ESP8266 就会软复位。文档上说,ESP8266 连接HTTPS 需要把AT 配置里的什么什么Size 增加到4096 以上,不然就复位,但是那个值默认就是4096,而且我增加到5120 了还是不行,可能就是配置支撑不住,或者必须要让固件精简很多东西才能留下足够的硬件资源。
顺便,既然都看到这儿了,我就把我编译好的1MB 固件发出来吧,链接: https://pan.baidu.com/s/1nddHBCBBtODcJllBueAieA?pwd=5w4u 提取码: 5w4u 。