USB-BLE 无线 MIDI 适配器三种方案:让乐器无线连接 iOS 设备
项目背景
iOS 设备原生支持 BLE MIDI,但多数 USB MIDI 键盘/控制器需通过 Camera Connection Kit 有线连接。本项目提供三种基于 Arduino 的「USB Host → BLE MIDI」桥接方案,让音乐人摆脱线缆束缚,在 GarageBand、GeoShred 等 App 中无线演奏。
方案对比表
| 方案 | 主控 MCU | USB Host | BLE 模块 | 通信方式 | 优势 | 局限 |
|---|---|---|---|---|---|---|
| 1. Arduino 101 + Hobbytronics | Intel Curie (内置 BLE) | Hobbytronics USB HOST-MIDI Breakout | 板载 | Serial (TX→RX) | 元件最少、接线最简 | Arduino 101 已停产、仅支持 Note On/Off |
| 2. Arduino Mega ADK + nRF52832 | ATmega2560 (内置 USB Host) | 板载 USB Host | SparkFun nRF52832 Breakout | I2C (nRF52 为 Master) | 全通道 MIDI、稳定性高 | 需电平转换、nRF52 需改 variants.h |
| 3. Arduino Uno + USB Host Shield + Bean+ | ATmega328P | USB Host Shield | Punch Through LightBlue Bean+ | I2C (Bean+ 为 Master) | 利用存量 Uno、Bean+ 易编程 | Bean+ 已停产、需切换 5V 模式 |
方案 1:Arduino 101 + Hobbytronics(最简)
接线
- Hobbytronics VCC → 5V,GND → GND,TX → Arduino 101 RX (D0)
- 仅需 3 根线,Hobbytronics RX 悬空(单向传输)
固件
上传 CurieUsbMidiBridge.ino(GitHub: joebowbeer/CurieUsbMidiBridge)。上电后手机蓝牙扫描 「CurieBLE」 配对即用。
方案 2:Mega ADK + nRF52832(全功能)
接线
| nRF52832 引脚 | 电平转换器 | Mega ADK 引脚 |
|---|---|---|
| 3V3 | LV 侧 VCC | 3.3V |
| GND | GND | GND |
| RST | HV 侧 RST | RESET |
| SDA | LV1 ↔ HV1 | D20 (SDA) |
| SCL | LV2 ↔ HV2 | D21 (SCL) |
关键配置:修改 SparkFun 核心包 variants.h 将 PIN_WIRE_SDA/PIN_WIRE_SCL 重定向为 24/25(硬件 I2C1)。
固件
- nRF52832 烧录
nRF52MidiWireMaster.ino - Mega ADK 烧录
UsbMidiWireSlave.ino - 手机扫描 「nRFMIDI」 连接
方案 3:Uno + USB Host Shield + Bean+(存量利用)
接线
- Bean+ GND → GND,5V → 5V(需拨码开关切至 5V 模式),SDA → A4,SCL → A5
- USB Host Shield 叠加在 Uno 上,插入 MIDI 设备
固件
- Bean+ 烧录
BeanMidiWireMaster.ino - Uno 烧录
UsbMidiWireSlave.ino - 手机扫描 「Bean+」 连接
通用固件架构 UsbMidiWireSlave.ino
// 核心循环:响应 I2C 主机请求,发送 MIDI 事件
void requestEvent() {
if (usbMidi.read()) { // 解析 USB MIDI 包
uint8_t buf[3];
buf[0] = usbMidi.getType(); // 0x90 Note On 等
buf[1] = usbMidi.getData1(); // 音高/控制器编号
buf[2] = usbMidi.getData2(); // 力度/值
Wire.write(buf, 3);
} else {
Wire.write(0xFF); // 无数据标记
}
}
已知限制与未来改进
- 三种方案均为 单向(USB→BLE),不支持向乐器发送 CC/PC/SysEx。
- 方案 1/3 暂屏蔽 Control Change、After Touch、Pitch Bend,仅保留 Note On/Off;方案 2 可通过取消注释启用全通道。
- Arduino 101、Bean+ 均已停产,新项目建议改用 ESP32-S3 + USB Host Library (TinyUSB) 单芯片方案,成本更低、功耗更小、支持双向全通道。
资源汇总
- 所有固件 GitHub:joebowbeer 下的四个仓库
- 原理图:Fritzing 文件见原文 Schematics 章节
- iOS 测试 App:midimittr(免费,作为 BLE MIDI 中转)
制造工艺
- 打造低成本家庭无线传感器网络:Arduino + 树莓派 + Xively 物联网平台
- 基于 Infineon 3D 磁传感器的 Arduino 无线磁通讯实验
- DIY 蓝牙控制 Arduino 间谍小车
- FlickMote:基于手势的智能家居红外遥控器
- DIY Arduino TV-B-Gone:万能关机遥控器
- 自制大尺寸LED主时钟带闹钟功能 — 12米外清晰可见
- Unopad:基于 Arduino 的无缝 Ableton Live MIDI 控制器
- Arduino 触控打砖块:在 2.4 英寸 TFT LCD 上重现经典街机
- 将 MIDI 键盘变身智能钢琴导师:Arduino + LED 灯带 + MuseScore
- Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
- Arduino 项目优化供电方案:从按键开关到电池监测与数据记录
- 智能无线开关控制器:Arduino + 433MHz 远程操控墙壁开关