MicroPython-On-ESP8266——有请蜂鸣器带来歌曲“小星星”

22 篇文章 1 订阅
19 篇文章 2 订阅

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
MicroPython-ESP32 是一个专门为 ESP32 设计的 MicroPython 库,它提供了许多 ESP32 的驱动程序和功能模块,可以方便地在 ESP32 上开发 MicroPython 项目。 MicroPython-ESP32 库包含了以下功能模块: - machine:提供了访问 GPIO、ADC、PWM、I2C、SPI、UART 等硬件资源的方法。 - network:提供了访问 WiFi、Ethernet 等网络资源的方法。 - time:提供了时间相关的方法,如获取当前时间、延时等。 - uos:提供了文件系统相关的方法,如创建文件、删除文件等。 - ujson:提供了 JSON 编码和解码的方法。 - urequests:提供了访问 HTTP 网络资源的方法。 - usocket:提供了访问 Socket 网络资源的方法。 - ustruct:提供了字节序列和 C 结构体之间转换的方法。 - utime:提供了时间相关的方法,如获取当前时间、延时等。 使用 MicroPython-ESP32 库很简单,只需要将库文件拷贝到 ESP32 上,并在 MicroPython 代码中引入需要的模块即可。例如,以下代码演示了如何使用 MicroPython-ESP32 库中的 machine 模块控制 ESP32 的 GPIO: ```python import machine # 配置GPIO 2为输出模式 p2 = machine.Pin(2, machine.Pin.OUT) # 将GPIO 2输出高电平 p2.value(1) # 将GPIO 2输出低电平 p2.value(0) ``` 需要注意的是,MicroPython-ESP32 库的使用需要先安装 MicroPython 固件。可以从 MicroPython 官方网站下载 ESP32 的 MicroPython 固件,并使用 esptool.py 工具将固件烧录到 ESP32 上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值