MicroPython-On-ESP8266——蜂鸣器

1. 蜂鸣器

蜂鸣器和喇叭都属于发声器件,区别在于蜂鸣器是有源器件,喇叭无源。有源指的是有振荡源,靠振荡源起振输出频率,再由阻抗匹配器推动压电蜂鸣片发声。

生活中常见的座机铃声、电子闹钟、玩具、空调等都是应用了蜂鸣器发声。

喇叭自不用说,没有振荡源,发声靠驱动器带动线圈运行,从而使外面一层振动膜发声,声音频率可调。

2. 使用方法

python停止蜂鸣器 python 蜂鸣器发声_python停止蜂鸣器

蜂鸣器有正负两极的接线柱,直接接到直流正负极即可发声。给不同的电压,可发出不同频率的声响。

前面在学习PWM的时候,咱们知道,开发板可通GPIO管脚,在PWM模式下输出不同的电压,那这样接线就简单了,找出支持PWM模式的GPIO管脚接蜂鸣器正极,负极接到GND端就可以了。

3. 用PWM控制发声

3.1. 频率调整和占空比

音乐国标频率中,A4是440Hz的频率,C4(钢琴的中央C)是261.626Hz,就是说使用PWM的freq=262即可得到“哆”音。

python停止蜂鸣器 python 蜂鸣器发声_开发板_02

占空比是设置高电平的占周期内的比例,因为歌曲每个小节后面都有一个空拍,那我们就固定空拍占空比为0,其它有音节的拍占空比大一些,为1000好了。

3.2. 曲调

这个小星星是从网上找的简谱,因为里面没有连音什么的,咱们简单处理就成了,让每拍占秒时间,拍与拍之间都要有个小停顿。

python停止蜂鸣器 python 蜂鸣器发声_开发板_03

3.3. 接线与代码

这里使用nodemcu开发板上的D7(GPIO 13)做PWM接线口,原因是它距离GND端刚好间隔两个脚,在面包板上直接把蜂鸣器两个正负极插下就对应上了,不用跳线(哈哈哈~)

python停止蜂鸣器 python 蜂鸣器发声_开发板_04

上代码:

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