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をこちらのモノと置き換えます。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のメッセージです。