Mic 模块
模块介绍
用于读取和处理来自麦克风传感器的数据。支持获取麦克风的当前声音强度值、声音强度百分比以及检测声音峰值。支持后台定时器更新和自动环境噪声校准功能。
硬件引脚说明
| 引脚名称 | 全称/含义 | 接线颜色 | 功能描述 |
|---|---|---|---|
| S | Signal/信号 | 黄色 | 数据传输引脚,用于读取麦克风模拟信号(需支持 ADC 功能) |
| V | Voltage/电源 | 红色 | 电源电压输入,为设备提供工作电压 |
| G | Ground/地线 | 黑色 | 接地引脚,完成电路回路 |
初始化参数
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| pin | Pin | 无 | 支持 ADC 功能的 machine.Pin实例(如 ESP32 的 GPIO32-39) |
| min_val | int | 0 | 映射范围最小值 |
| max_val | int | 100 | 映射范围最大值 |
| peak_threshold | float | 0.15 | 声音峰值检测阈值(相对于最大 ADC 值的比例) |
| adc_bits | int | 12 | ADC 位数(决定最大读数,12 位对应 0~4095) |
| sample_count | int | 50 | 采样数量(滑动窗口大小) |
| use_timer | bool | True | 是否启用后台定时器(True=后台更新,False=每次读取采样) |
| timer_id | int | 0 | 定时器 ID(建议 0~3) |
| freq | int | 50 | 定时更新频率(Hz) |
导入和实例创建
python
from machine import Pin # 导入Pin模块
from mic import Microphone # 导入Microphone驱动模块
# 初始化麦克风,连接到 GPIO34(需支持 ADC 功能)
mic = Microphone(pin=Pin(34), min_val=0, max_val=100, peak_threshold=0.15) # 创建Microphone实例核心属性方法
| 属性或方法 | 参数 | 返回类型 | 说明 |
|---|---|---|---|
| read() | 无 | int | 返回声音强度平均值(定时器模式返回缓存值,非定时器模式实时采样) |
| read_raw() | 无 | int | 返回未经处理的原始 ADC 值 |
| value | 无 | float | 当前麦克风的值(映射到 min_val ~ max_val) |
| value_int | 无 | int | 当前麦克风值的整数值 |
| percent | 无 | float | 当前麦克风值的百分比表示(0.0 ~ 100.0) |
| peak_detected() | 无 | bool | 是否检测到声音峰值 |
| calibrate() | duration=3 (int), quiet_environment=True (bool) | bool | 自动校准环境噪声基线 |
| reset_calibration() | 无 | None | 重置校准状态,恢复使用固定阈值 |
| is_calibrated | 无 | bool | 是否已进行校准 |
| noise_floor | 无 | float/None | 噪声基线值(仅在校准后有效) |
| noise_std_dev | 无 | float/None | 噪声标准差(仅在校准后有效) |
| deinit() | 无 | None | 释放资源:关闭定时器 |
使用示例
python
from machine import Pin
from mic import Microphone
from time import sleep_ms
# 初始化麦克风,连接到 GPIO34(需支持 ADC 功能)
mic = Microphone(pin=Pin(34), min_val=0, max_val=100, peak_threshold=0.15)
# 可选:进行环境噪声校准
mic.calibrate(duration=3, quiet_environment=True)
while True:
value = mic.value
percent = mic.percent
if mic.peak_detected():
print("检测到声音峰值!")
else:
print(f"当前麦克风值: {value:.2f}, 百分比: {percent:.2f}%")
sleep_ms(100) # 配合延时使用,防止程序过载注意事项
引脚要求
- 确保所使用的引脚支持 ADC 输入(如 ESP32 上的 GPIO32、GPIO34、GPIO35、GPIO36、GPIO39 等)
使用技巧
- 在 while True 循环中请配合延时函数使用,防止程序过载
- 建议在安静环境中进行校准,以获得更准确的峰值检测效果
技术细节
- 启用后台定时器时,read() 方法返回缓存值,性能更好;非定时器模式每次读取时实时采样
- calibrate() 方法为阻塞操作,校准期间会暂停定时器更新