ESP32で、BLE MIDI経由でMIDIメッセージを受信する

以前、Qiitaにて「Bluetooth MIDI によるモバイルとデバイスの相互通信 」という記事を書きまして、そのときはArduinoと専用のBluetooth MIDI 基板を組み合わせた方法で実現しましたが、その後の調査で、ESP32とライブラリを使えばもっと簡単に実現できるようで、、試してみました。

ESP32側(ペリフェラル)

環境の構築

以前に入手していた評価ボードESP32-DevKitC-V4を使用しました。

PCに繋ぎ、Arduinoの開発環境にて、以下の設定を行います。
(詳細は、別の詳しく書かれているブログを参照してください)

ボード:ESP32 Dev Module を選択
ライブラリ:BLE-MIDI を追加

プログラム

ESP32側は、以下のプログラムを書き込みます。


#include <BLEMIDI_Transport.h>
#include <hardware/BLEMIDI_ESP32.h>

// BLEデバイス名のセット
BLEMIDI_CREATE_INSTANCE("BLEMIDI test", MIDI)

void setup() {
	// シリアルモニタ用
	Serial.begin(115200);

	// BLE MIDIの接続/切断時のコールバック
	BLEMIDI.setHandleConnected(OnConnected);
	BLEMIDI.setHandleDisconnected(OnDisconnected);

	// MIDIインスタンスの初期化
	MIDI.begin();
}

void loop() {
	uint8_t channel;
	uint8_t data1;
	uint8_t data2;

	// MIDIメッセージの取得(チャンネル1)
	if (MIDI.read()) {
		switch (MIDI.getType()) {
			case midi::NoteOn:
				Serial.print("NoteOn ");
				break;
			case midi::NoteOff:
				Serial.print("NoteOff ");
				break;
			case midi::ControlChange:
				Serial.print("ControlChange ");
				break;
			case midi::ProgramChange:
				Serial.print("ProgramChange ");
				break;
		}

		channel = MIDI.getChannel();
		data1 = MIDI.getData1(); //note number (for note off/on)
		data2 = MIDI.getData2(); //velocity (for note off/on)

		Serial.print(channel);
		Serial.print(" ");
		Serial.print(data1);
		Serial.print(" ");
		Serial.print(data2);
		Serial.println();
	}
}

// BLE MIDIの接続時のコールバック
void OnConnected() {
	Serial.println("OnConnected");
}

// BLE MIDIの切断時のコールバック
void OnDisconnected() {
	Serial.println("OnDisconnected");
}
 

iOSアプリ側(セントラル)

Qiitaの記事で紹介したiOSのサンプルアプリを使用します。

「Central」ボタンをタップして、以下のようにESP32のデバイスが見つかれば、選択して接続します。

確認

iOSアプリのSend欄のボタンをタップすると、Note on/off が送信されます。
Arduinoのシリアルモニタにて、Note on/off が検出できていれば、MIDIメッセージの受信が成功しています。

このように、ESP32ではBLE MIDI経由でのMIDIメッセージの受信が非常にシンプルに実現できました。
Arduinoの出番はかなり減るかもしれないですね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です