条件树莓派4B

无源蜂鸣器3V: 3毛钱一个

杜邦线: 2根

语言: Python 3

接线

蜂鸣器正极: 作者使用的是GPIO 1 也就是第28个接口,

对于GPIO口没有要求,只要GPIO口都可以

蜂鸣器负极: 任意GND接口

无源蜂鸣器发出声音

想让无源蜂鸣器发出声音,其实就是持续输出PWM脉冲import time

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)

GPIO.setup(1, GPIO.OUT) # 设置GPIO 1为输出

pwm = GPIO.PWM(1, 4978) # 设置GPIO 1为PWM输出, 脉冲为4978Hz

pwm.start(0)

pwm.ChangeDutyCycle(50) # 持续发出脉冲电平

time.sleep(0.5) # 持续0.5s声音

pwm.stop()

GPIO.cleanup()上面GPIO.PWM(1, 4978)就是GPIO 1的输出脉冲设置为4978Hz,即1秒有4978个输出周期

pwm.ChangeDutyCycle(50) 不能为100,因为100等于没有振荡电流,设置为50即可

音符对照表

其实上例中4978对应的音符是D8#,其它音符可以查看下图的

音符定义 频率 音名 简谱

开始编写歌曲

所以,只要知道了简谱,对比上表,就可以调用不同的PWM脉冲来发出不同的声音。如果你要实现和弦,那就需要多个蜂鸣器

铁血丹心的简谱

三个文件txdx.py # 简谱

tone.py # 音符表

main.py

txdx.py# 铁血丹心的简谱

# 可以为2种格式

# [音符名(string), 持续时间(s)]

# [频率(int), 持续时间(s)]

