【雕爷学编程】MicroPython动手做(19)——掌控板之蜂鸣器与音乐2

知识点:什么是掌控板?
掌控板是一块普及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+ 图形编程

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/52179.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IntelliJ IDEA 2023.2 新版本,拥抱 AI

IntelliJ IDEA 近期连续发布多个EAP版本&#xff0c;官方在对用户体验不断优化的同时&#xff0c;也新增了一些不错的功能&#xff0c;尤其是人工智能助手补充&#xff0c;AI Assistant&#xff0c;相信在后续IDEA使用中&#xff0c;会对开发者工作效率带来不错的提升。 以下是…

eda、gnm、anm究竟是个啥?

安装prody pip install prody -i https://pypi.tuna.tsinghua.edu.cn/simpleeda、anm、gnm eda(essential dynamics analysis) 另一个名字PCA(Principal Component Analysis) 或 NMA(Normal Mode Analysis)。 eda分析可以帮助人们理解生物大分子基本的运动模式和构象变化。…

211. 添加与搜索单词 - 数据结构设计---------------字典树

211. 添加与搜索单词 - 数据结构设计 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a; 原题链接&#xff1a; 211. 添加与搜索单词 - 数据结构设计 https://leetcode.cn/problems/design-add-and-search-words-data-structure/descriptio…

平板光波导中导模的(注意不是泄露模)传播常数β的matlab计算(验证了是对的)

参照的是导波光学_王建(清华大学)的公式(3-1-2、3-1-3)&#xff0c;算的参数是这本书的图3-3的。 function []PropagationConstantsMain() clear;clc;close all lambda01.55;%真空或空气中的入射波长&#xff0c;单位um k02*pi/lambda0; m3;%导模阶数(需要人为指定) n11.62;%芯…

【Qt】利用Tool Button控件创建下拉菜单按钮

功能描述 利用qt进行界面设计和开发&#xff0c;创建下拉按钮。 详细实现 1、在qt侧工具栏利用设计打开.ui文件 2、创建按钮 创建一个Tool Button按钮&#xff0c;并在属性窗口中的QToolButton栏中选中MenuButtonPopup属性。 3、创建action 在Action编辑器创建对应的ac…

HTML不常用但是好用的标签

sub sup <p>这个文本包含 <sub>111</sub>文本。</p> <p>这个文本包含 <sup>上标</sup> 文本。</p>下标文本将会显示在当前文本流中字符高度的一半为基准线的下方&#xff0c;但是与当前文本流中文字的字体和字号都是一样的。…

科技项目验收测试:验证软件产品功能与性能的有效手段

科技项目验收测试是验证软件产品功能与性能的重要手段&#xff0c;在项目开发中起到了至关重要的作用。本文将从产品质量、需求验证、性能测试等方面&#xff0c;探讨科技项目验收测试的有效手段。 1、产品质量保证是验收测试的核心 科技项目验收测试的核心目标是验证软件产品…

Linux CentOS监控系统的运行情况工具 - top/htop/glances/sar/nmon

在CentOS系统中&#xff0c;您可以使用以下工具来监控系统的运行情况&#xff1a; 1. top&#xff1a; top 是一个命令行工具&#xff0c;用于实时监控系统的进程、CPU、内存和负载情况。您可以使用以下命令来启动 top&#xff1a; top 输出 2. htop&#xff1a; htop 是一…

github token使用方法

git remote set-url origin https://<githubtoken>github.com/<username>/<repositoryname>.git 在私有仓库的HTTPS的url上加入<githubtoken>即为token url&#xff0c;可以免ssh key登录

SpringBoot读取配置文件顺序

文章目录 一、前言二、SpringBoot配置文件目录读取顺序源码解析 三、SpringBoot配置文件类型读取顺序源码解析 一、前言 本文通过源码分析 SpringBoot 加载配置文件目录的顺序&#xff0c;以及 properties、xml、yml、yaml文件的读取顺序 二、SpringBoot配置文件目录读取顺序…

传统计算机视觉

