树莓派无源蜂鸣器c语言,[Python]使用树莓派+无源蜂鸣器播放
条件
树莓派4B
无源蜂鸣器3V: 3毛钱一个
杜邦线: 2根
语言: Python 3
接线
蜂鸣器正极: 做者使用的是GPIO 1 也就是第28个接口,
对于GPIO口没有要求,只要GPIO口均可以html
蜂鸣器负极: 任意GND接口git
无源蜂鸣器发出声音
想让无源蜂鸣器发出声音,其实就是持续输出PWM脉冲github
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#,其它音符能够查看下图的spa
音符定义 频率 音名 简谱
code
开始编写歌曲
因此,只要知道了简谱,对比上表,就能够调用不一样的PWM脉冲来发出不一样的声音。htm
若是你要实现和弦,那就须要多个蜂鸣器
铁血丹心的简谱
三个文件
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.py
import 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]使用树莓派+无源蜂鸣器播放相关推荐
- 树莓派无源蜂鸣器c语言,[Python]使用树莓派+无源蜂鸣器播放铁血丹心
条件树莓派4B 无源蜂鸣器3V: 3毛钱一个 杜邦线: 2根 语言: Python 3 接线 蜂鸣器正极: 作者使用的是GPIO 1 也就是第28个接口, 对于GPIO口没有要求,只要GPIO口都可以 ...
- python和树莓派_用 Linux、Python 和树莓派酿制啤酒
怎样在家用 Python 和树莓派搭建一个家用便携的自制酿啤酒装置? 大约十年前我开始酿制自制啤酒,和许多自己酿酒的人一样,我开始在厨房制造提纯啤酒.这需要一些设备并且做出来后确实是好的啤酒,最终,我 ...
- 树莓派无源蜂鸣器c语言,关于raspberry-pi:Python使用树莓派无源蜂鸣器播放铁血丹心...
条件 树莓派4B 无源蜂鸣器3V: 3毛钱一个 杜邦线: 2根 语言: Python 3 接线 蜂鸣器正极: 作者应用的是GPIO 1 也就是第28个接口, 对于GPIO口没有要求,只有GPIO口都能 ...
- [树莓派]基于Python开发树莓派软件流程
基于我个人习惯. 即使在树莓派上面,也习惯整一个可视化页面出来 环境说明 硬件 : 任意树莓派~我是 3B+ 和 4 OS : Raspberry Pi OS 开发语言 : Python 可视化UI开 ...
- 单片机学习:第一篇 基于Python的树莓派语音助手
title: 单片机学习:第一篇 基于Python的树莓派语音助手 tags: 树莓派,python,语音助手,百度AIP 目录 一.pyaudio录音 二.语音识别 三.与图灵机器人对话 四.语音合 ...
- 使用python和树莓派实现远程监控
前言 前段时间因为各种杂事缠身,一直没时间自己玩玩.今天元旦,打算给自己放个假,所以就寻思着玩玩手边吃了几个月灰的树莓派.花了些时间自己写了点代码,实现了在树莓派端启动服务器,并实时将从连接到树莓派的 ...
- 树莓派python实例_使用Python实现树莓派WiFi断线自动重连实例(附代码)
实现 WiFi 断线自动重连,原理是用 Python 监测网络是否断线,如果断线则重启网络服务.接下来给大家分享实现代码,需要的朋友参考下 1.Python 代码 autowifi.py,放在 /ho ...
- csi python 摄像头 树莓派_树莓派之摄像头和人脸识别
安装好Python与树莓派外置硬件GPIO库文件 sudo apt-get install python-rpi.gpio 在python中使用GPIO示例: import RPi.GPIO as G ...
- arduino i2c 如何写16位寄存器_树莓派3B开发Go语言(二)寄存器版本GPIO
作者:爪爪熊 链接:https://www.jianshu.com/p/0495c0554a63 來源:简书 之前将go语言的运行环境给搭建起来了,但是没有开始真正的试试Go 语言操作树莓派硬件的效果 ...
最新文章
- 三维重建【一】——————(深度学习方式)
- 套用match_再也不用伤脑筋了,分享九个可以直接套用的Excel常用公式,收藏备用...
- rdbms mysql_RDBMS-mysql初步
- Linux中的一个命令行计算器bc简介
- 购物车数据结构及本地存储技术
- 程序人生:给所有程序员的27个建议,抽空看看吧!
- HDU4812-D Tree-树分治
- linux 权限之所有者所属组
- mpandroidchart组合图_使用MpAndroidChart组合图,如何将图表分成上下两部分?
- SQLServer常用SQL语句
- Django 点击刷新验证码
- 新版抖音二维码生成工具源码+实测可用
- 非法吸收公众存款罪的6大无罪辩点(根据无罪判例提炼)
- 【初/中级前端面经】中小型公司面试时都会问些什么?
- 按关键字爬取百度图片
- opencv 显示无边框
- 【ESP 保姆级教程】 疯狂传感器篇 —— 案例:ESP8266 + MQ3酒精传感器 + webserver(局域网内曲线变化图)+ 自定义微信告警
- 版本错误:@annotation pointcut expression is only supported at Java 5
- apidoc 自动化生成 api接口文档
- VR和AR只是入门,真正的元宇宙远不止于此
热门文章
- pandas的rolling函数
- 资深建模大师都不知道的次时代建模技巧
- DTServiceHubClient failed to bless service hub for simulator iPhone X (5C15AE72-12E2-475D-9C2B-EF...
- 压电陶瓷堆栈执行器线性模型simulink仿真
- 旺旺打标签 标题优化 长尾词 大词 上下架时间 销量 店铺层级 动销率 DSR动态评分 想要自然流量,这些点你做到了吗?
- 课程拼团超级拼团公众号小程序制作
- nginx部署多个vue多页面项目
- VML绘制的图形在IE8下不见了
- GLASS数据批量处理
- 100以内质因数分解代码