执行路径(长期版)

这份文档是你从现在到“大三暑期实习投递前”的长期执行路线:用 P0 → P1 两个闭环项目把基础能力“逼出来”,并用 周 / 月 / 学期 Gate 把进度变成可审核的工程产出。

如果你只想看 IoT 技能地图与主线方向:看 学习路径
如果你想知道“这一学期每周做什么、怎么验收、不过关怎么回炉”:看本页。

相关规范页(建议一起打开,避免“写着写着跑偏”):

快速开始(如果你现在很混乱)

你现在不需要“继续读”,你只需要做完一个最小 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%
  • P0 v0.5:网关 + MQTT 上行
    • DoD:telemetry 稳定上报 ≥ 1h;断网能重连(有日志)
  • P0 v0.7:后端 + DB 入库 + 查询 API
    • DoD:docker compose up -d 一键启动;能查历史数据
  • 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 必须同时满足:

  1. 本周 Gate 可演示(可录屏)
  2. 本周关键脚本/用例全通过(至少 1 个脚本或 1 个可复现步骤)
  3. 至少 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

Week 3(Gate):I2C 传感器(BME280 优先)+ Telemetry 上报

  • 交付
    • I2C 扫描 + 读取传感器(温湿压)→ 封包上报
    • 没传感器时保留 mock 模式(开关可配)
  • 验收
    • 30 分钟稳定读取;异常可重试并记录错误计数

Week 4(Gate):网关(Python)+ MQTT 上行通

  • 交付
    • gateway/:串口读帧 → JSON → MQTT publish
    • scripts/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 可查询到原因
  • 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 常驻运行
    • 交付:systemd service(或 tmux 脚本)+ 一页部署说明
    • 验收:重启机器后网关自动拉起;日志可用 journalctl 或文件查看
  • Week 2 Gate:Linux 上一键启动全栈
    • 交付:Pi/虚拟机上 docker compose up -d 启动 broker/backend/db
    • 验收:断电重启后 10 分钟内能恢复到“可用状态”
  • 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.0 release + 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 InterruptI2CTimer/PWMDebug

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/

  1. 本周 Gate 是否通过?证据是什么(脚本输出/录屏/截图/commit)?
  2. 这周最值钱的一个 bug:根因是什么?我如何定位?如何避免复发?
  3. 下周最大风险是什么?我准备砍掉什么非主线内容来保证 Gate?
  4. 我新增了哪一句“可面试表达”(中文/英文各一句)?
  5. 算法/英语是否断档?断档原因是什么?下周如何补救?