通过 Web 页面控制 Raspberry Pi Pico 上的蜂鸣器。
浏览器 → WebSocket → FastAPI → pyserial → USB 串口 → Pico (MicroPython) → PWM → 蜂鸣器
firmware/— Pico 端 MicroPython 代码(main.py解析串口命令,buzzer.py封装 PWM)server/— FastAPI 桥接服务(serial_bridge.py按 VID/PID 自动找端口并断线重连)web/— 前端静态页面(由 FastAPI 托管)
6 路蜂鸣器(无源可控音调),一端接对应 GPIO,另一端接 GND:
| 通道 | CH0 | CH1 | CH2 | CH3 | CH4 | CH5 |
|---|---|---|---|---|---|---|
| 引脚 | GP16 | GP17 | GP18 | GP19 | GP20 | GP21 |
发声用 PIO(每路一个状态机)而不是 PWM——RP2040 的 PWM 相邻引脚对(16+17、18+19、20+21)共享 slice 频率,无法同时发不同音高;PIO 每路频率独立。
增删通道改 firmware/main.py 的 PINS 列表和 web/app.js 的 CHANNELS(最多 8 路,受 PIO 状态机数量限制)。
TONE <ch> <freq> [ms] # 通道 ch 播放 freq Hz;ms 省略或 0 表示持续到 STOP
PLAY <ch>:<freq>:<ms> ... # 多通道同时起音,每路独立频率和时长
CHORD <ms> <ch>:<freq> ... # 多通道同时起音,共用时长
STOP [ch] # 停指定通道;无参数停全部
PING # 心跳,回 PONG
INFO # 回 CHANNELS <引脚列表>
频率范围 40–20000 Hz(下限来自 PIO 时钟分频器)。
回复:OK / DONE <ch>(该通道定时结束)/ PONG / ERR <原因>
# 首次:安装依赖
python3 -m venv server/.venv
server/.venv/bin/pip install -r server/requirements.txt
# 更新固件到 Pico(改了 firmware/ 之后)
python3 -m mpremote cp firmware/buzzer.py :buzzer.py + cp firmware/main.py :main.py + reset
# 启动服务器
cd server && .venv/bin/uvicorn main:app --port 8000注意:串口是独占的——mpremote/screen 连着时服务器打不开串口,反之亦然。