传统计算机视觉 计算机视觉难点图像分割基于主动轮廓的图像分割基于水平集的图像分割交互式图像分割基于模型的运动分割 目标跟踪基于光流的点目标跟踪基于均值漂移的块目标跟踪基于粒子滤波的目标跟踪基于核相关滤波的目标跟踪 目标检测一般目标检测识别之特征一般目标检测识别…

绕过TLS/akamai指纹护盾

文章目录 前言TLS指纹什么是TLS指纹测试TLS指纹绕过TLS指纹使用原生urllib使用其他成熟库&#xff01;&#xff01;修改requests底层代码 Akamai指纹相关&#xff08;HTTP/2指纹&#xff09;什么是Akamai指纹测试Akamai指纹绕过Akamai指纹使用其他成熟库 实操参考 前言 有道是…

linux下有关mysql安装和登录的一些问题记录

1. 如何得知linux系统的版本信息&#xff0c;并选择对应兼容的MySQL&#xff1f; 终端输入命令如下&#xff1a; uname -srm 例如&#xff0c;得到版本信息&#xff1a;Linux 4.4.0-184-generic x86_64 相应地对系统版本信息分析如下&#xff1a; Linux系统版本是4.4.0-18…

华为openGauss数据库入门 - gsql用法

目录 1.1 gsql的语法 1.2 gsql常用选项 1.2.1 最常用的必要选项 1.2.2 -r选项 1.2.3 -E选项 1.2.4 -t选项 1.2.5 -A选项 1.2.6 -v选项 1.2.7 -c选项 1.2.8 -f选项 1.2.9 -q选项 1.3 gsql的元命令 1.3.1 \l命令 1.3.2 \du命令和\dg命令 1.3.3 \db命令 1.3.4 \d…

flask数据库操作

本文将详细介绍在Flask Web应用中如何设计数据库模型,并使用Flask-SQLAlchemy等扩展进行数据库操作的最佳实践。内容涵盖数据模型设计,ORM使用,关系映射,查询方法,事务处理等方面。通过本文,您可以掌握Flask数据库应用的基本知识。 Flask作为一个流行的Python Web框架,提供了高…

【Linux基础】WSL安装Ubuntu

说明 本文使用的Windows环境是Windows 11 专业版。 WSL现在有二代WSL2&#xff0c;后续都通过WSL2来安装Linux&#xff0c;使用的是Ubuntu发行版&#xff0c;版本是20.04。 安装过程使用了PowerShell&#xff0c;且是管理员权限打开的。 参考适用于 Linux 的 Windows 子系统…

DFS()

目录 DFS之连通性模型 迷宫 红与黑 DFS之搜索顺序 马走日 单词接龙 分成互质组 DFS之剪枝与优化 小猫爬山 数独 位运算 167. 木棒 生日蛋糕 迭代加深 加成序列 双向DFS 送礼物 IDA* 排书 回转游戏 DFS之连通性模型 dfs 与 bfs都能判断连通性 而且bfs可以…

#typescript 使用file-saver模块#

场景&#xff1a;前端使用file-saver模块做导出文档的时候&#xff0c;出现两个错误 1&#xff1a;npm run build 提示找不到模块&#xff0c;如图 解决方法&#xff1a; 先卸载&#xff0c;不管是否安装都先要卸载 ,然后安装&#xff1a; npm uninstall file-saver npm…

电子词典

项目要求&#xff1a; 1.登录注册功能&#xff0c;不能重复登录&#xff0c;重复注册。用户信息也存储在数据库中。 2.单词查询功能 3.历史记录功能&#xff0c;存储单词&#xff0c;意思&#xff0c;以及查询时间&#xff0c;存储在数据库 4.基于TCP&#xff0c;支持多客户…

【iOS】KVOKVC原理

1 KVO 键值监听 1.1 KVO简介 KVO的全称是Key-Value Observing&#xff0c;俗称"键值监听"&#xff0c;可以用于监听摸个对象属性值得改变。 KVO一般通过以下三个步骤使用&#xff1a; // 1. 添加监听 [self.student1 addObserver:self forKeyPath:"age"…