这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 【Let'sdo第3期-拾色播放器DIY】过程贴2-蜂鸣器驱动实现

共1条 1/1 1 跳转至

【Let'sdo第3期-拾色播放器DIY】过程贴2-蜂鸣器驱动实现

助工
2025-12-14 18:04:28     打赏
# 蜂鸣器驱动实现
## 硬件连接蜂鸣器连接到开发板的任意GPIO引脚:
**引脚接入方式:**- 蜂鸣器正极(+)连接到开发板的GPIO引脚(如D5)- 蜂鸣器负极(-)连接到开发板的GND引脚- 建议使用PWM引脚以支持可变频率控制
**连接注意事项:**- 蜂鸣器工作电压通常为3.3V-5V,确保开发板GPIO输出电平匹配- 如需驱动较大功率蜂鸣器,建议使用三极管或MOSFET进行电流放大- 对于有源蜂鸣器,直接连接即可发声;对于无源蜂鸣器,需要PWM信号控制频率
## 代码
import time
import board
import pwmio
# 蜂鸣器引脚
BUZZER_PIN = board.D5
# 初始化蜂鸣器(支持可变频率)
buzzer = pwmio.PWMOut(BUZZER_PIN, duty_cycle=0, frequency=440, variable_frequency=True)
def beep(duration=0.5, frequency=1000):
    """发出蜂鸣声"""
    buzzer.frequency = frequency
    buzzer.duty_cycle = 32768  # 50%占空比
    time.sleep(duration)
    buzzer.duty_cycle = 0  # 停止
def play_note(note_index, duration=0.5):
    """播放指定音符"""
    # 8 音阶频率(C4, D4, E4, F4, G4, A4, B4, C5)
    note_names = ['C4', 'D4', 'E4', 'F4', 'G4', 'A4', 'B4', 'C5']
    frequencies = [261, 293, 329, 349, 392, 440, 493, 523]
    
    if 0 <= note_index < len(frequencies):
        buzzer.frequency = frequencies[note_index]
        buzzer.duty_cycle = 32768
        time.sleep(duration)
        buzzer.duty_cycle = 0
        print(f"播放音符: {note_names[note_index]} ({frequencies[note_index]}Hz)")
    else:
        print("无效的音符索引")
def stop_playing():
    """停止播放"""
    buzzer.duty_cycle = 0
# 测试代码
beep()  # 发出0.5秒蜂鸣声
# 播放C4音符
play_note(0)  # 播放C4音符

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]