ESP8266机智云固件烧录

Tutorial: 电子电路 Category: 嵌入式 Published: 2026-10-08 01:26:37 Views: 2 Likes: 0 Comments: 0

167.2ESP8266机智云固件烧录

本节没有展示或编写 C 源码。实际操作对象是已经编译、合并好的 GAgent 二进制固件 .bin;二进制文件不能当作源码展开,也不应为满足形式而凭空补写 C 代码。

一、物联网简易温湿度检测项目

本节先补充上一课没有讲完的 ZigBee 透明串口模块测试和 MQ-2 烟雾/可燃气体模块原理,再开始物联网项目的第一步:把 ESP8266 原有固件替换为机智云 GAgent 固件。

完整项目将分成三部分:

  1. 给 ESP8266 烧录机智云 GAgent 固件。
  2. 在机智云平台创建产品并配置数据点。
  3. 编写 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 ─────── 符合该型号规格的电源
  1. 两个 CH340 分别插入电脑,记录各自出现的 COM 号。
  2. 打开两个独立的串口终端窗口,每个窗口连接一个 COM 口。
  3. 两端选择与模块配置一致的串口参数。
  4. 在 A 窗口发送一段容易辨认的文本,检查 B 窗口能否原样收到。
  5. 再由 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-256B635A0E4F0880A1EE8D1BA3723F7C1A5E4748CA472B7537CCEAE3FA9F42747F7

combine 表示多个固件组成部分已合并成一个镜像,所以本节只选择这一个文件并从 0x00000 写入。以后若拿到的是多个独立 .bin,每个文件可能有不同烧写地址,不能把所有文件都照搬成本节的地址 0。

1.2.1.1 ESP8266固件烧写工具

课程使用的是 Espressif Flash Download Tool v3.8.5。双击 flash_download_tool_v3.8.5.exe 后,在启动界面选择:

  • ChipType:ESP8266
  • WorkMode:Develop(开发者模式)
  • 进入 UART/SPI Flash 下载界面

工具版本更新后界面可能不同;精教版保留本节 v3.8.5 的操作,不把新版选项强行套回旧视频。

1.2.1.1.1 选择固件

  1. 点击第一行固件路径右侧的浏览按钮。
  2. 选择课程提供的 GAgent_00ESP826_04020034_8MbitUser1_combine_201806091441.bin。
  3. 勾选该文件行左侧的复选框;只填路径而未勾选时,工具不会烧写这一行。
  4. 在该行地址栏填写 0x00000。视频口述“写 0”,含义就是从 SPI Flash 首地址开始写入合并镜像。

.bin 是 Binary 的缩写,里面是已经编译好的机器数据,不包含可供本节逐行讲解的 C 源码。

1.2.1.1.2 配置选项

本节针对课程所用 ESP-01S 和配套 GAgent 镜像设置:

工具选项课程值正确含义
SPI SPEED40 MHzESP8266 访问外部 SPI Flash 的时钟频率,不是 40 Hz
SPI MODEDOUT外部 SPI Flash 的 Dual Output 读模式,不是 UART 输出模式
FLASH SIZE8 MbitFlash 容量为 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建立共同电平参考
TXD0CH340 RXDESP8266 向电脑发送数据
RXD0CH340 TXDESP8266 接收烧写数据
GPIO0GND复位/上电时选择串口下载模式
EN/CH_PD3.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. 推荐操作顺序

  1. 让 ESP8266 断电,关闭正在占用 CH340 的其他串口软件。
  2. 核对 VCC、GND、TX→RX、RX←TX,确认供电和逻辑电平都是 3.3 V 系统允许范围。
  3. 将 GPIO0 接到公共 GND。
  4. 给 ESP8266 上电,或在 GPIO0 已拉低的状态下复位,使其进入下载模式。
  5. 在烧写工具中选择实际 COM 口,复查固件行已勾选、地址和三项 Flash 参数正确。
  6. 点击 START。工具先与 ROM Bootloader 同步,再擦写/写入并校验数据。
  7. 等待进度条完成且状态显示 FINISH,期间不要拔线、断电或改动 GPIO0。
  8. 烧写完成后断电,解除 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 固件模组,避免把“固件不同”误判成硬件或串口故障。

参考资料