前言
MicroPython编程实现字母歌播放。
一、材料
Wemos D1 mini一块、面包板一块、蜂鸣器一个、杜邦线若干。
二、连线
连线如图:
三、代码
呼吸灯代码如下(示例):
from machine import Pin, PWM
import time
beeper = PWM(Pin(2, Pin.OUT)) # 使用 2--D4管脚控制蜂鸣器
#|1 1 5 5|6 6 5 -|4 4 3 3|2 2 1 -|
# 5 5 4 4|3 3 2 -|5 5 4 4|3 3 2 -|
# 1 1 5 5|6 6 3 -|4 4 3 3|2 2 1 -|
# 0 表示休止符
tones = { # 音名的频率——字典
'1': 262, # Do
'2': 294, # Re
'3': 330, # Mi
'4': 349, # Fa
'5': 392, # So
'6': 440, # La
'7': 494, # Si
}
music="115566504433221055443320554433201155663044332210"
while True:# 持续播放
for i in range(0,len(music)):
if music[i] == "1": #如果字符串中第i个字符为'1'
beeper.duty(512) # 设定一半音量
beeper.freq(tones['1']) # 设定 Do 的频率
elif music[i] == "2": #如果字符串中第i个字符为'2'
beeper.duty(512) # 設定一半音量
beeper.freq(tones['2']) # 設定 Re 的频率
elif music[i] == "3": #如果字符串中第i个字符为'3'
beeper.duty(512) # 设定一半音量
beeper.freq(tones['3']) # 设定 Mi 的频率
elif music[i] == "4": #如果字符串中第i个字符为'4'
beeper.duty(512) # 设定一半音量
beeper.freq(tones['4']) # 设定 Fa 的频率
elif music[i] == "5": #如果字符串中第i个字符为'5'
beeper.duty(512) # 设定一半音量
beeper.freq(tones['5']) # 设定 So 的頻率
elif music[i] == "6": #如果字符串中第i个字符为'6'
beeper.duty(512) # 设定一半音量
beeper.freq(tones['6']) # 设定 La 的頻率
elif music[i] == "7": #如果字符串中第i个字符为'7'
beeper.duty(512) # 设定一半音量
beeper.freq(tones['7']) # 设定 Si 的頻率
else: #如果字符串中第i个字符为'0'
beeper.duty(0) # 设定不发声
time.sleep(0.2) # 声音持续 0.2秒
beeper.duty(0) # 停止
time.sleep(0.1) # 持续无声 0.1 秒
四、PWM
PWM(脉宽调制)是一种常用的模拟控制方式,它通过不断改变电路输出的占空比来模拟更精确的控制。
PWM控制的基本原理:
1、占空比(Duty Cycle):占空比是指一段电路中,控制信号开启有效时间占整段电路时间的比例。
2、脉宽调制:即根据要控制的电器,改变比例占空比,来模拟出不同强度的电流。
3、工频周期:用于控制PWM波形的工作频率,基本上是指PWM的脉冲调制频率。
本实例中利用D4脚的PWM输出模式,可以输出各音符的频率和音量,得到不同的声音。