知识点:什么是掌控板?
掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED显示屏、RGB灯、加速度计、麦克风、光线传感器、蜂鸣器、按键开关、触摸开关、金手指外部拓展接口,支持图形化及MicroPython代码编程,可实现智能机器人、创客智造作品等智能控制类应用。
掌控板硬件特性:
ESP-32主控
处理器:Tensilica LX6双核处理器(一核处理高速连接;一核独立应用开发)
主频:高达240MHz的时钟频率
SRAM:520KB
Flash:8MB
Wi-Fi标准:FCC/CE/TELEC/KCC
Wi-Fi协议:802.11 b/g/n/d/e/i/k/r (802.11n,速度高达150 Mbps),A-MPDU和A-MSDU聚合,支持0.4us防护间隔
频率范围:2.4~2.5 GHz
蓝牙协议:符合蓝牙v4.2 BR/EDR和BLE标准
蓝牙音频:CVSD和SBC音频低功耗:10uA
供电方式:Micro USB供电
工作电压:3.3V
最大工作电流:200mA
最大负载电流:1000mA
掌控板载
三轴加速度计MSA300,测量范围:±2/4/8/16G
地磁传感器MMC5983MA,测量范围:±8 Gauss;精度0.4mGz,电子罗盘误差±0.5°
光线传感器
麦克风
3 颗全彩ws2812灯珠
1.3英寸OLED显示屏,支持16*16字符显示,分辨率128x64
无源蜂鸣器
支持2个物理按键(A/B)、6个触摸按键
支持1路鳄鱼夹接口,可方便接入各种阻性传感器
拓展接口
20通道数字I/O, (其中支持12路PWM,6路触摸输入)
5通道12bit模拟输入ADC,P0~P4
1路的外部输入鳄鱼夹接口:EXT/GND
支持I2C、UART、SPI通讯协议
音乐控制类指令
music.pitch()
描述: 播放一定时长的频率
music.pitch(frequency, duration=-1, pin=6, wait=True)
frequency - 频率
duration - 毫秒数,如果为负,则连续播放频率,直到阻塞或者被中断,或者在后台呼叫的情况下,设置或调用新频率stop
pin - 默认是掌控板的P6引脚,一次只能在一个引脚上播放频率
wait - 阻塞,如果为 True 则阻塞,反之则不
range()
描述: 创建一个整数列表,一般用在 for 循环中
range(start, stop[, step])
start - 计数从 start 开始,默认是从 0 开始,例如range(5)等价于range(0, 5)
stop - 计数到 stop 结束,但不包括 stop,例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
step - 步长,默认为1,例如:range(0, 5) 等价于 range(0, 5, 1)
6、按键A、B来控制蜂鸣器播放ENTERTAIER,OLED显示歌曲名
#MicroPython动手做(19)——掌控板之蜂鸣器与音乐
#按键A、B来控制蜂鸣器播放ENTERTAIER,OLED显示歌曲名
from mpython import *
import time
import music
while True:
rgb.fill( (0, 0, 0) )
rgb.write()
time.sleep_ms(1)
if button_a.value() == 0:
rgb[1] = (int(0), int(153), int(0))
rgb.write()
time.sleep_ms(1)
oled.fill(0)
oled.DispChar('播放:ENTERTAIER', 0, 16, 1)
oled.show()
music.play(music.ENTERTAINER, wait=True, loop=False)
if button_b.value() == 0:
oled.fill(0)
oled.show()
rgb[1] = (int(255), int(0), int(0))
rgb.write()
time.sleep_ms(1)
music.stop()
time.sleep(1)
音乐控制类指令之二
music.play()
描述: 播放音乐
music.play(music, pin=6, wait=True, loop=False)
music - 内置音乐,如music.PYTHON;音符,如’c1:4’;音符列表,如[‘r4:2’, ‘g’, ‘g’, ‘g’, ‘eb:8’, ‘r:2’, ‘f’, ‘f’, ‘f’, ‘d:8’]
pin - 默认是掌控板的P6引脚
wait - 阻塞,如果为 True 则阻塞,反之则不
loop - 如果 loop 设置为 True ,则重复调整直到stop被调用或阻塞调用被中断
music.set_tempo()
描述: 设置播放节拍
music.set_tempo(ticks=4, bpm=120)
ticks - 一定数量的ticks(整数)构成单个节拍
bpm - 每分钟节拍数
music.get_tempo()
描述: 获取当前速度作为整数元组: (ticks, bpm)
music.reset()
描述: 以下列方式重置以下属性的状态
ticks = 4
bpm = 120
duration = 4
octave = 4
music.stop()
描述: 停止给定引脚上的所有音乐播放
music.stop(pin=6)
pin - 默认是掌控板的P6引脚
mPython 图形编程
7、触摸按键点播六首曲子
#MicroPython动手做(19)——掌控板之蜂鸣器与音乐
# 触摸按键点播六首曲子
from mpython import *
import time
import music
from machine import Timer
def on_button_a_down(_):
time.sleep_ms(10)
if button_a.value() == 1: return
music.stop()
_status_p = _status_y = _status_t = _status_h = _status_o = _status_n = 0
def on_touchpad_P_pressed():pass
def on_touchpad_P_unpressed():pass
def on_touchpad_Y_pressed():pass
def on_touchpad_Y_unpressed():pass
def on_touchpad_T_pressed():pass
def on_touchpad_T_unpressed():pass
def on_touchpad_H_pressed():pass
def on_touchpad_H_unpressed():pass
def on_touchpad_O_pressed():pass
def on_touchpad_O_unpressed():pass
def on_touchpad_N_pressed():pass
def on_touchpad_N_unpressed():pass
tim12 = Timer(12)
def timer12_tick(_):
global _status_p, _status_y, _status_t, _status_h, _status_o, _status_n
try:
touchPad_P.read();pass
except:
return
if touchPad_P.read() < 400:
if 1 != _status_p:_status_p = 1;on_touchpad_P_pressed()
elif 0 != _status_p:_status_p = 0;on_touchpad_P_unpressed()
if touchPad_Y.read() < 400:
if 1 != _status_y:_status_y = 1;on_touchpad_Y_pressed()
elif 0 != _status_y:_status_y = 0;on_touchpad_Y_unpressed()
if touchPad_T.read() < 400:
if 1 != _status_t:_status_t = 1;on_touchpad_T_pressed()
elif 0 != _status_t:_status_t = 0;on_touchpad_T_unpressed()
if touchPad_H.read() < 400:
if 1 != _status_h:_status_h = 1;on_touchpad_H_pressed()
elif 0 != _status_h:_status_h = 0;on_touchpad_H_unpressed()
if touchPad_O.read() < 400:
if 1 != _status_o:_status_o = 1;on_touchpad_O_pressed()
elif 0 != _status_o:_status_o = 0;on_touchpad_O_unpressed()
if touchPad_N.read() < 400:
if 1 != _status_n:_status_n = 1;on_touchpad_N_pressed()
elif 0 != _status_n:_status_n = 0;on_touchpad_N_unpressed()
tim12.init(period=100, mode=Timer.PERIODIC, callback=timer12_tick)
def on_touchpad_P_pressed():
music.play(music.DONG_FANG_HONG, wait=False, loop=False)
def on_touchpad_Y_pressed():
music.play(music.BIRTHDAY, wait=False, loop=False)
def on_touchpad_T_pressed():
music.play(music.MO_LI_HUA, wait=False, loop=False)
def on_touchpad_H_pressed():
music.play(music.ODE, wait=False, loop=False)
def on_touchpad_O_pressed():
music.play(music.PRELUDE, wait=False, loop=False)
def on_touchpad_N_pressed():
music.play(music.CAI_YUN_ZHUI_YUE, wait=False, loop=False)
button_a.irq(trigger=Pin.IRQ_FALLING, handler=on_button_a_down)
while True:
oled.fill(0)
oled.DispChar("A键:停止", 35, 0, 1)
oled.DispChar("P:东方红 Y:生日快乐", 6, 20, 1)
oled.DispChar("T:茉莉花 H:欢乐颂", 11, 35, 1)
oled.DispChar("O:婚宴 N:彩云追月", 13, 50, 1)
oled.show()
mPython X 图形编程
视频:触摸按键点播六首曲子
https://v.youku.com/v_show/id_XNDY1Mzc0MTc0OA==.html?spm=a2h0c.8166622.PhoneSokuUgc_1.dtitle
掌控板有很多内置的旋律,完整的清单如下:
music.DADADADUM
music.ENTERTAINER
music.PRELUDE
music.ODE
music.NYAN
music.RINGTONE
music.FUNK
music.BLUES
music.BIRTHDAY
music.WEDDING
music.FUNERAL
music.PUNCHLINE
music.PYTHON
music.BADDY
music.CHASE
music.BA_DING
music.WAWAWAWAA
music.JUMP_UP
music.JUMP_DOWN
music.POWER_UP
music.POWER_DOWN
GE_CHANG_ZU_GUO - 歌唱祖国
DONG_FANG_HONG - 东方红
CAI_YUN_ZHUI_YUE - 彩云追月
ZOU_JIN_XIN_SHI_DAI - 走进新时代
MO_LI_HUA - 茉莉花
YI_MENG_SHAN_XIAO_DIAO - 沂蒙山小调
我们可以播放一些内置旋律:
import music
music.play(music.BIRTHDAY)
提示
music.BIRTHDAY指内置旋律的名称,如若播放其它旋律,只需把music.BIRTHDAY更换为想要播放的旋律即可。
8、自编乐谱——生日快乐
我们可以通过设置音调来自编乐谱。
每个音符都有一个名字(比如C#或F),一个八度和一个持续时间。八度用数字表示〜0表示最低八度,4表示中央C,8表示您需要的高度。持续时间也表示为数字。 持续时间的值越高,持续时间越长。例如,持续时间4将持续两倍于持续时间2(依此类推)。 每个音符都表示为一串字符,如下所示:
NOTE[octave][:duration]
例如,C4:4指的是八度音阶4中的音符“C”,持续4个音阶。如果使用音符名称R,则将其视为休息(静音)。
#MicroPython动手做(19)——掌控板之蜂鸣器与音乐
# 自编乐谱——生日快乐
from mpython import *
import music
while True:
oled.fill(0)
oled.DispChar(" 编曲:生日快乐", 0, (2-1)*16, 1)
oled.show()
music.pitch(392, 250);
music.pitch(392, 250);
music.pitch(440, 500);
music.pitch(392, 500);
music.pitch(523, 500);
music.pitch(494, 500);
music.pitch(0, 500);
music.pitch(392, 250);
music.pitch(392, 250);
music.pitch(440, 500);
music.pitch(392, 500);
music.pitch(587, 500);
music.pitch(523, 1000);
music.pitch(392, 250);
music.pitch(392, 250);
music.pitch(784, 500);
music.pitch(659, 500);
music.pitch(523, 500);
music.pitch(494, 500);
music.pitch(440, 1000);
music.pitch(440, 500);
music.pitch(0, 500);
music.pitch(698, 250);
music.pitch(698, 250);
music.pitch(659, 500);
music.pitch(523, 500);
music.pitch(587, 500);
music.pitch(523, 1000);
Mind+ 图形编程