前面我们学了光敏传感器(感光)、温度传感器(感温)、倾斜传感器(感姿态)——今天再给ESP32加上一项新感官:听觉。
智能语音助手、声控灯、噪声检测仪、拍手开关……这些设备的背后,都是声音传感器在工作。
今天这节课,我们就用声音传感器,让ESP32能“听”到声音!
第一步:找到课程,看看成品效果
打开逗脑IDE,点击顶部 “文档”,在 “课程” → “ESP32 + MicroPython” 分类下,找到声音传感器。

打开课件,你会看到本节课的最终效果:打一个响指,终端立刻打印“有声音…”;安静时则只显示环境声音数值。


第二步:什么是声音传感器?
本节课使用的是声音传感器模块,它包含一个驻极体麦克风和一个比较器电路。

这个模块提供了两路信号输出,可以满足不同场景的需求:
| AO | 模拟输出 | 0~4095 | 环境声音越大,数值越大(数值越大=声音越大) |
| DO | 数字输出 | 0 或 1 | 声音超过阈值时输出1(可通过电位器调节灵敏度) |
第三步:动手接线
声音传感器模块有4个引脚:
| VCC | 3.3V | 电源正极 |
| GND | GND | 电源地 |
| AO | GPIO33 | 模拟输出(接ADC引脚) |
| DO | GPIO15 | 数字输出(接中断引脚) |

第四步:中断+代码——既要“听”还要“随时响应”
本节课的代码同时使用了两种读取方式:
from machine import Pin, ADC
import time
# 模拟量(AO):ADC读取声音强度
sound_analog = ADC(Pin(33))
sound_analog.atten(ADC.ATTN_11DB) # 量程3.3V
# 中断回调函数
def sound_func(*argc):
print("有声音…") # 一检测到声音就打印
# 数字量(DO):配置中断
p15 = Pin(15, Pin.IN)
p15.irq(trigger=Pin.IRQ_RISING, handler=sound_func)
# 主循环
while True:
sound_value = sound_analog.read() # 0~4095,数值越大声音越大
print(sound_value)
time.sleep(0.1)
第五步:保存运行,打响指测试!
按 Ctrl + S 保存,选择ESP32开发板设备,给文件命名(比如sound.py),点击保存。

点击运行按钮,终端开始不断打印声音数值。
试试看:
- 安静时:数值较小(如200~500),终端只打印数值
- 打一个响指:数值瞬间增大,同时终端弹出 “有声音…” !
- 拍手、说话、敲桌子:同样会触发响应
声音传感器能做什么?
| 声控灯 | 拍手开关灯 |
| 噪声检测仪 | 实时监测环境音量 |
| 智能语音触发 | 检测到声音启动语音助手 |
| 婴儿哭声检测 | 检测哭声自动播放安抚音乐 |
| 敲门感应器 | 检测敲门声触发灯光/提醒 |
| 互动装置 | 声音控制LED灯光秀 |
模拟量 VS 数字量,怎么选?
| 输出 | 0~4095连续数值 | 0或1(超过阈值触发) |
| 特点 | 能知道“声音有多大” | 只知道“有没有声音” |
| 用途 | 音量显示、声谱分析 | 拍手开关、触发事件 |
| 代码 | adc.read()轮询 | 中断触发,响应快 |
本节课两种都用了:主循环打印模拟量,中断响应数字量——既能看到数值变化,又能快速响应声音事件。
全程回顾
| 找到课程 | 文档→课程→ESP32+MicroPython→声音传感器 | 了解声音传感器 |
| 认识原理 | 麦克风采集声音→模块输出AO/DO信号 | 理解两种输出方式 |
| 动手接线 | VCC→3.3V, GND→GND, AO→GPIO33, DO→GPIO15 | 硬件就位 |
| 打开代码 | 点击“打开”按钮 | 代码进入编辑器 |
| 保存运行 | Ctrl+S → 选择ESP32 → 运行 | 开始监听声音 |
| 打响指 | 打一个响指或拍手 | 终端打印“有声音…”! |
如果你对本节课感兴趣,去官网(www.dounao.cn)下载逗脑IDE,准备好相关配件,跟着课件走一遍。
有任何问题或建议,欢迎在评论区留言告诉我们。




