基于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的命令才能停止发声。
热门推荐
福建厦门7大特色美食,其中这5道必尝,没吃过就白来了
黄越山水画:将心绪融入画作,追寻“天人合一”的艺术境界
王安石《怀钟山》:黄粱一梦的人生哲理
赵本山好笑的电影有哪些
上海驾考通过率仅21.9%!科目二新增多项模拟场景,补考需等4个月
新亚驾校教你轻松应对上海驾考
上海科目三考试最新攻略:16个项目详解与关键技巧
上海驾考新规来了!学车重回6000元时代?
玩转徐州:方特乐园&云龙湖一日游完全攻略
越剧演员陈丽君“跨界”上音综,将越剧元素融入流行音乐
600多岁的老戏新唱,新版越剧《琵琶记》深圳热演
00后的一首原创歌,演绎越城非遗魅力
揭秘指纹锁黑科技:这些内部组件你了解吗?
柳州螺蛳粉:臭味的秘密大揭秘!
总台龙年春晚闪耀肯尼亚内罗毕
悉尼龙舟大赛与总台春晚:中澳中南共庆新春的文化盛宴
肺结核患者可以喝牛奶吗?需要注意什么?
肺结核患者可以喝牛奶吗?需要注意什么?
健康科普 | 做好家庭护理,肺结核患者康复法宝
史努比:一只狗的美国梦
从漫画到太空:史努比与NASA的不解之缘
青海喇家遗址:4000年的面条传奇
通天教主十大弟子,战力排名
充电宝能带上火车吗?这份官方指南请收好
如何辨别真假牛黄解毒片?贵州百灵教你几招!
祖冲之教你如何算π,数学大神上线!
《封神再临》剧情还原度大评测!
《封神第二部》:特效炸裂的东方神话史诗
Solidigm再破纪录:圆周率π计算至105万亿位!
圆周率计算突破105万亿位!揭秘最新世界纪录背后的故事