← 返回嵌入式学习资料EMBEDDED SYSTEMS · CUMULATIVE PROJECT

CUMULATIVE PROJECT · CHAPTER 4–12

一台环境遥测设备

不是每章重新写一个小程序。这里用同一块 NUCLEO-G071RB 从按键、LED 和时间开始,逐步加入采样、串口协议、RTOS 与 ESP32 网关。每次只增加一项能力,同时保留已经验证过的行为。

项目接口:NUCLEO-G071RB 使用 3.3 V 逻辑和 USART2(115200 8N1);遥测帧名为 telemetry-v1。主机脚本可帮助检查格式,但 LED、串口、ADC 与无线行为仍要在实际板卡上观察。

MILESTONE MAP

功能如何累积,而不是互相替换

完成一个里程碑后,先确认旧行为仍在,再进入下一个模块。这样问题出现时,才能判断是新增功能造成的,还是已有边界被破坏。

CHAPTER 4–6 · DEVICE BEHAVIOUR

先让实体行为稳定

按键触发 LD4,软件去抖避免一次按压产生多个事件;定时器提供心跳;空闲时由 WFI 等待中断,避免无意义忙等。

  • 短按、长按与抖动输入能区分。
  • 周期心跳让设备是否仍运行可见。
  • 唤醒后不会丢失状态或重复执行动作。
进入 GPIO 与状态机 →
CHAPTER 7–9 · DATA PATH

让设备能说清自己的状态

UART 接受有限命令,ADC1/PA0 提供采样值,协议用版本、字段和错误计数把有效输入与坏输入分开。

  • STATUS 显示当前状态和运行时间。
  • 无效命令不会改变 LED 或采样状态。
  • 每一帧都能标识为 telemetry-v1。
进入 UART、I²C 与 SPI →
CHAPTER 10–11 · CONCURRENCY

并发时仍留下健康证据

FreeRTOS 将采样与 I/O 分成任务,通过队列交接数据;诊断出口给出 uptime、队列状态和接收错误,帮助把卡顿与错误输入区分开。

  • 采样任务不直接阻塞串口输出。
  • 队列满、超时和解析失败都有计数。
  • 重启后能从串口记录判断上一次状态。
进入 FreeRTOS 与实时设计 →
CHAPTER 12 · NETWORK GATEWAY

接入网络而不改写 MCU 协议

ESP32 从串口接收完整帧,作为网关建立实验 SoftAP,并提供健康检查与最近一次遥测;它不替代 MCU 的采样和实时控制职责。

  • GET /health 显示网关是否收到有效帧。
  • GET /telemetry 返回最后一帧遥测数据。
  • 串口断开时接口返回明确的失联状态。
进入 ESP32 联网设备 →

WHAT TO VERIFY

每个阶段保留什么证据

只要换了接线、版本或协议字段,就从受影响的行重新检查。串口“能连上”不等于设备已经按预期工作。

阶段可观察输出出现异常时先检查
GPIO 与时间LED 状态、心跳周期、按键事件引脚映射、上拉下拉、去抖窗口与时钟配置
串口与采样命令回应、ADC 读数、错误计数波特率、换行、ADC 通道、输入电压范围
RTOS任务健康输出、队列计数、超时记录优先级、阻塞时间、共享数据与栈余量
ESP32 网关/health 与 /telemetry 响应完整帧边界、Wi-Fi 客户端地址与网关日志

PROJECT HANDOFF

把它当作后续项目的起点

完成第 12 章后,你可以保留这份工程作为模板;新增传感器或协议时,先写清输入、状态、输出和恢复方式,再开始改代码。

保持固定板卡、串口参数和 telemetry-v1 字段是对照基线,避免每一章随意改名或改单位。
逐项增加一次只增加一个传感器、一个命令或一个任务,修改前后都保存串口输出。
准备迁移当改用新板卡时,先复核供电、引脚、时钟和下载器,再迁移上层协议与状态机。