执行路径(长期版)
这份文档是你从现在到“大三暑期实习投递前”的长期执行路线:用 P0 → P1 两个闭环项目把基础能力“逼出来”,并用 周 / 月 / 学期 Gate 把进度变成可审核的工程产出。
如果你只想看 IoT 技能地图与主线方向:看 学习路径。
如果你想知道“这一学期每周做什么、怎么验收、不过关怎么回炉”:看本页。
相关规范页(建议一起打开,避免“写着写着跑偏”):
- P0_SPEC_v1:P0 协议/Topic/API/DB 单一真相
- 实时规则:时序/并发/阻塞约束(卡住先看这页)
- 日志规范:日志字段与链路可观测
- 错误码与故障字典:常见故障的定位与修复套路
- 测试体系:单测/合同/E2E/故障注入
- DoD清单:版本交付的最低通过线(用来判定“到底算不算完成”)
- 新机器10分钟复现清单:交付可信度(跑得起来才算交付)
- 作品集材料包:简历 bullet / 追问清单 / 英文讲稿
- 待确认问题:关键决策清单(不回答也能推进,但回答会更稳)
- 项目页入口:P0 项目页 / P1 项目页
快速开始(如果你现在很混乱)
你现在不需要“继续读”,你只需要做完一个最小 Gate:
- 打开本页的「阶段总览」只看“现在→寒假前(1–2 周)”那一行
- 本周只做:环境/仓库/最小链路跑通(串口可读写 + 最小
docker compose起 broker) - 只有当你遇到具体卡点,才回到上面的专题页查对应一页
0)使用方法(先看,避免跑偏)
- 边学边做:学习只为解决当周 Gate 的卡点,禁止“先把课刷完再开工”。
- 一周只追 1 个 Gate:能演示、能脚本验收、能写进周报。
- 不过关不进下一周:Fail 周只做“补测 + 排错 + 稳定化”,不加新功能。
- 证据驱动:每周必须留下可点击的证据:
scripts/通过、日志、截图/录屏、commit。 - 主线优先:TLS/OTA/边缘 AI 放进 Backlog;ROS2/导航按门槛进入(先把 P0 v1.0 稳定做出来,再系统化接 ROS2)。
1)你的画像(作为约束)
- 年级/专业:大二,物联网工程(大二上快结束)
- 基础:C 很弱(会指针),工程化缺失;Python 0 基础
- 时间:每周可投入约 30–35h;英语固定约 4h/周(CET-4 计划 2026 上半年);外卖小程序副项目约 4h/周(时间盒)
- 设备:
NUCLEO-F411RE、普中STM32F103ZET6 玄武(CMSIS-DAP 已可在线调试)、macOS - 计划采购:Raspberry Pi 5(预算约 2000 RMB,愿意焊接)
- 目标:大三暑期实习 → 大四工作;国内 + 海外(欧洲/北美)同步准备;不读研
- 兴趣:机器人/边缘计算 > IoT 后端 > 嵌入式(希望后续加入 ROS2/导航,但以“更容易拿实习”优先)
2)主线选择(最稳且可迁移到机器人)
你想做“机器人/边缘计算”,但现在最缺的是工程落地能力。最稳的路线不是三选一,而是:
边缘/IoT 系统工程路线:MCU + Linux 网关 + MQTT + 后端 + DB + 可观测 + 可复现部署
为什么这条对你最划算:
- 岗位覆盖广:嵌入式、IoT 平台/边缘网关、IoT 后端、机器人系统/平台岗都能投。
- 作品集迁移强:同一套“遥测/命令/ACK/可观测/部署”天然能升级成小车/机器人。
- 补短板效率高:它会强迫你把 C、调试、协议、Linux、后端、DB 都学到“能交付”。
3)主线架构(P0→P1 一年内尽量不改)
STM32(F411 主板) ─ UART/USB CDC ─> Mac / Raspberry Pi 网关(Python)
| |
| telemetry / cmd / ack | MQTT pub/sub
v v
MQTT Broker (Mosquitto)
|
v
Backend (FastAPI)
|
v
DB (Postgres)
|
v
Query / Curve / Command API- 上行:设备 →(串口协议)→ 网关 → MQTT → 后端入库 → 查询/曲线
- 下行闭环:API 下发命令 → MQTT → 网关 → 设备执行 → ACK → 后端更新 → API 可查
小车/机器人(P1)只是把“设备侧”换成电机/编码器/IMU,把“命令”换成速度/转向而已。
4)阶段总览(寒假 + 大二下 + 暑假 + 大三上)
| 阶段 | 目标(能演示) | 交付物(落到 repo) | Gate 验收(必须过) |
|---|---|---|---|
| 现在→寒假前(1–2 周) | 环境/仓库/最小链路跑通 | 统一 repo、目录结构、串口读写脚本、最小 docker compose | 新电脑可复现:串口可读写;docker compose up 可起 broker |
| 寒假(6 周,默认中高强度) | P0 v0.9:闭环全打通 | MCU 协议 + 网关 + broker + 后端 + DB + 3 脚本 + 英文 README 草稿 | 上报/入库/查询/下发/ACK 全通;一键启动;脚本全 PASS |
| 大二下(16 周) | P0 v1.0:稳定、可复现、可面试讲 | 可靠性、可观测、测试、(可选)Pi 常驻部署 | 24h 稳定跑;故障可定位;README/架构/接口齐全 |
| 暑假(6–8 周,可选强度) | P1 v0.7:小车云控+遥测闭环 | PWM 电机 + 编码器(速度闭环)+(可选)IMU + 复用 P0 命令/ACK | 云端下发速度/转向→执行→ACK;遥测可视化 |
| 大三上(16 周) | 作品集定型 + 面试准备 | P0 v1.2、P1 v1.0、英文材料、算法基本盘 | 5 分钟讲清架构/权衡/排障;可现场演示与复现 |
4.1 版本路线(按版本交付,而不是按学科刷课)
你会发现:按“版本号”推进,比按“学科”推进更稳、更不焦虑。下面是推荐的版本节奏(可根据实际压缩/拉长):
- P0 v0.1:串口 telemetry + 本地解析(不碰 MQTT)
- DoD:能抓原始串口流;能稳定运行 ≥ 30min;有最小 README
- P0 v0.3:协议 v1(CRC/ring buffer/parser)+ CMD/ACK(串口闭环)
- DoD:
cmd_id幂等去重;串口 1000 次命令成功率 ≥ 99%
- DoD:
- P0 v0.5:网关 + MQTT 上行
- DoD:telemetry 稳定上报 ≥ 1h;断网能重连(有日志)
- P0 v0.7:后端 + DB 入库 + 查询 API
- DoD:
docker compose up -d一键启动;能查历史数据
- DoD:
- P0 v0.9:下行命令 API + 全链路 ACK 回执
- DoD:API 下发→设备执行→ACK 入库可查;端到端成功率 ≥ 95%
- P0 v1.0:工程化定型
- DoD:3 类测试(单测/合同/E2E)最小闭环 + 故障注入 runbook + 24h 稳定跑 + 英文 README + demo 视频
- P1 v0.4:小车能云端遥控(含安全占位:急停/超时刹车/限速)
- P1 v0.7:编码器速度闭环(PID)+ 遥测可视化
- P1 v1.0:安全约束定型 + demo + 英文文档(见 P1_SPEC_v0)
版本规格“钉死”在 P0_SPEC_v1,测试体系在 测试体系,投递材料在 作品集材料包。
5)审核评估体系(周 / 月 / 学期)
5.0 硬指标仪表盘(让你知道自己是否真的变强)
每月更新一次(写到 docs/reviews/YYYY-MM.md 一页表格即可):
- 稳定性:连续运行时长(目标:1h → 8h → 24h → 48h)
- 可靠性:命令成功率(目标:≥95% → ≥98% → ≥99%)
- 可观测:平均定位时间(目标:5min → 2min → 1min)
- 可复现:新机器复现耗时(目标:30min → 15min → 10min)
- 测试:单测数量/合同测试是否存在/E2E 是否一键跑通(目标:从“有/无”开始)
5.1 周 Gate(Pass/Fail)
Pass 必须同时满足:
- 本周 Gate 可演示(可录屏)
- 本周关键脚本/用例全通过(至少 1 个脚本或 1 个可复现步骤)
- 至少 5 次有效 commit(不是只改文案)
Fail 处理:
- 下周不加新功能,只做:补测、排错、稳定化、复盘文档(写清 root cause)
5.2 月度 Rubric(0–30 分,≥18 才达标)
每月月底写到 docs/reviews/YYYY-MM.md:
- 工程质量(0–5):目录结构、模块边界、命名、可维护性
- 可靠性(0–5):超时重试、ACK 去重、边界条件处理
- 可观测(0–5):日志分级、关键链路可定位(
device_id/cmd_id/seq) - 可复现(0–5):一键启动、脚本齐、环境说明完整
- 文档(0–5):中英 README、架构图、接口文档、运行截图/视频
- 面试表达(0–5):能讲清“为什么这么设计/踩坑怎么修/指标是多少”
5.3 学期审核(必须产出“可投递版本”)
每学期末至少交付:
- 一个 Release Tag(例如
v1.0/v1.1) - 一段 demo 视频(2–4 分钟)
- 英文 README(Quickstart + Architecture + API + Troubleshooting)
- 最少 3 个验收脚本:串口 / MQTT 往返 / API
6)详细计划(按阶段拆)
你不需要“每天表格化”,你只需要每周把 Gate 做出来。
考试周/忙碌周:把目标砍半,但顺序不乱,且保持不断档(算法/英语各 1 次)。
阶段 A:现在→寒假前(1–2 周)
目标:把启动阻力降到最低。
- Gate A(必须过)
- NUCLEO-F411RE 能稳定串口输出
docker compose能起 broker(先只起 Mosquitto 即可)scripts/serial_read.py能读写串口(后续一切都靠它)
- 视频/资源(停止点)
- Missing Semester:Lecture 1(Shell)+ Lecture 6(Git)
- STM32:只看“CubeIDE 新建工程 + printf 重定向到 UART”的内容,能跑起来就停
阶段 B:寒假 6 周(P0 v0.9:闭环打通)
你不追“速通”,但寒假是最适合把 P0 一次打穿的窗口:做完会极大降低大二下的焦虑。
Week 1(Gate):固件最小工程 + Mock Telemetry
- 交付
- F411 工程能断点调试;每秒输出一条 telemetry(先用 mock 数据,别等传感器到货)
scripts/serial_capture.py保存原始串口流(后续排错证据)
- 验收
- 连续运行 30 分钟不死机;日志/输出格式稳定
Week 2(Gate):二进制协议 v1 + CRC16 + RingBuffer + CMD/ACK
- 交付
- 协议建议字段:
SOF + VER + TYPE + telemetry_seq/cmd_id + LEN + PAYLOAD + CRC16 - UART RX 中断 + ring buffer + parser 状态机
scripts/test_serial_protocol.py:1000 次命令/ACK 成功率 ≥ 99%
- 协议建议字段:
- 验收
- CRC 错误接近 0;出现错帧能自动 resync;ACK 能对齐
cmd_id
- CRC 错误接近 0;出现错帧能自动 resync;ACK 能对齐
Week 3(Gate):I2C 传感器(BME280 优先)+ Telemetry 上报
- 交付
- I2C 扫描 + 读取传感器(温湿压)→ 封包上报
- 没传感器时保留 mock 模式(开关可配)
- 验收
- 30 分钟稳定读取;异常可重试并记录错误计数
Week 4(Gate):网关(Python)+ MQTT 上行通
- 交付
gateway/:串口读帧 → JSON → MQTT publishscripts/test_mqtt_roundtrip.py:验证 telemetry 频率与字段齐全
- 验收
- MQTT 连续 1 小时不掉线;掉线能自动重连并记录
Week 5(Gate):后端 + DB 入库 + 查询 API
- 交付
- FastAPI 订阅 telemetry 入库 Postgres
- API:
/health、/devices、/devices/{id}/telemetry?from=&to= scripts/test_api.py(smoke test)
- 验收
docker compose up -d后 2 分钟系统可用;能查到历史数据
Week 6(Gate):下行命令闭环 + ACK 回执 + 作品集最小成型
- 交付
- API 下发命令 → MQTT → 网关 → 串口 → MCU 执行 → ACK 回 MQTT → 后端更新
- 3 个脚本齐全(串口/MQTT/API)
- 英文 README 草稿 + 2–4 分钟 demo(粗糙版也行)
- 验收
- 命令闭环成功率 ≥ 95%(至少 20 次)
- 新电脑照 README 能跑起来
阶段 C:大二下(16 周,P0 v1.0 工程化)
总目标:把 P0 从“能跑”升级到“稳定、可复现、可面试讲”。
Month 1:可靠性与协议鲁棒(大二下第 1 个月)
- 月目标:把“偶发问题”变成“可复现、可定位、可修复”的工程问题。
- Week 1 Gate:串口掉线/拔插可恢复
- 交付:网关支持 USB 拔插后自动重连;设备端/网关都有“离线→重连→恢复”的日志
- 验收:人为拔插 10 次,成功恢复 ≥ 9 次(失败必须写复盘)
- Week 2 Gate:MQTT 断网可恢复
- 交付:网关/后端断网后能自动重连;重连过程可观测(重试次数、退避时间)
- 验收:断网 60 秒再恢复,系统能恢复 telemetry 入库
- Week 3 Gate:协议鲁棒(坏帧不崩、可 resync)
- 交付:CRC 错误/长度错误/未知 TYPE 都能被丢弃并计数;parser 能 resync 到下一个 SOF
- 验收:用脚本注入 1% 坏帧,系统不崩溃且能持续产出有效数据
- Week 4 Gate:测试与一键验收雏形
- 交付:
make test(或./scripts/run_tests.sh)能串起来跑 3 个脚本 - 验收:新电脑按 README 跑
docker compose up+make test能通过(允许你手动填串口端口)
- 交付:
Month 2:数据与查询(大二下第 2 个月)
- 月目标:让平台能力“可展示、可讲述”——数据链路、查询、曲线。
- Week 1 Gate:DB 索引 + 查询性能
- 交付:对
telemetry(device_id, ts)建索引;写一个简单 benchmark(例如查询最近 1h/24h) - 验收:同样数据量下,查询耗时明显下降(把数字写进
docs/reviews/)
- 交付:对
- Week 2 Gate:最小曲线展示(别陷入前端)
- 交付:实现一个最小曲线(可以是后端返回 JSON + 前端画,或返回 PNG)
- 验收:能看到温湿压趋势;曲线时间轴正确
- Week 3 Gate:命令状态机完善
- 交付:命令状态从 CREATED→SENT→ACKED/TIMEOUT/FAILED;ACK 关联
cmd_id可追踪 - 验收:制造超时/失败时,状态能正确落库;API 可查询到原因
- 交付:命令状态从 CREATED→SENT→ACKED/TIMEOUT/FAILED;ACK 关联
- Week 4 Gate:写一页“架构与取舍”(中英至少其一)
- 交付:
docs/architecture.md+docs/topic-spec.md+docs/serial-protocol.md - 验收:你能用 3 分钟讲清:为何 MQTT、QoS 如何选、为何需要 ACK/去重、如何排障
- 交付:
Month 3:Linux 部署(大二下第 3 个月,建议此时买 Pi5 或用虚拟机)
- 月目标:把“能跑”升级为“能常驻、能部署、能维护”。
- Week 1 Gate:网关在 Linux 常驻运行
- 交付:
systemdservice(或tmux脚本)+ 一页部署说明 - 验收:重启机器后网关自动拉起;日志可用
journalctl或文件查看
- 交付:
- Week 2 Gate:Linux 上一键启动全栈
- 交付:Pi/虚拟机上
docker compose up -d启动 broker/backend/db - 验收:断电重启后 10 分钟内能恢复到“可用状态”
- 交付:Pi/虚拟机上
- Week 3 Gate:日志与故障定位(Runbook)
- 交付:写
docs/runbook.md:常见故障(串口断开、broker 重启、DB 不可用)怎么定位 - 验收:自己随机制造 3 次故障,按 runbook 5 分钟内定位到层级
- 交付:写
- Week 4 Gate:发布一个“部署版 Demo”
- 交付:录一段 1–2 分钟视频:Pi 上跑网关 + 云端查询/命令
- 验收:陌生人照 README 能复现(你可以让同学照做)
Month 4:作品集定型 + 四级冲刺(大二下第 4 个月)
- 月目标:P0
v1.0可投递、能演示、能面试讲。 - Week 1 Gate:
v1.0release + changelog - Week 2 Gate:英文 README 完整(Quickstart/Architecture/API/Troubleshooting)
- Week 3 Gate:中英讲解稿(5 分钟版)+ 常见问答(QoS、重试、幂等、排障)
- Week 4 Gate:四级冲刺(如果你计划 6 月参加)
- 交付:至少 2 套真题复盘(错因分类)+ 用英文讲 P0 2 分钟录音
大二下每周时间分配(建议)
- P0 主线工程:14–18h
- 外卖小程序(副项目):4h(时间盒;不许挤占主线)
- 算法:4–6h(保持不断档即可)
- OS/计网:3–4h(用“面试卡片”驱动)
- 英语:4h(四级为主;用项目 README/讲解驱动)
阶段 D:暑假(6–8 周,P1 小车,复用 P0)
规则:P1 不推翻 P0,只复用“命令/遥测/ACK/云端观测”。
没硬件先做仿真/桌面 demo:只要接口与链路先跑通。
- 维持版(时间被实习/比赛挤占时)
- 目标:云端遥控(速度/转向)+ ACK + 遥测(速度/电压)
- Gate 建议:先让 P0 的“命令/ACK”直接控制电机 PWM(哪怕很粗糙)
- 冲刺版(时间充足)
- 目标:编码器速度闭环(PID)+(可选)IMU 融合 + 轨迹/状态可视化
- 8 周建议拆法
- Week 1:电机驱动与安全(急停/限幅/过流保护至少占位)
- Week 2:云端命令接入(
SET_VEL/SET_MODE)+ ACK - Week 3:编码器接入 + 速度测量
- Week 4:速度 PID(可量化误差)
- Week 5:遥测完善(电池电压/电机 PWM/错误码)
- Week 6:IMU(可选):只做“数据稳定上报”,滤波与姿态估计可以后移
- Week 7:demo 打磨(网页/曲线/遥控)
- Week 8:P1 英文 README + 故障复盘
阶段 E:大三上(16 周,作品集抛光 + 面试)
你想碰 ROS2/室内导航:建议在大三上先做“仿真优先”的加分线(不要求真车导航硬件)。
前提:P0 至少 v1.0(长跑 + 故障注入过关),P1 至少 v0.7(速度闭环与遥测稳定)。
- Month 1:工程化重构(配置、脚本、文档统一)
- Gate:一键启动/一键测试/一键录 demo(脚本化)
- 加分线(ROS2 轻触):把 P1 的“控制/遥测”做成 ROS2 基础 node(先在 PC 上跑,先不碰导航)
- Month 2:可观测与稳定(48h 长跑 + 故障注入 + runbook)
- Gate:写一份“稳定性报告”(掉线次数、重连耗时、失败原因 Top3)
- 加分线(ROS2 系统化):做一个 ROS2 bridge(把
cmd_vel映射到你的SET_VEL,把遥测映射成 odom/diagnostics)
- Month 3:面试基本盘(算法 + 项目叙述 + 英文表达)
- 算法目标:保持不断档(建议每周 8 题左右,优先常见数据结构与模板题)
- 英文目标:每周 2 次 2–4 分钟项目讲解录音(听回放→改)
- 加分线(导航仿真):Nav2/SLAM 先在仿真跑通(Gazebo/Isaac 任选其一,优先“跑通配置与数据流”)
- Month 4:投递前定版(P0 v1.2 + P1 v1.0 + 作品集目录整理)
- Gate:整理“作品集审计清单”(README、docs、scripts、demo、release)
- 加分线(导航展示):录一段 1–2 分钟“仿真导航 demo”(能讲清 data flow 与故障定位点)
7)视频/课程清单(主选 + 备选 + 停止点)
原则:每个主题最多两套;如果你找不到完全一致的版本,用“搜索关键词 + 选片标准”替代。
7.1 工具链 / Shell / Git / 调试
- 主选:MIT The Missing Semester
- 停止点:Lecture 1、2、5、6、7、8
- 备选:Learn Git Branching(网页交互)
7.2 C 与内存(只学够用)
- 主选:CS50 C 与 Memory(只做 Week 1 + Week 4)
- 备选(中文):翁恺 C 语言(停止点:能独立写 ring buffer + parser 状态机 + 错误处理)
7.3 STM32CubeIDE + HAL(F411 优先)
- 主选(搜索):
Controllerstech STM32CubeIDE F411 UART interrupt/I2C scan/PWM timer- 停止点:能完成 UART RX 中断+ringbuffer、I2C 读传感器、Timer/PWM
- 备选:任何“NUCLEO-F411RE + CubeIDE + HAL”系列
- 选片标准:视频标题明确包含
UART Interrupt、I2C、Timer/PWM、Debug
- 选片标准:视频标题明确包含
7.4 Python(只为网关/脚本服务)
- 主选:CS50 Python 周(只看 lecture,做 2 个小脚本:串口读写、MQTT 收发)
- 备选:Automate the Boring Stuff(停止点:变量/控制流/函数/数据结构/文件/异常)
7.5 MQTT
- 主选:HiveMQ MQTT Essentials(看完概念 + QoS + retained + LWT)
- 停止点:你能解释 QoS0/1、retain、LWT,并能设计 topic
- 备选:按卡点搜索
MQTT QoS retained LWT(单条 10–20 分钟,讲清楚就停)
7.6 FastAPI / DB / Docker
- FastAPI 主选:freeCodeCamp FastAPI Crash Course
- 停止点:能写 CRUD + 参数校验 + 错误处理,能把数据入库/查询跑通
- SQL 主选:SQLBolt(停止点:Lesson 1–6 + 13–18)
- Docker 主选:
Docker Compose in 12 Minutes(看完立刻写你自己的 compose)
7.7 OS / 计网 / 算法 / 英语(低量不断档)
- OS:以“面试卡片”为导向(进程/线程/锁/内存/IO/死锁),每周 1 次复述 + 写一页卡片
- 计网主选:Practical Networking / Hussein Nasser(挑 TCP/UDP/DNS/HTTP)
- 停止点:能结合你的 P0 讲清“端口/TCP 超时重传/DNS/HTTP”
- 算法主选:NeetCode Roadmap(先 Arrays/Hashing、Two Pointers、Stack/Queue、Heap)
- 停止点:保持不断档即可(大三上再系统补齐)
- 英语:项目驱动(每周更新英文 README 一小段 + 录一次 2 分钟英文讲解)
8)采购清单(必买 / 可选)+ 无传感器替代
8.1 传感器二选一(先做 P0,后做 P1)
- P0 优先:
BME280(温湿压三合一,最适合做曲线展示) - P1 优先:
MPU6050(更贴小车,但会引入校准/滤波,建议暑假再上)
8.2 Raspberry Pi 5(建议采购策略)
- 你可以现在就买,但把它当“网关/Linux 环境”,不要让装系统成为主线阻塞
- 推荐配置:Pi 5 8GB + 27W 电源 + 散热 + 高质量 microSD(NVMe 可选)
8.3 无传感器也能推进(必须)
- Mock telemetry:在 MCU 侧生成可预测数据(正弦波/锯齿/随机种子),先把链路/协议/入库/曲线跑通
- 传感器到货后:只替换数据源,不改协议与云端
9)Backlog(明确禁止提前做)
- TLS/证书体系、MQTT over TLS
- OTA 升级与固件签名
- 真车室内导航硬件(激光/视觉 SLAM 上车):等 P1 v1.0 + ROS2 bridge 稳定后再做(先仿真)
- 边缘 AI(模型部署与性能优化)
- RTOS 深入(先把 HAL 工程能力打牢)
10)每周复盘模板(≤5 条,写到 docs/reviews/)
- 本周 Gate 是否通过?证据是什么(脚本输出/录屏/截图/commit)?
- 这周最值钱的一个 bug:根因是什么?我如何定位?如何避免复发?
- 下周最大风险是什么?我准备砍掉什么非主线内容来保证 Gate?
- 我新增了哪一句“可面试表达”(中文/英文各一句)?
- 算法/英语是否断档?断档原因是什么?下周如何补救?