MicroPython-On-ESP8266——蜂鸣器
1. 蜂鸣器
蜂鸣器和喇叭都属于发声器件,区别在于蜂鸣器是有源器件,喇叭无源。有源指的是有振荡源,靠振荡源起振输出频率,再由阻抗匹配器推动压电蜂鸣片发声。
生活中常见的座机铃声、电子闹钟、玩具、空调等都是应用了蜂鸣器发声。
喇叭自不用说,没有振荡源,发声靠驱动器带动线圈运行,从而使外面一层振动膜发声,声音频率可调。
2. 使用方法
蜂鸣器有正负两极的接线柱,直接接到直流正负极即可发声。给不同的电压,可发出不同频率的声响。
前面在学习PWM的时候,咱们知道,开发板可通GPIO管脚,在PWM模式下输出不同的电压,那这样接线就简单了,找出支持PWM模式的GPIO管脚接蜂鸣器正极,负极接到GND端就可以了。
3. 用PWM控制发声
3.1. 频率调整和占空比
音乐国标频率中,A4是440Hz的频率,C4(钢琴的中央C)是261.626Hz,就是说使用PWM的freq=262即可得到“哆”音。
占空比是设置高电平的占周期内的比例,因为歌曲每个小节后面都有一个空拍,那我们就固定空拍占空比为0,其它有音节的拍占空比大一些,为1000好了。
3.2. 曲调
这个小星星是从网上找的简谱,因为里面没有连音什么的,咱们简单处理就成了,让每拍占秒时间,拍与拍之间都要有个小停顿。
3.3. 接线与代码
这里使用nodemcu开发板上的D7(GPIO 13)做PWM接线口,原因是它距离GND端刚好间隔两个脚,在面包板上直接把蜂鸣器两个正负极插下就对应上了,不用跳线(哈哈哈~)
上代码:
from machine import Pin, PWM
import utime
# 定义音调频率
tones = {'1': 262, '2': 294, '3': 330, '4': 349, '5': 392, '6': 440, '7': 494, '-': 0}
# 定义小星星旋律
melody = "1155665-4433221-5544332-5544332-1155665-4433221"
# 设置D7(GPIO 13)口为IO输出,然后通过PWM控制无缘蜂鸣器发声
beeper = PWM(Pin(13, Pin.OUT), freq=0, duty=1000)
for tone in melody:
freq = tones[tone]
if freq:
beeper.init(duty=1000, freq=freq) # 调整PWM的频率,使其发出指定的音调
else:
beeper.duty(0) # 空拍时一样不上电
# 停顿一下 (四四拍每秒两个音,每个音节中间稍微停顿一下)
utime.sleep_ms(400)
beeper.duty(0) # 设备占空比为0,即不上电
utime.sleep_ms(100)
beeper.deinit() # 释放PWM