知识点:什么是掌控板?
掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片,支持WiFi和蓝牙双模通信,可作为物联网节点,实现物联网应用。同时掌控板上集成了OLED显示屏、RGB灯、加速度计、麦克风、光线传感器、蜂鸣器、按键开关、触摸开关、金手指外部拓展接口,支持图形化及MicroPython代码编程,可实现智能机器人、创客智造作品等智能控制类应用。

python控制spike蜂鸣器播放指定变量 python蜂鸣器代码_嵌入式硬件


python控制spike蜂鸣器播放指定变量 python蜂鸣器代码_物联网_02


python控制spike蜂鸣器播放指定变量 python蜂鸣器代码_python_03

掌控板硬件特性:
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通讯协议

python控制spike蜂鸣器播放指定变量 python蜂鸣器代码_物联网_04


python控制spike蜂鸣器播放指定变量 python蜂鸣器代码_物联网_05


音乐控制类指令

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 图形编程

python控制spike蜂鸣器播放指定变量 python蜂鸣器代码_物联网_06


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 图形编程

python控制spike蜂鸣器播放指定变量 python蜂鸣器代码_ide_07

视频:触摸按键点播六首曲子
https://v.youku.com/v_show/id_XNDY1Mzc0MTc0OA==.html?spm=a2h0c.8166622.PhoneSokuUgc_1.dtitle

python控制spike蜂鸣器播放指定变量 python蜂鸣器代码_单片机_08

掌控板有很多内置的旋律,完整的清单如下:

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,则将其视为休息(静音)。

python控制spike蜂鸣器播放指定变量 python蜂鸣器代码_物联网_09


python控制spike蜂鸣器播放指定变量 python蜂鸣器代码_python_10

#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+ 图形编程

python控制spike蜂鸣器播放指定变量 python蜂鸣器代码_物联网_11


python控制spike蜂鸣器播放指定变量 python蜂鸣器代码_python_12