txdx_sheet = [

# 1

['NOTE_A4', 1.5], # 6

['NOTE_G4', 0.5], # 5

['NOTE_A4', 1], # 6

['NOTE_G4', 0.5], # 5

['NOTE_E4', 0.5], # 3

# 2

['NOTE_G4', 1], # 5

['NOTE_D4', 3], # 2

# 3

['NOTE_C4', 1.5], # 1

['NOTE_A3', 0.5], # .6

['NOTE_D4', 0.5], # 2

['NOTE_E4', 0.5], # 3

['NOTE_G4', 0.5], # 5

['NOTE_F4', 0.5], # 4

# 4

['NOTE_E4', 3], # 3

['NOTE_E4', 0.5], # 3

['NOTE_G4', 0.5], # 5

# 5

['NOTE_A4', 1.5], # 6

['NOTE_G4', 0.5], # 5

['NOTE_A4', 1], # 6

['NOTE_G4', 0.5], # 5

['NOTE_E4', 0.5], # 5

# 6

['NOTE_G4', 1], # 5

['NOTE_D4', 3], # 2

# 7

['NOTE_C4', 1.5], # 1

['NOTE_A3', 0.5], # .6

['NOTE_D4', 0.5], # 2

['NOTE_E4', 0.5], # 3

['NOTE_G3', 0.5], # .5

['NOTE_B3', 0.5], # .7

# 8

['NOTE_A3', 4], # .6

[0, 1], # 0

['NOTE_E4', 0.5], # 3

['NOTE_D4', 0.5], # 2

['NOTE_C4', 1.5], # 1

['NOTE_B3', 0.5], # .7

#

['NOTE_A3', 1.5], # .6

['NOTE_E3', 0.5], # .3

['NOTE_A3', 2], # .6

# ['NOTE_A3', 1], # .6

['NOTE_A4', 0.5], # 6

['NOTE_G4', 0.5], # 5

['NOTE_E4', 1], # 3

['NOTE_G4', 0.5], # 5

['NOTE_D4', 0.5], # 2

['NOTE_E4', 3], # 3

['NOTE_E4', 0.5], # 3

['NOTE_D4', 0.5], # 2

['NOTE_C4', 1.5], # 1

['NOTE_B3', 0.5], # .7

['NOTE_A3', 1.5], # .6

['NOTE_E3', 0.5], # .6

['NOTE_A3', 2], # .6

[0, 1], # 0

['NOTE_D4', 0.5], # 2

['NOTE_C4', 0.5], # 1

['NOTE_A3', 1], # .6

['NOTE_C4', 0.5], # 1

['NOTE_D4', 0.5], # 1

['NOTE_E4', 3], # 3*/

['NOTE_E4', 1], # 3 逐草四方

['NOTE_A4', 1.5], # 6

['NOTE_G4', 0.5], # 5

['NOTE_A4', 1], # 6

['NOTE_G4', 0.5], # 5

['NOTE_E4', 0.5], # 3

['NOTE_G4', 1], # 5

['NOTE_D4', 3], # 2

['NOTE_C4', 1.5], # 1

['NOTE_A3', 0.5], # .6

['NOTE_D4', 0.5], # 2

['NOTE_E4', 0.5], # 3

['NOTE_G4', 0.5], # 5

['NOTE_FS4', 0.5], # #4

['NOTE_E4', 3], # 3

['NOTE_E4', 0.5], # 3

['NOTE_G4', 0.5], # 5

['NOTE_A4', 1.5], # 6

['NOTE_G4', 0.5], # 5

['NOTE_A4', 1.0], # 6

['NOTE_G4', 0.5], # 5

['NOTE_E4', 0.5], # 3

['NOTE_G4', 1.0], # 5

['NOTE_D4', 3], # 2

['NOTE_C4', 1.5], # 1

['NOTE_A3', 0.5], # .6

['NOTE_D4', 0.5], # 2

['NOTE_E4', 0.5], # 3

['NOTE_G3', 0.5], # .5

['NOTE_B3', 0.5], # .7

['NOTE_A3', 3], # .6

[0, 1], # 0

['NOTE_E4', 0.5], # 3 应知爱意似

['NOTE_D4', 0.5], # 2

['NOTE_C4', 1.0], # 1

['NOTE_C4', 0.5], # 1

['NOTE_B3', 0.5], # .7

['NOTE_A3', 1.5], # .6

['NOTE_E3', 0.5], # .3

['NOTE_A3', 2.0], # .6

[0, 1], # 0

['NOTE_A3', 0.5], # .6

['NOTE_G3', 0.5], # .5

['NOTE_E3', 1.0], # .3

['NOTE_G3', 0.5], # .5

['NOTE_D3', 0.5], # .2

['NOTE_E3', 3.0], # .3

[0, 1], # 0

['NOTE_E4', 0.5], # 3 身经百劫也

['NOTE_D4', 0.5], # 2

['NOTE_C4', 1.0], # 1

['NOTE_C4', 0.5], # 1

['NOTE_B3', 0.5], # .7

['NOTE_A3', 1.5], # .6

['NOTE_E4', 0.5], # 3

['NOTE_D4', 2.0], # 2

[0, 1], # 0

['NOTE_D4', 0.5], # 2

['NOTE_C4', 0.5], # 1

['NOTE_A3', 1.0], # .6

['NOTE_B3', 0.5], # .7

['NOTE_G3', 0.5], # .5

['NOTE_A3', 3.0], # .6

]

