展开目录
树莓派无源蜂鸣器发声实验
树莓派无源蜂鸣器
X
陈尼玛的博客
记录开发生涯的踩坑经历,用时间来验证成长
加载中

在网上找蜂鸣器的发声代码,结果找到的都是有源蜂鸣器的,无源蜂鸣器的只找到一个,而且还是c++写的。蛋疼之余,索性自己尝试用GPIO的PWM功能做了一个发声代码。

首先需要连接电路,把蜂鸣器的VCC接到3.3v,GND串联一个200欧左右的电阻(以防元件短路,毕竟5块钱的东西)接到0v,I/O串联一个200欧左右的电阻(为了降低声音,蜂鸣器很刺耳的)接到GPIO40。

如果连接成功,以下代码可以发出声音了。

import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(40, GPIO.OUT)

C_LOW_1=        262
C_LOW_1_HALF=   277
C_LOW_2=        294
C_LOW_2_HALF=   311
C_LOW_3=        330
C_LOW_4=        349
C_LOW_4_HALF=   370
C_LOW_5=        392
C_LOW_5_HALF=   415
C_LOW_6=        440
C_LOW_6_HALF=   466
C_LOW_7=        494

C_MID_1=        523
C_MID_1_HALF=   554
C_MID_2=        587
C_MID_2_HALF=   622
C_MID_3=        659
C_MID_4=        698
C_MID_4_HALF=   740
C_MID_5=        784
C_MID_5_HALF=   831
C_MID_6=        880
C_MID_6_HALF=   932
C_MID_7=        988


C_HIGH_1=        1046
C_HIGH_1_HALF=   1109
C_HIGH_2=        1175
C_HIGH_2_HALF=   1245
C_HIGH_3=        1318
C_HIGH_4=        1397
C_HIGH_4_HALF=   1480
C_HIGH_5=        1568
C_HIGH_5_HALF=   1661
C_HIGH_6=        1769
C_HIGH_6_HALF=   1865
C_HIGH_7=        1976

import re
def playstr(mstr):
  cp=r"(L|M|H)(H*)(\d)([\d\.]+)(?:;([\d\.]+))*"
  mstr=re.subn(r"\#.+","",mstr)[0]
  c=re.findall(cp,mstr)
  for i in range(0,len(c),1):
    x='C_'+{'L':'LOW','M':'MID','H':'HIGH'}[c[i][0]]+'_'+c[i][2]
    if c[i][1]: x+='_HALF'
    p = GPIO.PWM(40,globals()[x])
    p.start(80) # dc
    time.sleep(float(c[i][3]))
    p.stop()
    if c[i][4]: time.sleep(float(c[i][4]))
    else: time.sleep(0.1)

try:
  playstr("""

 #低音
  L1.3 L2.3 L3.3 L4.3 L5.3 L6.3 L7.3
 #中音
  M1.3 M2.3 M3.3 M4.3 M5.3 M6.3 M7.3
 #高音
  H1.3 H2.3 H3.3 H4.3 H5.3 H6.3 H7.3
 #警笛
  M1.5 L5.6 M1.5 L5.6
 #一万个舍不得
  M3.1 M3.2 M3.1 M3.2 M5.2;0M3.2 M2.3;1
  M2.2;0 M2.2;.2 M2.2;0 M2.3;0 M5.2;0 M2.1 M3.2

  """)
except KeyboardInterrupt:
  pass

GPIO.cleanup() # 拉完屎擦屁股是一个好习惯

附录:音调对应频率 http://wenku.baidu.com/link?url=eNVdYbhCs3CDbDgPeJgLIZks8yXlaYPbUOFkK2xbL7tvfKUI8DL2CdqK01qK_Fsti4erg0RUMlUN1Re1pwrBnhTmn1enFthR-RRRHUCYthO

相关文档

暂无

随便看看

  1. windows电脑防止自动休眠

  2. word文件命令行打印

  3. sass变量和继承类写法

  4. mac 终端运行后台程序如何在终端关闭时继续运行

  5. npm远程服务器某些配置不兼容代理的解决办法

  6. nodejs本地双向代理 端口转发

  7. git删除远程分支

  8. html5 全屏代码

  9. webrtc服务搭建

  10. webrtc泄漏本地ip信息

  11. 树莓派 3B/3B+ usb启动

  12. linux自启动/禁止自启动服务

  13. webpack使用外部资源

  14. git配置服务端支持http认证

  15. centos查看最近一次的开机时间

  16. mysql导出csv文件

  17. 树莓派配置wifi

  18. mysql选取内容导出到文件

畅言模块加载中