代码继承链 · 五层知识地图 · 每Loop核心概念 · vibe coding 的坑
技术栈钉死:MicroPython + Thonny + ESP32 + WiFi/MQTT。每个 loop 产出一个可 import 的模块,下一 loop 直接继承。五层地图:感知=眼睛 / 计算=大脑 / 通信=神经 / 控制=判断 / 执行=手脚。
| Loop | 主题 | 新概念 | 所属层 |
|---|---|---|---|
| 1 | 亮灯 | GPIO、数字输出、延时 | 执行 |
| 2 | 底盘动 | PWM调速、函数封装 | 执行→控制 |
| 3 | 避障 | 传感器读取、if-then | 感知→控制 |
| 4 | 巡线 | P控制(不讲I/D) | 控制(重点) |
| 5 | 联网 | WiFi、MQTT发布/订阅 | 通信+计算 |
| 6 | 会看 | 图传、OpenCV/MediaPipe | 感知+计算 |
| 7 | 跟人走 | 视觉伺服、PID升级(I/D打补丁) | 感知→控制 |
| 8 | 上板独立 | 端侧推理 | 计算(收敛全链) |
GPIO=硬件世界的开关面板;程序=店长排班表(几点开哪个开关)。
main.py:`from machine import Pin`→定义引脚→`value(1/0)`→sleep闪烁。
AI生成ESP32+Thonny的blink,父子只改引脚号和闪烁间隔。
改参数看闪速;换引脚=换插座。
PWM=快速开关灯来调亮度——不给员工"全干/全不干",高频开关调平均出力。
motor.py封装Motor类(方向+速度两引脚)+drive();main.py调用。
AI写Motor类并注释"为什么";父子只调drive(speed)。
改速度、方向,观察车轮。
传感器=眼睛;if-then=规则决策(客流多了→加开收银台)。
sensor.py封装distance();主循环while True:读→if近转弯 else直行。
先跑通L2,再让AI插入避障;跑L1冒烟测试排除硬件bug。
改"多远算近"阈值;手挡传感器当测试台。
只教P控制("偏得多就多修一点"),用骑自行车压弯类比;I/D不讲名字不讲原理。这叫"反馈"——程序不停看、想、动,自我修正。
pid.py封装PID.update(error);灰度传感器算偏差→P控制算转向→motor转向。
AI生成P控制类并解释;父调参观察"蛇形/抖动",让AI解释现象。
改P系数看走位(挑战赛玩法);纸胶带贴赛道;给爸爸埋bug。
MQTT=微信群(设备=群成员,topic=话题#避障,订阅=入群)。先给痛点再给概念:让儿子拿手机隔着墙遥控失败,再引出"需要一个中转站"。
mqtt.py封装connect()/pub/sub;电脑端Python+paho-mqtt订阅显示。
AI生成两端代码;先跑通"电脑发→小车亮灯",再扩数据上报。
起topic名;发消息命令小车亮灯;看消息刷屏;改遥控按钮文字颜色。
把"看"外包给电脑——摄像头只拍,认东西的是后台团队(电脑AI)。店里监控自己看不懂画面。具身认知环节:拿儿子的照片放大到马赛克级别,让他用8×8格子手绘自己的脸,再让电脑"认出"这个格子画。
camera.py推图;电脑Python收流+MediaPipe识手/人/物;结果经MQTT回发。
先跑官方图传示例防"魔法数字",再让AI加识别;儿子拍"玩具数据集"。
拍照训练"认我的玩具";改置信度;做"考一考"卡片。
视觉伺服=眼睛指挥手脚的闭环;从L3的if-then升为连续PID纠偏。I/D在这里作为"打补丁"自然出现(遇到震荡时讲"不光要看偏多少,还要看偏了多久")。领舞者左偏,舞者每拍微调。
电脑detect.py算目标x偏移→MQTT发error→小车pid.py+motor.py持续修正。直接复用L4的PID。
AI把L4+L5+L6三份代码拼成闭环;父子先人肉遥控对照效果。
站前面让车追;换目标(跟手/玩具);快走跟不上→讨论帧率延迟;当规则制定者(多近算太近、多快算追上)。
端侧推理=决策权从总部下放给店长:省来回传信、反应快、断网能干;代价是店长能力弱(模型小)。
板子跑TFLite-Micro轻量模型(如person检测)→结果直接进PID;电脑降级为总控台。
从官方person-detection示例改;AI讲清"训练→转TFLite→部署"流水线。
换模型测手势/卡片;对比断网前后;画新旧架构图。
| 坑 | 应对 |
|---|---|
| 硬件bug代码查不出(接线松、引脚错) | 先跑L1冒烟测试确认板子活,再逐层排;万用表通断档+电压档解决80%问题 |
| AI瞎编引脚/魔法数字(摄像头格式、延迟) | 先跑官方示例再让AI改;参数集中到config.py |
| "看着对但不跑" | MicroPython缩进、Thonny运行时选错;让AI把"怎么运行"也写进注释 |
| 一次改太多 | 每loop只加一个概念;改崩了回退上一loop能跑的版本(文件夹快照机制) |
| 爸爸变"代码搬运工" | 硬规则:每个Loop爸爸必须能向儿子解释"这段代码哪一行决定什么",且儿子能复述。解释不了?这个Loop不算完 |
父管"为什么"(概念层),子管"改参数会怎样"(实验层)——成就感对半。每个loop结束存一版能跑的代码+3句话说明,就是父子的学习账本。