tone.py 文件TONE = {

'NOTE_B0' : 31,

'NOTE_C1' : 33,

'NOTE_CS1': 35,

'NOTE_D1' : 37,

'NOTE_DS1': 39,

'NOTE_E1' : 41,

'NOTE_F1' : 44,

'NOTE_FS1': 46,

'NOTE_G1' : 49,

'NOTE_GS1': 52,

'NOTE_A1' : 55,

'NOTE_AS1': 58,

'NOTE_B1' : 62,

'NOTE_C2' : 65,

'NOTE_CS2': 69,

'NOTE_D2' : 73,

'NOTE_DS2': 78,

'NOTE_E2' : 82,

'NOTE_F2' : 87,

'NOTE_FS2': 93,

'NOTE_G2' : 98,

'NOTE_GS2': 104,

'NOTE_A2' : 110,

'NOTE_AS2': 117,

'NOTE_B2' : 123,

'NOTE_C3' : 131,

'NOTE_CS3': 139,

'NOTE_D3' : 147,

'NOTE_DS3': 156,

'NOTE_E3' : 165,

'NOTE_F3' : 175,

'NOTE_FS3': 185,

'NOTE_G3' : 196,

'NOTE_GS3': 208,

'NOTE_A3' : 220,

'NOTE_AS3': 233,

'NOTE_B3' : 247,

'NOTE_C4' : 262,

'NOTE_CS4': 277,

'NOTE_D4' : 294,

'NOTE_DS4': 311,

'NOTE_E4' : 330,

'NOTE_F4' : 349,

'NOTE_FS4': 370,

'NOTE_G4' : 392,

'NOTE_GS4': 415,

'NOTE_A4' : 440,

'NOTE_AS4': 466,

'NOTE_B4' : 494,

'NOTE_C5' : 523,

'NOTE_CS5': 554,

'NOTE_D5' : 587,

'NOTE_DS5': 622,

'NOTE_E5' : 659,

'NOTE_F5' : 698,

'NOTE_FS5': 740,

'NOTE_G5' : 784,

'NOTE_GS5': 831,

'NOTE_A5' : 880,

'NOTE_AS5': 932,

'NOTE_B5' : 988,

'NOTE_C6' : 1047,

'NOTE_CS6': 1109,

'NOTE_D6' : 1175,

'NOTE_DS6': 1245,

'NOTE_E6' : 1319,

'NOTE_F6' : 1397,

'NOTE_FS6': 1480,

'NOTE_G6' : 1568,

'NOTE_GS6': 1661,

'NOTE_A6' : 1760,

'NOTE_AS6': 1865,

'NOTE_B6' : 1976,

'NOTE_C7' : 2093,

'NOTE_CS7': 2217,

'NOTE_D7' : 2349,

'NOTE_DS7': 2489,

'NOTE_E7' : 2637,

'NOTE_F7' : 2794,

'NOTE_FS7': 2960,

'NOTE_G7' : 3136,

'NOTE_GS7': 3322,

'NOTE_A7' : 3520,

'NOTE_AS7': 3729,

'NOTE_B7' : 3951,

'NOTE_C8' : 4186,

'NOTE_CS8': 4435,

'NOTE_D8' : 4699,

'NOTE_DS8': 4978,

}

main.pyimport time

import RPi.GPIO as GPIO

from tone import TONE

GPIO.setmode(GPIO.BCM)

GPIO.setwarnings(False)

def beep(channel: int, freq: int, duration: float, *, rising_tone: float = 1):

"""

播放一个音符

:param channel: GPIO的数字号,需要和上面的GPIO.setmode(GPIO.BCM)对应

:param freq: 频率

:param duration: 播放时长

:param rising_tone: 升降调 0.3 ~ 1.0 ~ 3.0

:return:

"""

if freq <= 0:

time.sleep(duration)

return

pwm = GPIO.PWM(channel, freq * rising_tone) # 输出该频率的电平

try:

pwm.start(0)

pwm.ChangeDutyCycle(50)

if duration > 0:

time.sleep(duration) # 播放时长

finally:

pwm.stop()

def play(channel: int, sheet: list):

"""

播放简谱

简谱可以为如下格式(参照上文的txdx.py):

- [音符名(string), 持续时间(s)]

- [频率(int), 持续时间(s)]

:param channel: GPIO的数字号,需要和上面的GPIO.setmode(GPIO.BCM)对应

:param sheet: 简谱

:return:

"""

GPIO.setup(channel, GPIO.OUT)

for m in sheet:

beep(channel, TONE[m[0]] if m[0] in TONE else int(m[0] or 0), m[1])

try:

from txdx import txdx_sheet

play(1, txdx_sheet)

finally:

GPIO.cleanup()

