基于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的命令才能停止发声。
热门推荐
钢四控制台代码大全:全面解析与实用指南
白蔹的“蔹”怎么读?中药名称发音全解析!
苹果手机三种截图方法:物理按键、辅助触控与手势操作
你的牛奶喝对了吗?牛奶问题一箩筐
罗中旭:星光灿烂的音乐人生
索氏提取器原理和构造
股市风向标 | 美国经济衰退担忧引发市场动荡
五种不同类型的焦虑症,你是否存在以下表现?
外观专利侵权风险的计算与评估
工作压力太大?看我如何缓解
斯诺克赛场上的双星对决:丁俊晖与奥沙利文的故事
中国斯诺克球员丁俊晖的职业生涯与数据
揭秘:CMG的真正含义是什么?
健身搭配,轻食如何辅助健身效果
车长不跑?3招防电瓶亏电,续航多2年,轻松搞定
剩下的生日蛋糕怎么保存不会坏
女职工哺乳假规定:时长、权益保护及法律依据
合同翻译:如何确保准确性和合法性?
质量管理系统实施的步骤是什么?
低频脉冲治疗仪:原理、结构与临床应用全解析
皖籍审判官葛召棠: 用铁证将南京大屠杀战犯送上刑场
数据结构与算法从0到1,带你系统性的入门!(一)
浴室用什么窗帘?打造私密与美观的完美平衡
如何说项目改版目标
如何创建BAT文件并实现常见自动化任务
最小公倍数是什么意思
从人工到自动化到AIOps再到ChatOps:大模型在运维领域的应用
如何查看手机系统的版本信息
碘伏消毒液可以直接涂在伤口上吗
臀肌训练:缓解久坐族膝盖疼痛的有效方法