树莓派zero PWM播放音乐

硬件:树莓派zero+无源蜂鸣器

将树莓派的GPIO管脚接到蜂鸣器的控制脚,利用PWM震荡频率来播放不同频率的音乐

直接看代码,所有的内容都在代码里了,比较简单。

import time
import RPi.GPIO as GPIO

#速度设置为5左右
speed = 5

GPIO.setmode(GPIO.BOARD)
# 设置11口为IO输出,然后通过PWM控制无缘蜂鸣器发声
GPIO.setup(11, GPIO.OUT)
  
# 定义音调频率
# 低音的以键盘的数字键下面对应的字母表示,高音以数字键上面的字符表示
# 例如,q在1下面,表示低音的1(do);!在1键上,表示高音的1(do),以此类推.
tones = {
            'q':131, 'w':147, 'e':165, 'r':175, 't':196, 'y':211, 'u':248,
            '1': 262, '2': 294, '3': 330, '4': 349, '5': 392, '6': 440, '7': 494, 
            '!':525, '@':589, '#':661, '$':700, '%':786, '^':882, '^':990,
            '-': 0
        }
# 定义小星星旋律,这里没有低音和高音
melody = "1155665-4433221-5544332-5544332-1155665-4433221"

# 设置11口输出频率0.1hz,不能设置为0,会出错
beeper = GPIO.PWM(11, 0.1)
# 占空比为50%
beeper.start(50)

for tone in melody:
    freq = tones[tone]
    if freq:
        #调整PWM的频率,使其发出指定的音调
        beeper.ChangeDutyCycle(50) 
        beeper.ChangeFrequency(freq)
    else:
        #调整占空比为0,相当于不发音,不能设置频率为0 ,会报错
        beeper.ChangeDutyCycle(0)
    
    # 每个音符的时长
    time.sleep(0.05*speed)

    # 每个音符之间的停顿
    beeper.ChangeDutyCycle(0) 
    time.sleep(0.025*speed)

beeper.stop()
GPIO.cleanup()

最后来一段听听

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值