前面我们学了光敏传感器(感光)、温度传感器(感温)、倾斜传感器(感姿态)——今天再给ESP32加上一项新感官:听觉

智能语音助手、声控灯、噪声检测仪、拍手开关……这些设备的背后,都是声音传感器在工作。

今天这节课,我们就用声音传感器,让ESP32能“听”到声音!

第一步:找到课程,看看成品效果

打开逗脑IDE,点击顶部 “文档”,在 “课程” → “ESP32 + MicroPython” 分类下,找到声音传感器

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

第二步:什么是声音传感器?

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

在这里插入图片描述

这个模块提供了两路信号输出,可以满足不同场景的需求:

引脚信号类型输出值说明
AO模拟输出0~4095环境声音越大,数值越大(数值越大=声音越大
DO数字输出0 或 1声音超过阈值时输出1(可通过电位器调节灵敏度)

第三步:动手接线

声音传感器模块有4个引脚:

传感器引脚连接ESP32说明
VCC3.3V电源正极
GNDGND电源地
AOGPIO33模拟输出(接ADC引脚)
DOGPIO15数字输出(接中断引脚)

在这里插入图片描述

第四步:中断+代码——既要“听”还要“随时响应”

本节课的代码同时使用了两种读取方式:

  1. 轮询方式:在while循环中不断读取AO模拟值
  2. 中断方式:DO引脚触发中断,声音超过阈值时立刻响应
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 数字量,怎么选?

模拟量(AO)数字量(DO)
输出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,准备好相关配件,跟着课件走一遍。

有任何问题或建议,欢迎在评论区留言告诉我们。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