1. 教程定位
本教程面向已学习少量 Python 基础、但尚不熟悉嵌入式硬件编程的学习者。课程以 MicroPython 为编程语言,以 ESP32-C3 SuperMini + 2WD 小车 为硬件平台,通过一辆可运行的小车,把 Python 程序设计与传感器、电机、GPIO 控制结合起来。
教程不采用「先系统讲完语法、再做项目」的方式,而是围绕智能小车的功能逐步展开:每一章都对应一个可以观察到的硬件现象或小车动作,让学习者在动手实验中理解程序结构、硬件接口和控制逻辑。
教程主线:
点亮 LED → 读取按钮 → 控制单电机 → 控制 2WD 小车 → 超声波避障 → 综合项目
其中,点亮 LED 用于建立 GPIO 输出概念;读取按钮 用于理解 GPIO 输入与程序状态;控制单电机 用于学习 H 桥驱动和 PWM;控制 2WD 小车 用于组合左右轮动作;超声波避障 用于把传感器数据转化为控制决策;最终通过综合项目整理成完整的小车程序。
本教程强调三个方面:
- 可见结果:每个阶段都能通过灯光、按钮、电机或小车动作看到程序运行结果。
- 逐步组合:先完成单个模块,再组合成完整小车。
- 代码整理:在项目后期将程序拆分为
config.py、button.py、status_led.py、motor_driver.py、car.py、ultrasonic.py、main.py等文件,形成清晰的项目结构。
2. 教程目标
完成本教程后,学生应能够:
- 使用 MicroPython 在 ESP32-C3 上运行程序。
- 理解 GPIO 输入、输出、PWM 的基本用法。
- 控制红绿 3mm LED 灯珠显示小车状态。
- 读取按钮输入,实现启动 / 停止控制。
- 控制 2WD 小车前进、后退、转向、停止。
- 使用 HC-SR04 超声波模块测距。
- 实现简单避障逻辑。
- 将代码拆分为多个模块,形成可维护的小车程序结构。
3. 硬件基础方案
本教程使用一套 2WD 智能小车硬件作为教学平台。硬件由 ESP32-C3 SuperMini 控制板、2WD 底盘套件、双 H 桥电机驱动模块、HC-SR04 超声波模块、运行按钮、红绿 3mm LED 灯珠 和 18650 供电模块 组成。
其中,2WD 底盘套件提供小车的机械结构和左右两个驱动电机;ESP32-C3 SuperMini 运行 MicroPython 程序;电机驱动模块负责把控制板输出的 GPIO 信号转换为电机动作;超声波模块用于检测前方距离;按钮用于启动或停止程序流程;红绿 LED 灯珠用于显示小车状态;电池与充放电模块为整车供电。
| 模块 | 用途 |
|---|---|
| ESP32-C3 SuperMini | 主控,运行 MicroPython 程序 |
| 2WD 底盘套件 | 底盘、两个 TT 电机、两个驱动轮、万向轮 |
| 双 H 桥电机驱动模块 | 控制左右两个直流电机 |
| HC-SR04 超声波模块 | 前方距离检测 |
| 运行按钮 | 启动 / 停止小车 |
| 红、绿 3mm LED 灯珠 | 状态指示 |
| 18650 + 5V 充放电一体小板 | 整车供电 |
4. 建议章节安排
第 1 章 MicroPython 与 ESP32 控制板
学习目标
- 认识 MicroPython 与普通 Python 的区别。
- 认识 ESP32-C3 SuperMini 开发板。
- 掌握变量、简单数据类型与
if / else条件判断。 - 使用 GPIO 输出控制红、绿 3mm LED 灯珠。
- 建立「程序可以控制硬件」的基本认识。
建议内容
- MicroPython 的用途。
- ESP32-C3 开发板接口说明。
- 固件、串口、REPL、
main.py的概念。 - 第一个程序:
print("Hello, PiCar")。 - 变量与数据类型。
if / else条件判断。machine.Pin的基本用法。- GPIO 输出高电平 / 低电平。
- 红灯、绿灯的独立控制。
- 闪烁程序。
实验
- 连接 ESP32-C3。
- 打开 REPL。
- 运行第一段 MicroPython 程序。
- 根据变量判断状态。
- 点亮绿色 LED。
- 点亮红色 LED。
- 红绿交替闪烁。
第 2 章 按键控制灯光
学习目标
- 掌握 GPIO 输入。
- 理解按钮按下 / 释放对应的电平变化。
- 实现简单启动 / 停止逻辑。
- 掌握
while循环、for循环与sleep延时控制。
建议内容
Pin.IN输入模式。- 上拉 / 下拉概念。
- 读取按钮状态。
- 简单按键消抖。
- 按一下启动,再按一下停止。
while循环持续读取按钮。for循环实现有限次数测试。time.sleep()延时与消抖等待。
实验
- 串口打印按钮状态。
- 按钮控制 LED。
- 按钮切换运行状态。
while循环持续检测按钮。- 使用
sleep控制读取间隔。
建议模块: button.py
第 3 章 电机控制
学习目标
- 理解 PWM 的占空比。
- 用 PWM 改变 LED 亮度。
- 理解 H 桥电机驱动的基本控制方式。
- 掌握函数定义与调用。
- 掌握
import与模块拆分。 - 控制单个 TT 电机正转、反转、停止。
- 使用 PWM 控制电机速度。
建议内容 — PWM 与函数基础
- PWM 的基本概念。
- MicroPython 中
machine.PWM的用法。 - 频率与占空比。
- LED 渐亮 / 渐暗。
- 函数定义与调用。
import与模块。- 用函数封装灯光控制。
建议内容 — 单电机控制
- 电机驱动模块接口。
- A1 / A2 控制电机 A。
- HIGH / LOW 组合与电机状态。
- 电机停止与刹车区别。
- 电机 PWM 控制方式。
- 单个电机速度函数。
实验
- LED 呼吸灯。
- 用变量控制亮度。
- 编写一个简单函数。
- 编写
status_led.py。 - 在主程序中
import status_led。 - 左轮正转、反转、停止;右轮重复相同实验。
- 单个电机不同速度测试。
建议模块: status_led.py、motor_driver.py
建议扩展函数: set_motor_speed(speed)
第 4 章 2WD 小车运动控制
学习目标
- 控制左右两个电机组合动作。
- 实现小车前进、后退、左转、右转、停止。
- 将电机控制封装为小车动作函数。
- 理解左右轮速度差与转向效果。
建议内容
- 左右轮运动组合。
- 小车基本动作。
- 使用函数封装动作。
- 固定时间运动。
- 简单动作序列。
- 固定速度行驶;慢速 / 中速 / 快速。
- 左右轮差速转向与速度函数。
实验
- 前进 2 秒后停止;后退 1 秒后停止。
- 左转、右转。
- 动作组合:前进 → 停止 → 转向 → 前进。
- 小车低速 / 高速前进;左右轮不同速度转弯。
建议模块: car.py
建议函数: forward()、backward()、turn_left()、turn_right()、stop()、set_speed(left_speed, right_speed)
第 5 章 超声波测距
学习目标
- 理解 HC-SR04 的 Trig / Echo 工作方式。
- 使用 MicroPython 读取距离。
- 处理测距异常。
建议内容
- HC-SR04 接线。
- 触发测距、Echo 脉宽测量、距离计算、连续测距。
实验
- 串口输出距离。
- 距离过近点亮红灯;距离安全点亮绿灯。
建议模块: ultrasonic.py
第 6 章 小车避障
学习目标
- 将电机控制与超声波测距组合。
- 根据距离判断小车是否继续前进。
- 实现停止、后退、转向等避障动作。
- 使用状态灯显示避障状态。
| 状态 | 含义 |
|---|---|
IDLE | 待机 |
RUNNING | 运行 |
OBSTACLE | 检测到障碍 |
STOPPED | 停止 |
建议内容
- 安全距离阈值。
- 距离安全时前进;距离过近时停止。
- 后退与转向。
- 状态变量与状态切换;状态灯显示运行状态。
- 主循环设计。
实验
- 前方距离安全时前进;过近时停止。
- 后退后转向;自动避障循环。
- 遇障碍切换
OBSTACLE;不同状态显示不同灯光。
第 7 章 综合项目:2WD 智能小车
学习目标
- 整合前 6 章的按钮、LED、电机、超声波与避障逻辑。
- 将代码整理为完整项目结构。
- 完成项目验收。
建议内容
- 按本文「项目代码组织建议」整理文件结构。
config.py管理引脚配置。status_led.py管理状态灯。button.py管理按键输入。motor_driver.py管理单电机与 H 桥控制。car.py管理 2WD 小车运动。ultrasonic.py管理超声波测距。main.py组织主程序流程。
验收功能
- 上电待机。
- 按钮启动 / 停止。
- 绿灯表示运行;红灯表示障碍或停止。
- 超声波检测前方障碍;自动避障。
- 串口输出关键运行信息。
- 异常或停止状态下电机停止。
5. 项目代码组织建议
建议从中期开始使用如下结构:
main.py # 主程序入口
config.py # GPIO 引脚配置
status_led.py # 红绿状态灯控制
button.py # 按钮输入与消抖
motor_driver.py # 单电机驱动封装
car.py # 2WD 小车动作封装
ultrasonic.py # 超声波测距
config.py 中建议为每个 GPIO 定义常量(如左右电机四线、超声波 Echo/Trig、红绿 LED、运行键等)。具体整型引脚号仅以配套专题页 第四节「GPIO 与接线」 为唯一依据,按该节表格与飞线图抄入即可;本提纲不重复列出数字,避免与专题页两处维护不一致。
# config.py —— 示例结构(数值请从专题页第四节抄入)
LEFT_MOTOR_A = ...
LEFT_MOTOR_B = ...
RIGHT_MOTOR_A = ...
RIGHT_MOTOR_B = ...
ULTRASONIC_ECHO = ...
ULTRASONIC_TRIG = ...
LED_GREEN = ...
LED_RED = ...
BUTTON_RUN = ...