ArduinoとMACをBluetooth MIDIでつなぐ

RedBearLab.comのBluetooth 4.0 Low Energy BLEシールド v2.1というArduino用のボードを持っています。8年程前に買ったモノと思われます。このボードを使って、ArduinoとMACをBluetooth MIDIでつないで見たいと思います。

WebサイトRedBearLab.comは、現在ではこのサイトにアクセスできませんになってしまいます。RedBearLab.comのGuithubであればアカウント(https://github.com/RedBearLab)が残っています。このボードについても少しばかり商品紹介ページが残っているだけでした。

ジャンパーが、REQN=9, RDYN=8に接続されていることをチェックして下さい。

なを、私の持っているボードは技適マークが付いていませんので、実験のみに使用し実用には使っていません。

開発環境

ArduinoはUNOを使います。Bluetooth 4.0 Low Energy BLEシールド v2.1には、NORDIC社のnRF8001といチップが搭載されています。このチップ用のライブラリRBL_nRF8001と、RedBearLab.comのBLE SDKをインストールします。


Arduino\libraries\RBL_nRF8001\src\RBL_services.hを下のGithubのモノと置き換えます。 RBL_services.hには、Bluetoothの機能を定義するUUIDと、Bluetoothの通信を規定するGATTの情報はこのファイルに書かれています。 これをBluetooth MIDI用のモノと取り替えます。

https://github.com/sieren/blidino/tree/master/Legacy%20Projects/nRF8001-BLE-Proto/RBL_nRF8001

Arduinoスケッチ

/* Bluetooth MIDI Test Sketch */
#include <RBL_nRF8001.h>

void setup() {
  Serial.begin(115200);
  ble_set_pins(9, 8);
  ble_set_name("BlueMIDI");
  ble_begin();
}

uint8_t v=0;

void loop() {

  uint8_t flag=0;
  uint8_t c;
  if ( ble_connected() )
  {
// Send MIDI Data
    ble_write(0x81);
    ble_write(0x82);
    ble_write(0x90);
    ble_write(0x33);
    ble_write(v);
  }

  v++;
  v &= 0x7F;

  while ( ble_available() )
  {
    c=ble_read(); // Receive MIDI Packet
    Serial.print(c,HEX);
    flag=1;
  }

  if(flag) Serial.println();

  ble_do_events();
  delay(500);
}

動作の確認

MacでMIDI Studioを開きます。
右上のBluetoothのマークをクリックします。

Bluetooth Configurationのダイアログが開きます。MIDI Bluetooth Devicesを検索しています。

Arduinoに電源を供給していれば、BLIDInoというデバイスを見つけてくれます。

Connectをクリックします。MIDI StudioにBluetooth のマークの入ったデバイスが表示されます。

Send And Receive MIDIを開き、Input DeviceとしてBLIDIno Bluetoothを選択します。Input MonitorにBlIDInoから定期的に送られてくるNote Onが表示されます。

Send And Receive MIDIを開き、 Output DeviceとしてBLIDIno Bluetoothを選択します。 OutputにNote Onのメッセージを記載し、Outputをクリックすると、 Note OnがBLIDInoに送られます。

BLIDInoが受信しているデータをモニターするには、Arduino UNOに接続しているPCでシリアルモニターを立ち上げます。Start & Readをクリックし、UNOに接続します。

受信したデータは、以下のように表示されます。先頭の2バイトはタイムスタンプですので、後半3バイトがMIDIのメッセージです。