基于Arduino的ESP32蓝牙MIDI音乐设备开发教程
创作时间:
作者:
@小白创作中心
基于Arduino的ESP32蓝牙MIDI音乐设备开发教程
引用
CSDN
1.
https://blog.csdn.net/andylauren/article/details/137826209
本文将介绍如何使用Arduino开发ESP32蓝牙MIDI音乐设备。通过本教程,你将学习到如何搭建开发环境、编写代码以及实现基本的MIDI功能。
简介
在开始之前,让我们先看看一些基于ESP32的蓝牙MIDI项目:
- 自制卡林巴电子琴,可通过蓝牙连接手机库乐队
- 模仿“埙”的电子吹奏乐器
这些项目都是使用ESP32官方编译链进行的编译,对于一些开发者来说可能不太友好。因此,本文将使用Arduino的库来开发一个能实现类似功能的MIDI设备。
开发环境
- ESP32开发板
- Android手机(iOS设备未验证)
- Arduino 2.3.2
开发过程
打开Arduino IDE,安装库中搜索“BLE-MIDI”并安装。
配置开发板:选择合适的ESP32模块。
手动修改库:由于下载的依赖库中包含了多余的库,需要删除“ArduinoBLE”文件夹,以避免与ESP32的BLE库冲突。
函数介绍
必须使用的函数
引用头文件
#include <BLEMIDI_Transport.h>
#include <hardware/BLEMIDI_ESP32.h>
定义蓝牙设备
BLEMIDI_CREATE_DEFAULT_INSTANCE()
默认设备名为“Esp32-BLE-MIDI”。如果需要自定义设备名,可以使用以下宏:
#define BLEMIDI_CREATE_INSTANCE(DeviceName, Name)
例如:
BLEMIDI_CREATE_INSTANCE("MyBLEserver",MIDI)
初始化蓝牙MIDI设备
MIDI.begin();
连接和断开回调
BLEMIDI_Transport &setHandleConnected(void (*fptr)())
BLEMIDI_Transport &setHandleDisconnected(void (*fptr)())
使用示例:
BLEMIDI.setHandleConnected([]() {
isConnected = true;
digitalWrite(LED_BUILTIN, HIGH);
});
BLEMIDI.setHandleDisconnected([]() {
isConnected = false;
digitalWrite(LED_BUILTIN, LOW);
});
发送MIDI信息
void MidiInterface<Transport, Settings, Platform>::sendNoteOn(DataByte inNoteNumber,
DataByte inVelocity,
Channel inChannel)
参数说明:
inNoteNumber:播放的音节inVelocity:音量(0-100),0表示关闭inChannel:通道,对于MIDI音乐设备通常设置为1
音节表可以参考相关资料。
测试代码
#include <BLEMIDI_Transport.h>
#include <hardware/BLEMIDI_ESP32.h>
BLEMIDI_CREATE_DEFAULT_INSTANCE()
unsigned long t0 = millis();
bool isConnected = false;
#define LED_BUILTIN 2
#define BUTTON_PIN 0
void setup() {
MIDI.begin();
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
digitalWrite(LED_BUILTIN, LOW);
BLEMIDI.setHandleConnected([]() {
isConnected = true;
digitalWrite(LED_BUILTIN, HIGH);
});
BLEMIDI.setHandleDisconnected([]() {
isConnected = false;
digitalWrite(LED_BUILTIN, LOW);
});
MIDI.setHandleNoteOn([](byte channel, byte note, byte velocity) {
digitalWrite(LED_BUILTIN, LOW);
});
MIDI.setHandleNoteOff([](byte channel, byte note, byte velocity) {
digitalWrite(LED_BUILTIN, HIGH);
});
}
void loop() {
int buttonState = digitalRead(BUTTON_PIN);
if ((buttonState == LOW) && isConnected) {
Serial.printf("123\n");
MIDI.sendNoteOn (60, 100, 1);
delay(500);
MIDI.sendNoteOn (70, 100, 1);
delay(5000);
MIDI.sendNoteOn (60, 0, 1);
MIDI.sendNoteOn (70, 0, 1);
}
delay(10);
}
测试步骤
- 将代码上传到ESP32开发板。
- 打开自乐班软件,进入“设备管理” -> “其他MIDI” -> “BLE MIDI设备”。
- 点击“Esp32-BLE-MIDI”,连接成功后设备名称后面会出现一个小黄点。
- 连接成功后开发板上的蓝灯会亮起,断开连接蓝灯会熄灭。
- 按下BOOT按键,手机会发出声音。
这个软件支持多种乐器选择,对于能够持续发声的乐器(如口琴、笛子等),需要调用音量为0的命令才能停止发声。
热门推荐
如何运用技术分析确定市场转折点
再提“稳楼市”,政策组合拳或成地产业复苏强心剂
慢性心力衰竭护理病历
在柏林地下见证德国历史
热衷体验豪华和小众,年轻一代中国游客成为出境游主力
2025年全瓷牙价格分析:2500元一颗算贵吗?800元是不是真的全瓷牙?
120斤跑步多久才能起到减肥的作用和效果
数据安全:一文讲透数据访问控制实操指南
数据加密技术在网络安全中的应用:对称加密与非对称加密的原理与实践
一节等于多少公里每小时
成都爱尔眼科:圆锥角膜是否遗传?如何进行基因检测?
眼科检查时 50% 的孩子都有的问题,你可能从没在乎过…
挂式空调的拆卸步骤是怎样的?拆卸过程中需要注意哪些安全问题?
从扑克牌到游戏帝国:任天堂如何用130年逆袭成全球娱乐巨头?
专家解读缅甸地震:威力相当于上千个原子弹爆炸
新能源汽车与传统燃油汽车在保养方面存在显著差异
如何精准了解湖南蛋鸡存栏量的情况?这种了解对蛋类市场有何意义?
菲律宾鹦鹉
多胎妊娠:从原因到管理的全面指南
周恩来真实军事水平如何?常在指挥一线的他,用一场海战证明!
中国十大著名古桥
暂时没狗粮给狗吃什么?有哪些临时替代品可以选?
青岛深耕海洋文旅:做强海上旅游,突破海岛旅游
使用GEE计算Landsat 8数据中的水域面积
城市更新!南昌老街区焕发新活力
Excel饼图美化指南:从颜色到布局的全方位优化
打造你的梦幻睡眠天堂:卧室装修设计六大黄金原则,深度解析!
低浓度阿托品能否控制近视?这些真相你了解吗?
金价高涨挡不住“买买买”,有银行实物金条库存暂售罄!另有大行调整黄金投资门槛
54位院士!“双一流”高校现任书记校长,大盘点