零基础学ESP32:超声波测距——让ESP32拥有“空间感知”能力!
·
前面我们学了人体感应、光敏、声音、震动等各种传感器,但它们只能感知"有没有"。今天要学一个更厉害的传感器——超声波测距模块,它能精确测量前方物体有多远!
倒车雷达、机器人避障、液位检测、自动门感应……这些应用的背后,都是超声波测距模块在工作。
今天这节课,我们就用HC-SR04超声波模块,让ESP32能精确测量距离!
第一步:找到课程,看看成品效果
打开逗脑IDE,点击顶部 “文档",在 “课程” → “ESP32 + MicroPython” 分类下,找到超声波测量距离。

打开课件,你会看到本节课的最终效果:把手放在超声波模块前方,终端实时打印出精确的距离数值(如"当前测量距离为:25.36 cm"),手靠近数值变小,手远离数值变大。


第二步:认识超声波模块
HC-SR04是最常用的超声波测距模块,它有两个"眼睛"一样的东西:

两个"眼睛"的作用:
| 部件 | 作用 |
|---|---|
| 发射端(T) | 发出超声波(人耳听不到的高频声波) |
| 接收端(R) | 接收遇到物体后反射回来的超声波 |
四个引脚:
| 引脚 | 连接ESP32 | 说明 |
|---|---|---|
| VCC | 5V | 电源正极(必须5V,3.3V不稳定) |
| GND | GND | 电源地 |
| TRIG | GPIO15 | 触发信号(输出) |
| ECHO | GPIO2 | 回响信号(输入) |
第三步:超声波测距的原理
超声波测距的原理其实很简单——就像对着山谷喊一声,听回声要多久。


具体流程:
- ESP32给TRIG引脚一个10微秒的高电平脉冲(相当于"喊一声")
- 模块发出超声波
- 超声波遇到前方的物体,反射回来
- 模块接收到回波,ECHO引脚从高电平变为低电平
- ESP32记录ECHO高电平持续的时间(就是超声波来回的时间)
- 用公式计算距离:
距离 = 声速 × 时间 ÷ 2
- 声速:340米/秒(空气中)
- 时间:ECHO高电平持续时间
- ÷2:因为超声波是来回的,算出来的是往返距离
举例:
- 如果ECHO高电平持续了12848微秒
- 距离 = 340m/s × (12848 / 1000000)s ÷ 2 = 2.18米 = 218厘米
第四步:动手接线
| 超声波模块引脚 | 连接ESP32 | 说明 |
|---|---|---|
| VCC | 5V | 电源正极 |
| GND | GND | 电源地 |
| TRIG | GPIO15 | 触发信号输出 |
| ECHO | GPIO2 | 回响信号输入 |

📌 重要提示: VCC一定要接5V!3.3V下超声波模块工作不稳定,测距会不准确。
第五步:代码——发脉冲,测时间,算距离
from machine import Pin
import time
# 引脚设定
trig = Pin(15, Pin.OUT) # 触发引脚
echo = Pin(2, Pin.IN) # 回响引脚
def measure():
# 1. 发送触发信号(10微秒高电平)
trig.value(1)
time.sleep_us(10)
trig.value(0)
# 2. 等待ECHO变为高电平,记录起始时间
while echo.value() == 0:
t1 = time.ticks_us()
# 3. 等待ECHO变为低电平,记录结束时间
while echo.value() == 1:
t2 = time.ticks_us()
# 4. 计算时间差(单位:厘米)
t3 = time.ticks_diff(t2, t1) / 10000
# 5. 距离 = 声速 × 时间 ÷ 2
return t3 * 340 / 2
# 主循环
try:
while True:
print("当前测量距离为:%0.2f cm" % measure())
time.sleep(1)
except KeyboardInterrupt:
pass
代码逻辑:
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | TRIG输出10μs高电平 | “喊一声” |
| 2 | 等待ECHO变高,记录t1 | 开始计时 |
| 3 | 等待ECHO变低,记录t2 | 停止计时 |
| 4 | t2 - t1 | 超声波往返时间 |
| 5 | 时间 × 340 ÷ 2 | 计算距离(厘米) |
第六步:保存运行,测一测距离!
保存测试代码,选择ESP32设备,文件名ultrasonic.py

点击运行按钮,终端开始不断打印距离:

试试看:
- 手放在模块前方10cm → 终端显示约10cm
- 手慢慢往后移动 → 数值逐渐增大
- 手慢慢靠近 → 数值逐渐减小
- 模块对着墙壁 → 能测出房间宽度
超声波测距能做什么?
| 应用场景 | 用途 |
|---|---|
| 倒车雷达 | 检测车后方障碍物距离 |
| 机器人避障 | 检测前方障碍物,自动转向 |
| 液位检测 | 测量水箱、油箱的液位高度 |
| 自动门 | 人靠近时自动开门 |
| 智能垃圾桶 | 手靠近自动开盖 |
| 身高测量仪 | 测量身高 |
| 停车位引导 | 检测车位是否有车 |
测距范围和精度
| 参数 | 指标 |
|---|---|
| 测量范围 | 2cm ~ 400cm |
| 测量精度 | ±0.3cm |
| 测量角度 | 15° |
| 工作电压 | 5V |
| 工作电流 | 15mA |
📌 注意事项:
- 测量角度较窄(15°),前方物体最好正对模块
- 太近(<2cm)或太远(>4m)时,测量可能不准确
- 软质物体(如海绵、衣物)会吸收超声波,测量效果差
与其他测距传感器对比
| 超声波 | 红外测距 | 激光测距 | |
|---|---|---|---|
| 测量范围 | 2~400cm | 10~80cm | 更远 |
| 精度 | ±0.3cm | ±几cm | 高 |
| 受光线影响 | ❌ 不受影响 | ✅ 受强光影响 | ✅ 受影响 |
| 价格 | 便宜 | 便宜 | 较贵 |
| 适合场景 | 通用避障 | 短距离检测 | 高精度测距 |
全程回顾
| 步骤 | 操作 | 效果 |
|---|---|---|
| 找到课程 | 文档→课程→ESP32+MicroPython→超声波测量距离 | 了解超声波测距 |
| 认识原理 | 发出→反射→接收,计算时间 | 理解"回声测距"原理 |
| 动手接线 | VCC→5V, GND→GND, TRIG→GPIO15, ECHO→GPIO2 | 硬件就位 |
| 打开代码 | 点击“打开”按钮 | 代码进入编辑器 |
| 保存运行 | Ctrl+S → 选择ESP32 → 运行 | 开始测距 |
| 测试距离 | 手放在模块前方,前后移动 | 终端实时显示距离! |

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)