基于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年上半年教师资格考试倒数30天复习计划
奥利司他真的能减肥吗?全面解析其作用机制与使用建议
糖尿病患者可以适量食用豆腐脑,但需注意这些事项
科学防控地贫,孕育健康新生命
南昌打造全国性综合交通枢纽:十桥同架赣江,高铁“一城四站”
银行的信用卡激活后的风险评估方法?
【以案释法】出借本人信用卡需谨慎
霍去病的辉煌成就:汉朝的坚强边疆卫士
这些食物是“升糖高手”:管不住嘴,打再多胰岛素也没用
如何理解股市中的套牢现象?这种现象对投资者有哪些启示?
套牢是什么意思?,股票投资中的套牢现象解析
质量工程师面试理论知识
现代手机来电显示功能设置与使用技巧详解
兄弟姐妹之间的赡养协议有效吗
Win11更新按钮为什么是灰色的?如何恢复更新功能?
声带小结声音嘶哑该怎么治疗
融入西安!咸阳规划6条地铁线路!
中医针灸的“绝技”——鬼门十三针,治急症和邪病,可惜快失传了
父爱为什么如树?
斗破苍穹:加玛帝国势力全解析
关卡设计中的版权法与知识产权保护——以《盗贼遗产2》为例
游戏著作权如何申请?
解析土地买卖合同:法律要点与实务操作
香水的材质与制作工艺:从天然到合成的香料萃取艺术
养蚯蚓如何取蚯蚓粪,蚯蚓粪处理技术与方法
制定发言提纲的步骤和方法有哪些?
明朝七大将军的辉煌与传奇
5分钟学会正宗兰州牛肉面!汤底秘诀大公开
肺出水是什么病?医生详解肺水肿的病因、症状与预防
舌头白苔厚口臭口苦的解决方法