基于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的命令才能停止发声。
热门推荐
司机开车无意撞死人的法律责任是什么?
教你香菇焖鸡最家常的做法,鸡肉鲜香入味,做法简单
妙用Office Excel五个函数统计学生期末考试分数段
膳食纤维的作用与选择:营养专家的建议
如何判断股票是否跌破五日均线?这种判断方式有哪些潜在的风险和优势?
最高院:前业主欠物业费,物业公司能向后业主索要吗?
设置你的电脑显示器,帮你改善眼睛健康
知网中的复合影响因子和综合影响因子解析
怀孕两周验孕棒能测出来吗?
古代著名的打油诗 趣味十足
为什么不能近亲结婚
去餐馆吃一桌预制菜?店里使用预制菜要明示吗?记者走访发现……
鳄鱼龟的养殖方法
甘油三酯多高需要药物治疗?
如何在自家门口安装摄像头才不会侵权?
长线比短线容易赚钱,为什么散户喜欢做短线?
怎么排除无效问卷?
同期贷款利率解释以及注意事项
徒步旅行者防蛇安全提示:在步道上保持安全
取保候审不起诉多久可以撤案
Vlog文案怎么写吸引人:如何策划并写好引人入胜的Vlog文案
史铁生的25个名言名句及适用主题
率先为外卖骑手缴纳五险一金,体现了平台社会责任
飘窗漏水问题解决及拆改注意事项
怎么判断自己是不是角膜炎
数据安全:如何保护数据不被泄露和滥用?
医生支招:6个实用方法轻松摆脱头皮屑困扰
“击鼓传花”式的传销闹剧!警惕“艺术品竞拍”
快拆快装结构:简化维护流程,提高工作效率
了解奥美拉唑、兰索拉唑、泮托拉唑、雷贝拉唑的区别与效果!