ESP8266机智云固件烧录
167.2ESP8266机智云固件烧录
本节没有展示或编写 C 源码。实际操作对象是已经编译、合并好的 GAgent 二进制固件
.bin;二进制文件不能当作源码展开,也不应为满足形式而凭空补写 C 代码。
一、物联网简易温湿度检测项目
本节先补充上一课没有讲完的 ZigBee 透明串口模块测试和 MQ-2 烟雾/可燃气体模块原理,再开始物联网项目的第一步:把 ESP8266 原有固件替换为机智云 GAgent 固件。
完整项目将分成三部分:
- 给 ESP8266 烧录机智云 GAgent 固件。
- 在机智云平台创建产品并配置数据点。
- 编写 STM32 代码,让 MCU 通过串口协议与 GAgent 交换数据。
本节只完成第一部分,不包含机智云网页配置或 STM32 业务代码。
1.1 内容补充
补充一:怎样单独测试两只 ZigBee 透明串口模块
课程中的“ZigBee 模块”是向 MCU 提供 UART 透明传输接口的成品无线模块。配置时按卖家说明把两只模块分别设为点对点 A 端和 B 端,并保证信道、UART 波特率、数据位、校验位等参数一致。
测试时暂时不接 STM32 和 51 单片机:
电脑串口终端 A ←→ CH340 A ←→ 无线模块 A
)))) 无线链路 ((((
电脑串口终端 B ←→ CH340 B ←→ 无线模块 B
每一侧的基本接线都是:
CH340 TX ─────► 模块 RX
CH340 RX ◄───── 模块 TX
CH340 GND ────── 模块 GND
模块 VCC ─────── 符合该型号规格的电源
- 两个 CH340 分别插入电脑,记录各自出现的 COM 号。
- 打开两个独立的串口终端窗口,每个窗口连接一个 COM 口。
- 两端选择与模块配置一致的串口参数。
- 在 A 窗口发送一段容易辨认的文本,检查 B 窗口能否原样收到。
- 再由 B 向 A 发送,验证反向链路。
双向都能正确收发,说明“两侧 USB 转串口、模块 UART 配置和无线透明传输”这条最小链路基本正常;它仍不能证明 MCU 引脚、业务帧、心跳或完整项目一定正确。若只有单向可用,应分别检查故障方向上的发送端 TX、接收端 RX、模块角色、信道和供电。
不同无线模块的 VCC 与 UART 电平可能不同。CH340 板上的“3.3 V/5 V”跳帽也不一定同时改变供电输出和 TX 电平,必须查所用转接板及模块规格,不能只凭跳帽颜色判断。
补充二:MQ-2 的 AO 与 DO
MQ-2 对烟雾和多种可燃气体都有响应,不是只识别某一种气体的专用传感器。课程模块提供两种输出:
| 引脚 | 含义 | 本项目是否使用 |
|---|---|---|
AO | 模拟输出,电压随传感器电阻变化 | 本项目不使用 |
DO | 比较器输出,只表示当前信号位于阈值哪一侧 | 本项目接 STM32 PA4 |
裸 MQ-2 内部的敏感电阻记为 (R_S),它与外部负载电阻 (R_L) 组成分压电路。在典型电路中:
[ V_{RL}=V_C\frac{R_L}{R_S+R_L} ]
反推可得:
[ R_S=R_L\left(\frac{V_C}{V_{RL}}-1\right) ]
- 气体环境变化会改变
R_S,于是负载电阻两端的V_RL也会变化,模块把这个电压引到 AO。 - MQ-2 数据手册给出的灵敏度曲线横纵轴采用对数尺度,而且读数会受气体种类、温湿度、预热、老化、负载电阻和个体差异影响。因此“ADC 电压翻倍=气体浓度翻倍”并不成立。
- AO 并非完全不能估算浓度;经过预热、标定、曲线换算和温湿度补偿后可以做近似测量。课程为了避免在这个入门项目中引入复杂标定,选择只读取 DO 的阈值状态。
模块上的 LM393 是电压比较器,不是普通运算放大器。电位器给比较器提供参考电压,AO 信号跨过该参考值时,DO 就在高、低电平之间翻转:
MQ-2 敏感电阻与负载电阻
│
├── AO:连续变化的模拟电压
│
└── LM393 与电位器阈值比较 ──► DO:高/低两种状态
- 转动电位器改变的是报警阈值,不是“校准出真实 ppm”。
- DO 高电平究竟代表“正常”还是“超过阈值”,取决于具体模块的比较器接法;常见模块甚至可能低电平有效。应查看模块原理图,或在安全条件下观察状态灯和 IO 电平确认,不能一概写成“高电平就是有烟”。
- Winsen 的 MQ-2 裸传感器标准测试加热电压是
5.0 V±0.1 V,加热功耗最高约950 mW。课程模块的供电和 IO 电平必须以实物板规格为准;若模块由 5 V 供电,还要确认 DO 不会把超出 MCU 容限的电压送入 STM32。 - MQ-2 需要充分预热、老化和校准,且对多种气体交叉敏感。课程中的 DO 阈值适合功能演示,不能作为经过认证的燃气或火灾安全报警装置。
1.2 项目实现过程
1.2.1 固件修改
“修改 ESP8266 固件”不是在本节打开 ESP8266 源码逐行修改,而是把课程提供的完整二进制镜像写入模组的 SPI Flash。
ESP8266 本身是一颗带处理器、Wi-Fi 和外设的 SoC,ESP-01S 模组还包含 SPI Flash 及必要的外围电路。此前能使用 AT 指令,是因为 Flash 中运行着 AT 固件;本节刷入 GAgent 后,ESP8266 改为运行机智云联网固件,并通过机智云 MCU 串口协议和 STM32 通信。
因此,刷完 GAgent 后原来的 AT 指令实验通常不再按原方式工作。这不是模组损坏,而是固件功能已经改变。以后若要恢复 AT 功能,需要重新烧入与模组 Flash 容量、布局相匹配的 AT 固件。
课程配套文件位于:
源码/3、STM32单片机裸机部分/物联网项目/
├─ ESP8266固件烧写工具/
│ └─ flash_download_tool_v3.8.5/
│ └─ flash_download_tool_v3.8.5.exe
└─ ESP8266机智云烧写固件/
└─ GAgent_00ESP826_04020034_8MbitUser1_combine_201806091441.bin
本地配套固件核对信息:
| 项目 | 值 |
|---|---|
| 文件名 | GAgent_00ESP826_04020034_8MbitUser1_combine_201806091441.bin |
| 文件类型 | ESP8266 GAgent 合并固件 |
| 文件大小 | 1,048,576 字节,即 1 MiB/8 Mbit |
| SHA-256 | B635A0E4F0880A1EE8D1BA3723F7C1A5E4748CA472B7537CCEAE3FA9F42747F7 |
combine 表示多个固件组成部分已合并成一个镜像,所以本节只选择这一个文件并从 0x00000 写入。以后若拿到的是多个独立 .bin,每个文件可能有不同烧写地址,不能把所有文件都照搬成本节的地址 0。
1.2.1.1 ESP8266固件烧写工具
课程使用的是 Espressif Flash Download Tool v3.8.5。双击 flash_download_tool_v3.8.5.exe 后,在启动界面选择:
ChipType:ESP8266WorkMode:Develop(开发者模式)- 进入 UART/SPI Flash 下载界面
工具版本更新后界面可能不同;精教版保留本节 v3.8.5 的操作,不把新版选项强行套回旧视频。
1.2.1.1.1 选择固件
- 点击第一行固件路径右侧的浏览按钮。
- 选择课程提供的
GAgent_00ESP826_04020034_8MbitUser1_combine_201806091441.bin。 - 勾选该文件行左侧的复选框;只填路径而未勾选时,工具不会烧写这一行。
- 在该行地址栏填写
0x00000。视频口述“写 0”,含义就是从 SPI Flash 首地址开始写入合并镜像。
.bin 是 Binary 的缩写,里面是已经编译好的机器数据,不包含可供本节逐行讲解的 C 源码。
1.2.1.1.2 配置选项
本节针对课程所用 ESP-01S 和配套 GAgent 镜像设置:
| 工具选项 | 课程值 | 正确含义 |
|---|---|---|
SPI SPEED | 40 MHz | ESP8266 访问外部 SPI Flash 的时钟频率,不是 40 Hz |
SPI MODE | DOUT | 外部 SPI Flash 的 Dual Output 读模式,不是 UART 输出模式 |
FLASH SIZE | 8 Mbit | Flash 容量为 8 兆位,即 1 MiB;不是串口比特率 |
| 文件地址 | 0x00000 | 合并镜像从 Flash 起始地址写入 |
COM | 以设备管理器为准 | CH340 实际枚举出的串口号,不能照抄视频中的 COM 号 |
原笔记中的“40 赫兹”和“比特率设置为 8 Mbit”均为错误表述。40 MHz、DOUT、8 Mbit 是 SPI Flash 参数;工具底部的 BAUD 才是 PC 与 ESP8266 ROM 下载器之间的 UART 下载波特率。
课程配套烧写日志记录的连接波特率为 115200 bit/s,并出现 chip sync ok、写入 0x00000000 和 Hash of data verified。视频没有要求修改其他未讲到的选项,因此不要凭经验改动晶振、擦除或多文件地址设置。
这些参数是“课程模块 + 课程固件”的组合,不应推广为所有 ESP8266 镜像的固定答案。更换模组、Flash 容量或固件包后,要以新固件发布说明和模组规格为准。
1.2.1.2 连接并烧写
1. ESP8266 下载模式原理
ESP8266 会在复位或上电时采样启动配置脚:
GPIO0在复位时为低电平:进入 ROM 串口下载模式。GPIO0在复位时为高电平:正常从 SPI Flash 启动。EN/CH_PD必须为高电平,芯片才会运行。- 裸芯片/普通模组还要求
GPIO15为低、GPIO2为高或按官方推荐连接;ESP-01S 上的部分上拉/下拉可能已由模组完成,仍应以实物原理图为准。
所以“先让 GPIO0 接地,再给模组上电”不是把 GPIO0 当成烧写数据线,而是在复位瞬间选择 ROM Bootloader。真正的固件数据仍通过 UART0 的 RX/TX 传输。
2. 下载接线
课程画面是在原有 VCC、GND、TX、RX 四根线基础上,再增加一根 GPIO0 到低电平的线:
| ESP-01S | 连接对象 | 作用 |
|---|---|---|
3V3/VCC | 稳定 3.3 V 电源 | 给模组供电 |
GND | 电源 GND、CH340 GND | 建立共同电平参考 |
TXD0 | CH340 RXD | ESP8266 向电脑发送数据 |
RXD0 | CH340 TXD | ESP8266 接收烧写数据 |
GPIO0 | GND | 复位/上电时选择串口下载模式 |
EN/CH_PD | 3.3 V 高电平或模组板载上拉 | 使能 ESP8266 |
稳定 3.3 V ───────── ESP-01S VCC
公共 GND ──────┬──── ESP-01S GND
└──── ESP-01S GPIO0 ← 仅在进入下载模式时拉低
CH340 TX ───────────► ESP-01S RXD
CH340 RX ◄─────────── ESP-01S TXD
课程先尝试用另一块 CH340 的 GND 拉低 GPIO0,接触不良后改接 51 开发板 GND。之所以可行,是这些设备都由同一台电脑 USB 供电,地线最终相连;更清楚的做法是直接把 GPIO0 接到当前烧写系统的公共 GND,不需要为了获得“低电平”额外增加一块开发板。
供电尤其要注意:
- ESP8266 模组建议使用稳定 3.3 V,供电能力至少约 500 mA,并在模组附近做好去耦。很多廉价 USB 转串口板的 3.3 V 引脚电流能力不足,可能导致同步失败、写到一半复位或烧完后反复重启。
- CH340 板的 VCC 跳帽、芯片 IO 电平和 3.3 V 稳压输出不是同一概念。没有确认原理图前,不要把 5 V TX 直接送进 ESP8266 RX。
- 所有 UART 和控制信号必须共地;“GPIO0 接低电平”实际就是相对 ESP8266 GND 接近 0 V。
3. 推荐操作顺序
- 让 ESP8266 断电,关闭正在占用 CH340 的其他串口软件。
- 核对 VCC、GND、TX→RX、RX←TX,确认供电和逻辑电平都是 3.3 V 系统允许范围。
- 将 GPIO0 接到公共 GND。
- 给 ESP8266 上电,或在 GPIO0 已拉低的状态下复位,使其进入下载模式。
- 在烧写工具中选择实际 COM 口,复查固件行已勾选、地址和三项 Flash 参数正确。
- 点击
START。工具先与 ROM Bootloader 同步,再擦写/写入并校验数据。 - 等待进度条完成且状态显示
FINISH,期间不要拔线、断电或改动 GPIO0。 - 烧写完成后断电,解除 GPIO0 与 GND 的连接,再重新上电或复位,ESP8266 才会从 Flash 启动 GAgent。
只看到 FINISH 说明下载工具完成了本次写入流程,并不等于云平台、路由器、STM32 串口协议都已正常。最低限度还要在正常启动模式下确认模组能启动,后续课程再继续验证 GAgent 与 MCU、App 和云端的完整链路。
4. 烧写失败的系统排查
| 现象 | 优先检查 |
|---|---|
| 没有可选 COM 口 | USB 数据线、CH340 驱动、USB 接口、设备管理器 |
| 一直显示等待上电/无法同步 | COM 选错、串口被占用、GPIO0 未在复位时拉低、EN 未拉高、没有共地 |
| 同步失败或乱码 | TX/RX 未交叉、接触不良、逻辑电平错误、下载波特率过高 |
| 写入中途失败 | 3.3 V 电源能力不足、杜邦线松动、USB 连接不稳定 |
| 显示 FINISH 但不上电运行 | GPIO0 仍接地、没有重新复位、Flash 模式/容量不匹配、固件不适合该模块 |
| 烧完后 AT 指令无响应 | 这是 GAgent 取代 AT 固件后的预期变化;若要做 AT 实验需重新烧 AT 固件 |
视频中先选错 COM、又把 RX/TX 接错,并遇到杜邦线接触不良,最终调整后烧写成功。正确经验不是“不好使就多试几遍”,而是一次只检查一个变量,并记录修正后现象是否变化。
烧写成功后应给模组贴标签,至少写明:
GAgent / 00ESP826 / 04020034
8 Mbit / DOUT / 40 MHz
烧写日期:____
这样以后拿到多个外观相同的 ESP-01S 时,能区分 GAgent 模组与 AT 固件模组,避免把“固件不同”误判成硬件或串口故障。
参考资料
- Espressif:ESP8266 硬件接线与固件下载:核对 3.3 V/500 mA 供电建议、EN、GPIO0、GPIO15、UART0 接线和下载后恢复正常启动的方法。
- Espressif:ESP8266 Boot Mode Selection:核对 GPIO0 在复位时决定串口下载或 Flash 启动,以及 GPIO2、GPIO15 的启动条件。
- Espressif:ESP8266 Flash Modes:核对 DOUT、40 MHz 与 Flash 容量的实际含义。
- Espressif:Flash Download Tool User Guide:核对固件路径、地址、勾选项、COM、BAUD 和 START 的下载流程。
- 机智云:ESP8266 串口烧写固件:核对 GAgent 合并固件、USB-TTL 接线和 GPIO0 拉低要求。
- 机智云:GAgent 详解:核对 GAgent 是 MCU、云平台和 App 之间的数据交互桥梁。
- Winsen MQ-2 Datasheet:核对敏感电阻/负载电阻电路、非线性灵敏度曲线、加热电压、预热和环境影响。