v1.0 · MicroPython + Thonny + ESP32-S3

软件学习分册

代码继承链 · 五层知识地图 · 每Loop核心概念 · vibe coding 的坑

🧬 代码继承链 · 父子共建"零件库"

技术栈钉死:MicroPython + Thonny + ESP32 + WiFi/MQTT。每个 loop 产出一个可 import 的模块,下一 loop 直接继承。五层地图:感知=眼睛 / 计算=大脑 / 通信=神经 / 控制=判断 / 执行=手脚。

L1 blink.py ──► L2 +motor.py ──► L3 +sensor.py ──► L4 +pid.py
                                      │
L5 +mqtt.py ◄─────────────────────────────┘
  │
L6 +camera/视觉脚本(电脑端 MediaPipe/OpenCV)
  │
L7 五层全链路跑通(视觉伺服闭环)
  │
L8a 系统集成 + 发布会 ──► L8b 端侧推理(TFLite)

🗺️ 知识地图 · 每Loop落到五层哪层

Loop主题新概念所属层
1亮灯GPIO、数字输出、延时执行
2底盘动PWM调速、函数封装执行→控制
3避障传感器读取、if-then感知→控制
4巡线P控制(不讲I/D)控制(重点)
5联网WiFi、MQTT发布/订阅通信+计算
6会看图传、OpenCV/MediaPipe感知+计算
7跟人走视觉伺服、PID升级(I/D打补丁)感知→控制
8上板独立端侧推理计算(收敛全链)

💡 L1 亮灯

🎓

核心概念

GPIO=硬件世界的开关面板;程序=店长排班表(几点开哪个开关)。

🧩

代码结构

main.py:`from machine import Pin`→定义引脚→`value(1/0)`→sleep闪烁。

🤖

AI策略

AI生成ESP32+Thonny的blink,父子只改引脚号和闪烁间隔。

👦

儿子任务

改参数看闪速;换引脚=换插座。

复用:blink=冒烟测试模板,以后每次换硬件先跑它确认板子活着。

🚗 L2 底盘动

🎓

核心概念

PWM=快速开关灯来调亮度——不给员工"全干/全不干",高频开关调平均出力。

🧩

代码结构

motor.py封装Motor类(方向+速度两引脚)+drive();main.py调用。

🤖

AI策略

AI写Motor类并注释"为什么";父子只调drive(speed)。

👦

儿子任务

改速度、方向,观察车轮。

复用:motor.py=第一个"自家零件",后续全部import。

📡 L3 避障

🎓

核心概念

传感器=眼睛;if-then=规则决策(客流多了→加开收银台)。

🧩

代码结构

sensor.py封装distance();主循环while True:读→if近转弯 else直行。

🤖

AI策略

先跑通L2,再让AI插入避障;跑L1冒烟测试排除硬件bug。

👦

儿子任务

改"多远算近"阈值;手挡传感器当测试台。

复用:主循环骨架(感知→决策→行动)是机器人程序通用模板。优化点:儿子从L3起改参数代码(阈值调参),获得"我能改变车的行为"的因果体验。

🏁 L4 巡线(重点)

🎓

核心概念

只教P控制("偏得多就多修一点"),用骑自行车压弯类比;I/D不讲名字不讲原理。这叫"反馈"——程序不停看、想、动,自我修正。

🧩

代码结构

pid.py封装PID.update(error);灰度传感器算偏差→P控制算转向→motor转向。

🤖

AI策略

AI生成P控制类并解释;父调参观察"蛇形/抖动",让AI解释现象。

👦

儿子任务

改P系数看走位(挑战赛玩法);纸胶带贴赛道;给爸爸埋bug。

复用:pid.py=最高价值零件,一切"自动修正"场景复用(L7核心)。Plan B:P控制调不通→降级双传感器"左偏右纠"(bang-bang)宣布通关,PID留到L7再战。

📱 L5 联网

🎓

核心概念

MQTT=微信群(设备=群成员,topic=话题#避障,订阅=入群)。先给痛点再给概念:让儿子拿手机隔着墙遥控失败,再引出"需要一个中转站"

🧩

代码结构

mqtt.py封装connect()/pub/sub;电脑端Python+paho-mqtt订阅显示。

🤖

AI策略

AI生成两端代码;先跑通"电脑发→小车亮灯",再扩数据上报。

👦

儿子任务

起topic名;发消息命令小车亮灯;看消息刷屏;改遥控按钮文字颜色。

复用:mqtt.py+电脑脚本=小车↔电脑永久通道,L6/7全靠它。Plan B:公共broker掉线→ESP32自建网页遥控(免broker)。

👁️ L6 会看

🎓

核心概念

把"看"外包给电脑——摄像头只拍,认东西的是后台团队(电脑AI)。店里监控自己看不懂画面。具身认知环节:拿儿子的照片放大到马赛克级别,让他用8×8格子手绘自己的脸,再让电脑"认出"这个格子画

🧩

代码结构

camera.py推图;电脑Python收流+MediaPipe识手/人/物;结果经MQTT回发。

🤖

AI策略

先跑官方图传示例防"魔法数字",再让AI加识别;儿子拍"玩具数据集"。

👦

儿子任务

拍照训练"认我的玩具";改置信度;做"考一考"卡片。

复用:视觉脚本+推流代码——"眼睛"到位,等L7接"手脚"。

🤖 L7 跟人走

🎓

核心概念

视觉伺服=眼睛指挥手脚的闭环;从L3的if-then升为连续PID纠偏。I/D在这里作为"打补丁"自然出现(遇到震荡时讲"不光要看偏多少,还要看偏了多久")。领舞者左偏,舞者每拍微调。

🧩

代码结构

电脑detect.py算目标x偏移→MQTT发error→小车pid.py+motor.py持续修正。直接复用L4的PID。

🤖

AI策略

AI把L4+L5+L6三份代码拼成闭环;父子先人肉遥控对照效果。

👦

儿子任务

站前面让车追;换目标(跟手/玩具);快走跟不上→讨论帧率延迟;当规则制定者(多近算太近、多快算追上)

复用:首次跑通五层全链路=项目地基。注意:L7依赖电脑运行,不承诺脱机跟随。

🚀 L8 上板独立

🎓

核心概念

端侧推理=决策权从总部下放给店长:省来回传信、反应快、断网能干;代价是店长能力弱(模型小)。

🧩

代码结构

板子跑TFLite-Micro轻量模型(如person检测)→结果直接进PID;电脑降级为总控台。

🤖

AI策略

从官方person-detection示例改;AI讲清"训练→转TFLite→部署"流水线。

👦

儿子任务

换模型测手势/卡片;对比断网前后;画新旧架构图。

复用:模型转换部署流水线=最有迁移价值的技能。

⚠️ vibe coding 的坑与应对

应对
硬件bug代码查不出(接线松、引脚错)先跑L1冒烟测试确认板子活,再逐层排;万用表通断档+电压档解决80%问题
AI瞎编引脚/魔法数字(摄像头格式、延迟)先跑官方示例再让AI改;参数集中到config.py
"看着对但不跑"MicroPython缩进、Thonny运行时选错;让AI把"怎么运行"也写进注释
一次改太多每loop只加一个概念;改崩了回退上一loop能跑的版本(文件夹快照机制)
爸爸变"代码搬运工"硬规则:每个Loop爸爸必须能向儿子解释"这段代码哪一行决定什么",且儿子能复述。解释不了?这个Loop不算完

👥 父子配合

父管"为什么"(概念层),子管"改参数会怎样"(实验层)——成就感对半。每个loop结束存一版能跑的代码+3句话说明,就是父子的学习账本。