Administrator
发布于 2025-09-12 / 0 阅读
0

树莓派pico助手

树莓派Pico助手

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

b站参考视频:https://www.bilibili.com/video/BV1ay4y1a741/?spm_id_from=333.337.search-card.all.click&vd_source=336284e77d7c606085e7775a7ebb1532

连线:

PICO ESP826601
GPIO0 RX
GPIO1 TX
3V3 3v3
3v3 EN
GND GND