Skip to content

Mic 模块

模块介绍

用于读取和处理来自麦克风传感器的数据。支持获取麦克风的当前声音强度值、声音强度百分比以及检测声音峰值。支持后台定时器更新和自动环境噪声校准功能。

硬件引脚说明

引脚名称全称/含义接线颜色功能描述
SSignal/信号黄色数据传输引脚,用于读取麦克风模拟信号(需支持 ADC 功能)
VVoltage/电源红色电源电压输入,为设备提供工作电压
GGround/地线黑色接地引脚,完成电路回路

初始化参数

参数类型默认值说明
pinPin支持 ADC 功能的 machine.Pin实例(如 ESP32 的 GPIO32-39)
min_valint0映射范围最小值
max_valint100映射范围最大值
peak_thresholdfloat0.15声音峰值检测阈值(相对于最大 ADC 值的比例)
adc_bitsint12ADC 位数(决定最大读数,12 位对应 0~4095)
sample_countint50采样数量(滑动窗口大小)
use_timerboolTrue是否启用后台定时器(True=后台更新,False=每次读取采样)
timer_idint0定时器 ID(建议 0~3)
freqint50定时更新频率(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 值
valuefloat当前麦克风的值(映射到 min_val ~ max_val)
value_intint当前麦克风值的整数值
percentfloat当前麦克风值的百分比表示(0.0 ~ 100.0)
peak_detected()bool是否检测到声音峰值
calibrate()duration=3 (int), quiet_environment=True (bool)bool自动校准环境噪声基线
reset_calibration()None重置校准状态,恢复使用固定阈值
is_calibratedbool是否已进行校准
noise_floorfloat/None噪声基线值(仅在校准后有效)
noise_std_devfloat/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() 方法为阻塞操作,校准期间会暂停定时器更新