树莓派无源蜂鸣器c语言,[Python]使用树莓派+无源蜂鸣器播放铁血丹心相关推荐

  1. 树莓派无源蜂鸣器c语言,[Python]使用树莓派+无源蜂鸣器播放

    条件 树莓派4B 无源蜂鸣器3V: 3毛钱一个 杜邦线: 2根 语言: Python 3 接线 蜂鸣器正极: 做者使用的是GPIO 1 也就是第28个接口, 对于GPIO口没有要求,只要GPIO口均可 ...

  2. python和树莓派_用 Linux、Python 和树莓派酿制啤酒

    怎样在家用 Python 和树莓派搭建一个家用便携的自制酿啤酒装置? 大约十年前我开始酿制自制啤酒,和许多自己酿酒的人一样,我开始在厨房制造提纯啤酒.这需要一些设备并且做出来后确实是好的啤酒,最终,我 ...

  3. 树莓派无源蜂鸣器c语言,关于raspberry-pi:Python使用树莓派无源蜂鸣器播放铁血丹心...

    条件 树莓派4B 无源蜂鸣器3V: 3毛钱一个 杜邦线: 2根 语言: Python 3 接线 蜂鸣器正极: 作者应用的是GPIO 1 也就是第28个接口, 对于GPIO口没有要求,只有GPIO口都能 ...

  4. [树莓派]基于Python开发树莓派软件流程

    基于我个人习惯. 即使在树莓派上面,也习惯整一个可视化页面出来 环境说明 硬件 : 任意树莓派~我是 3B+ 和 4 OS : Raspberry Pi OS 开发语言 : Python 可视化UI开 ...

  5. 单片机学习:第一篇 基于Python的树莓派语音助手

    title: 单片机学习:第一篇 基于Python的树莓派语音助手 tags: 树莓派,python,语音助手,百度AIP 目录 一.pyaudio录音 二.语音识别 三.与图灵机器人对话 四.语音合 ...

  6. 使用python和树莓派实现远程监控

    前言 前段时间因为各种杂事缠身,一直没时间自己玩玩.今天元旦,打算给自己放个假,所以就寻思着玩玩手边吃了几个月灰的树莓派.花了些时间自己写了点代码,实现了在树莓派端启动服务器,并实时将从连接到树莓派的 ...

  7. 树莓派python实例_使用Python实现树莓派WiFi断线自动重连实例(附代码)

    实现 WiFi 断线自动重连,原理是用 Python 监测网络是否断线,如果断线则重启网络服务.接下来给大家分享实现代码,需要的朋友参考下 1.Python 代码 autowifi.py,放在 /ho ...

  8. csi python 摄像头 树莓派_树莓派之摄像头和人脸识别

    安装好Python与树莓派外置硬件GPIO库文件 sudo apt-get install python-rpi.gpio 在python中使用GPIO示例: import RPi.GPIO as G ...

  9. arduino i2c 如何写16位寄存器_树莓派3B开发Go语言(二)寄存器版本GPIO

    作者:爪爪熊 链接:https://www.jianshu.com/p/0495c0554a63 來源:简书 之前将go语言的运行环境给搭建起来了,但是没有开始真正的试试Go 语言操作树莓派硬件的效果 ...

最新文章

  1. Windows 7 部署 Android 开发环境傻瓜式教程(Eclipse+ADT)
  2. OpenCV神经网络ANN代码编译运行与解读(一)
  3. 1977标准_超过8分,就是痛风!附痛风诊断新标准和治疗原则
  4. java消息分发_Kafka教程设计思想之消息分发策略
  5. MYSQL数据库学习十七 日志管理
  6. Linux fwrite 什么时候刷新,linux的fwrite()使用方法,当前时间写入文本的程序
  7. ASP.NET操作DataTable各种方法总结(给Datatable添加行列、DataTable选择排序等)
  8. 做好这5点基本要求 才能算一个合格的HTML5动画
  9. 图像从程序到GPU再到LCD显示的流程:GPU渲染管线(五)
  10. 分享,用sql快速创建MODEL,快速提高工作效率哦
  11. 用python根据最新的汇率,假设你要出国留学要换外币,输入一定数量的人民币,比如1000元人民币, 按照中国银行的现钞卖出价,输出可换到对应的加元和澳元分别是多少。
  12. 程序员网站有哪些?(欢迎补充)
  13. 阿里云安全组 设置数据库仅自己电脑IP可登陆
  14. 集合--List集合练习--集合的嵌套、Random类获取随机数
  15. DLS 深度受限搜索 狼羊 过河 问题 python 实现
  16. XiunoBBS插件大全,可视化XiunoBBS插件
  17. 什么时候用到GDT?为什么要用GDT
  18. 家谱二叉树c语言程序,家谱图-二叉树
  19. 零基础通过Ajax实现网易云音乐数据交互(4)
  20. python关于函数作用的描述_Python函数的概念和使用

热门文章

  1. hp rx8640_使用rx-java的异步抽象
  2. 如何取消 Ms office2019提示 “获取正版office,你可能是盗版软件的受害者”
  3. 独一无二 Shell 编程之正则表达式 与文本处理器 详细解释
  4. 软硬一体的流媒体边缘计算设备在视频“云、边、端”解决方案中的重要作用
  5. python键盘记录255是哪个按键_Keylogger: Python写的键盘敲击记录器
  6. MATLAB实现卡尔曼滤波器仿真
  7. 30天自制操作系统:第十天 叠加处理
  8. 简单使用taglib 自定义标签
  9. 如何在双系统下删除linux系统
  10. dllimport和dllexport作用与区别