1. MAX9814 (自动增益麦克风放大器模块)
假设用 GP26 (ADC0) 来采样:
- MAX9814 VCC → Pico 3.3V
- MAX9814 GND → Pico GND
- MAX9814 OUT → Pico GP26 (ADC0)
⚠️ 注意:MAX9814 输出电平随供电电压变化。如果你给 MAX9814 接 5V,输出信号可能接近 5V 峰值,这会烧坏 Pico(Pico ADC 最大只能承受 3.3V)。所以建议 直接用 3.3V 给 MAX9814 供电。
from machine import ADC, Pin
import ustruct
import time
mic = ADC(Pin(26)) # GP26 = ADC0
# 配置
SAMPLE_RATE = 8000 # 采样率 (Hz) 8k, 可以改成 16000
DURATION = 5 # 录音时长 (秒)
NUM_SAMPLES = SAMPLE_RATE * DURATION
# 创建 wav 文件
wav = open("record.wav", "wb")
# 写 WAV 头(PCM 16bit, Mono)
def write_wav_header(f, sample_rate, num_samples):
datasize = num_samples * 2
f.write(b'RIFF')
f.write(ustruct.pack('<I', datasize + 36))
f.write(b'WAVEfmt ')
f.write(ustruct.pack('<IHHIIHH', 16, 1, 1, sample_rate, sample_rate*2, 2, 16))
f.write(b'data')
f.write(ustruct.pack('<I', datasize))
write_wav_header(wav, SAMPLE_RATE, NUM_SAMPLES)
print("Recording...")
start = time.ticks_ms()
for i in range(NUM_SAMPLES):
value = mic.read_u16() >> 4 # 12bit
wav.write(ustruct.pack('<h', value - 2048)) # 转换为有符号16位
while time.ticks_diff(time.ticks_ms(), start) < (i * 1000) // SAMPLE_RATE:
pass
wav.close()
print("Done. Saved as record.wav")
如果要更高质量(比如 16kHz),把 SAMPLE_RATE
改成 16000
2. ssd1306 (oled显示屏)
连接方式:
树莓派Pico引脚4 | oled SDA | |
---|---|---|
树莓派Pico引脚5 | oled SCL |
排针版 + | oled VCC | |
---|---|---|
排针版 - | oled GND |
3. esp01 wifi模块
调用该模块的包:https://github.com/maysrp/wifiat_pico/tree/main?tab=readme-ov-file
连线:
PICO | ESP826601 |
---|---|
GPIO0 | RX |
GPIO1 | TX |
3V3 | 3v3 |
3v3 | EN |
GND | GND |