USB-BLE 无线 MIDI 适配器
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
应用和在线服务
|
关于这个项目
使用低功耗蓝牙将您的 USB MIDI 乐器无线连接到您的 iOS 设备。
通常需要 Apple Camera Connection Kit 才能将 USB MIDI 乐器(例如 K-Board、BopPad 或 Artiphon)连接到 iOS 音乐应用程序(例如 GarageBand、DrumJam 或 GeoShred)。然而,在一些 Arduino 组件和草图的帮助下,很容易制作一个适配器,从 USB 乐器读取 MIDI 消息并将它们发送到使用蓝牙 LE (BLE) 的 iOS 设备。
我研究了三种不同的方法,并在这个项目中为每种方法提供了说明。
Arduino 101 / Hobbytronics USB HOST-MIDI
第一种设计在零件和连接方面是最简单的。它结合了 Arduino 101 提供的 BLE 支持和 Hobbytronics USB HOST-MIDI breakout 提供的 USB Host 支持。
Arduino 101 和 Hobbytronics breakout 使用串行 I/O 进行通信。在 Arduino 101 上运行的草图从 USB 主机分支读取 MIDI 消息,然后将它们写入其集成的 BLE 服务。
图>适配器目前仅在一个方向上运行,从 USB 接收消息但不传输到 USB。顺便说一下,这个项目中的所有适配器都是如此。出于这个原因,Hobbytronics breakout 只需要三个连接:5V、GND 和 TX。将其 TX 引脚连接到 Arduino 101 上的 RX 引脚 (D0)。
要对适配器进行编程,请将 CurieUsbMidiBridge 草图上传到 Arduino 101。现在您已准备好插入乐器,将您的 iOS 应用程序连接到适配器(扫描“CurieBLE”),然后开始播放。
许多 iOS 应用程序直接支持 BLE MIDI 连接。对于没有的应用,midimittr 应用可以充当中介。
出于稳定性原因,适配器的这种实现仅处理 Note On 和 Note Off 消息。对其他通道消息的支持,例如 Control Change、After Touch 和 Pitch Bend 可能会在未来版本中启用,但目前它们在草图中被注释掉了。
Arduino Mega ADK / SparkFun nRF52832
第二个设计利用了 SparkFun nRF52832 Breakout 提供的 BLE 支持和 Arduino Mega ADK 提供的 USB 主机支持。
SparkFun nRF52 breakout 和 Arduino Mega 使用 I2C 进行通信。 nRF52 是 I2C 主机,从 Arduino Mega 请求 MIDI 消息。从 Arduino Mega 接收到的消息通过 nRF52 的 BLE 服务发送出去。在 Arduino Mega 上运行的草图响应 I2C 请求,从其集成的 USB 主机控制器读取 MIDI 消息并将它们写入 nRF52。
SparkFun 突破需要五个连接:
- 3V3
- 地
- RST
- SDA (24)
- SCL (25)
由于 SparkFun nRF52 分线在 3V3 下运行,而 Arduino Mega 在 5V 下运行,三个逻辑引脚通过双向电平转换器连接。
注意:SDA 和 SCL 分配必须在 SparkFun variant.h 文件中重新定义。有关更多详细信息,请参阅此连接指南讨论。
将草图 nRF52MidiWireMaster 上传到 SparkFun breakout,将 UsbMidiWireSlave 上传到 Arduino Mega。然后将您的乐器插入 USB 主机连接器,将您的 iOS 应用程序连接到适配器(扫描“nRFMIDI”),然后开始演奏!
Arduino Uno / USB 主机扩展板 / Bean+
最终设计采用 LightBlue Bean+ 的 BLE 功能,将其与连接到 Arduino Uno 的 USB 主机扩展板配对,如下图所示。 Arduino Mega ADK 可以替代 USB Host Shield 和 Arduino Uno 组合。 Fritzing 图显示了 Arduino Mega ADK 版本。
与之前的设计一样,两个 MCU 使用 I2C 进行通信。 Bean+ 是 I2C 主机,从 Arduino Uno 请求 MIDI 消息。从 Uno 接收到的消息通过 Bean 的 BLE 服务发送出去。在 Uno 上运行的草图响应 I2C 请求,从连接的 USB Host Shield 读取 MIDI 消息并将它们写入 Bean+。
Bean+ 需要四个连接:
- 地
- 5V
- SDA (A4)
- SCL (A5)
注意:将 Bean+ 切换到 5V 操作。
将草图 BeanMidiWireMaster 上传到 Bean+ 并将 UsbMidiWireSlave 上传到 Arduino Uno。然后将您的乐器插入 USB Host Shield,将您的 iOS 应用程序连接到适配器(扫描“Bean+”),然后开始播放。
出于性能原因,草图中已注释掉对 Control Change 和 After Touch 通道消息的支持,但可能会在未来版本中启用。
代码
CurieUsbMidiBridge.ino
与 Arduino 101 + Hobbytronics USB HOST-MIDI 一起使用 https://github.com/joebowbeer/CurieUsbMidiBridgenRF52MidiWireMaster.ino
上传到nRF52 breakout,将UsbMidiWireSlave.ino(见下文)上传到连接USB MIDI乐器的Arduino。 https://github.com/joebowbeer/nRF52MidiWireMasterBeanMidiWireMaster.ino
上传到Bean+,上传UsbMidiWireSlave.ino(下图)到连接USB MIDI乐器的Arduino。 https://github.com/joebowbeer/BeanMidiWireMasterUsbMidiWireSlave.ino
上传到 Arduino ADK(或 Arduino Uno + USB Host Shield)。从 USB MIDI 乐器读取 MIDI 消息并将它们写入 Wire (I2C) master。https://github.com/joebowbeer/UsbMidiWireSlave示意图
将 Arduino 101 与 Hobbytronics USB HOST-MIDI 连接将 Arduino ADK 与 Sparkfun nRF52 Breakout 将 Arduino ADK 与 LightBlue Bean+ 连接制造工艺