基于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的命令才能停止发声。
热门推荐
如何判断一只股票的业绩表现?业绩评估对投资决策有何重要性?
综合工时制国家是怎么规定的
晚上尿频繁白天却没有这个情况
三星堆文化起源揭秘:DNA检测证实其多元文化融合
淄博烧烤配方大揭秘:从腌料到蘸料,全部精确到克
花椒泡脚的功效与作用
A股交易规则全解析:与美股港股对比,了解A股市场特点
中央厨房生产工艺流程
减脂期间,保留肌肉很重要!怎么做才能降低肌肉流失?
房贷还款方式是否可以修改?如何选择适合自己的还款方式?
皮肤科医生解析闭口:成因、处理方法及常见误区
苏轼《水龙吟·次韵章质夫杨花词》赏析
科学研究证明:名字真的能影响一个人的未来!
AI教育系统小程序:提升学生学习动力与兴趣的利器
发现身边的情感寄托:哪些物可以托物言志?
顶尖医学期刊研究证实:生活方式及环境因素对健康和衰老的影响超越基因
人工智能深度学习系列—深入探索KL散度:度量概率分布差异的关键工具
16岁打工合法吗属于童工吗
家用车辆用于顺风车、网约车,对投保车险有影响吗?
BMJ:华西学者研究发现,糖或增加45种疾病风险,每一口都要命
张家口莜面:穿越千年的香醇,品味不尽的悠长韵味
养猫家庭异味处理指南:从粪便管理到猫咪卫生
什么是开平仓操作?开平仓操作对交易策略有何影响?
交通事故后私了协议有效吗
蓝田墨玉手镯的价格大概是多少
公司搬迁5公里员工有权拒绝?资深HR详解工作地点变更中的6大法律要点
电商产品上架流程详解:从准备到发布的完整指南
a-羟丁酸脱氢酶偏高是什么原因造成的
如何计算通货膨胀对个人财务的影响?这些计算方法有哪些实际应用?
泰山石敢当博物馆:传承传统文化,守护民间信仰