蜂鸣器是一种把电信号变成声音的器件。
Pin.OUT);无源用 PWM + freq()[接线图占位,后续添加]
文字说明(具体接法见下方代码注释):
VCC → Pico 3V3(或 5V,看模块标注)、GND → GND、I/O(信号) → GPIO(如 GP15)# ============ 接线 ============
# 有源蜂鸣器模块: VCC → Pico 3V3(或 5V,看模块标注)
# GND → Pico GND
# I/O(信号) → Pico GP15
# 注意:有源蜂鸣器内部有振荡电路,给高电平就一直响,只能响/不响,不能变调
# 如果用的是裸蜂鸣器(非模块),电流可能不够,要加三极管驱动
# =============================
from machine import Pin
import time
buzzer = Pin(15, Pin.OUT)
print('有源蜂鸣器测试')
while True:
buzzer.on() # 响
time.sleep(0.5)
buzzer.off() # 不响
time.sleep(1)
# ============ 接线 ============
# 无源蜂鸣器模块: VCC → Pico 3V3(或 5V)
# GND → Pico GND
# I/O(信号) → Pico GP15
# 注意:无源蜂鸣器内部没有振荡电路,必须用 PWM 给一定频率的方波才会响,
# 改变频率就能变调;用 Pin.OUT 直接驱动它是不会响的
# =============================
from machine import Pin, PWM
import time
pwm = PWM(Pin(15))
# 不同音调的频率(Hz)
tones = {
'C4': 262, 'D4': 294, 'E4': 330, 'F4': 349,
'G4': 392, 'A4': 440, 'B4': 494, 'C5': 523,
}
def play_tone(frequency, duration):
pwm.freq(frequency) # 设置音调
pwm.duty_u16(32768) # 50% 占空比,声音最清晰
time.sleep(duration)
pwm.duty_u16(0) # 停止发声
time.sleep(0.1) # 音与音之间留间隔
print('无源蜂鸣器 - 音阶')
for name in ['C4', 'D4', 'E4', 'F4', 'G4', 'A4', 'B4', 'C5']:
play_tone(tones[name], 0.3)
print('播放旋律')
melody = [
('C4', 0.2), ('D4', 0.2), ('E4', 0.2), ('F4', 0.2),
('G4', 0.2), ('A4', 0.2), ('B4', 0.2), ('C5', 0.2),
]
for tone, duration in melody:
play_tone(tones[tone], duration)
pwm.deinit()
# ============ 接线 ============
# 无源蜂鸣器模块: VCC → Pico 3V3(或 5V)
# GND → Pico GND
# I/O(信号) → Pico GP15
# 注意:无源蜂鸣器必须用 PWM 给方波,Pin.OUT 直接驱动不会响
# =============================
from machine import Pin, PWM
import time
pwm = PWM(Pin(15))
def alarm():
pwm.freq(1000); pwm.duty_u16(32768); time.sleep(0.5) # 高音
pwm.freq(500); time.sleep(0.5) # 低音
pwm.duty_u16(0)
print('报警声')
for _ in range(3):
alarm()
time.sleep(0.5)
pwm.deinit()
freq() 变调);用 Pin.OUT 直接驱动不会响。duty_u16 占空比约 32768(50%)声音最稳,太大反而可能破音。Q: 蜂鸣器完全不响? A: 先判断有源/无源。有源:检查 I/O 给的是不是高电平、VCC/GND 接好没。无源:必须用 PWM 给方波,Pin.OUT 直接驱动不会响。
Q: 有源蜂鸣器响了但不能变调? A: 正常。有源内部有固定振荡电路,只能响/不响,想变调要换无源蜂鸣器。
Q: 无源蜂鸣器声音很小或发沙? A: 占空比调到 32768(50%)试试;确认频率在 200~3000Hz 范围,太低/太高都不好听。