アーカイブ

‘ESP8266/ESP32’ カテゴリーのアーカイブ

BLE MIDIコントローラ(1)

2019年05月07日 morecat_lab Comments off

ごぶさたしております。一年ぶりのblog更新です。

BLE-MIDIコントローラの作成編、第一回です。

1. はじめに

ESP-32ではWiFiに加え、Bluetoothを使うことが出来ます。

昨年はWiFi経由でOSCで通信を行いましたが、BLE-MIDIを使うとよりシンプルな構成のMIDIコントローラが作成できそうです。

ble-midi-ms

BLE-MIDIデバイスとして利用する方法について、試した結果を記述します。

2. 開発環境

ESP-32の開発環境としては、ESP-IDFとArduino ESP-32があります。

BLE関係のドライバは共通なのでどちらも使えます。Arduinoの方が設定が楽なのでできればArduinoを優先して使いたいと思います。

ただし、アップデートが頻繁なため古いソースコードだと動かない場合があるようです。

開発環境に含まれているライブラリのバージョンなどに注意が必要です。

BLEの開発元はこちらになります。

https://github.com/nkolban/esp32-snippets

このレポジトリはいろいろ入っていて分かりづらいのですが、BLE関係のソースコードは以下の場所にあるようです。

https://github.com/nkolban/esp32-snippets/tree/master/cpp_utils

※Arduino ESP32やESP-IDFに含まれているため、ここのソースコードを入れる必要はありません。

うまく動かない場合には、Issueを参照してみると良いでしょう。

https://github.com/nkolban/esp32-snippets/issues

3.BLE-MIDIの設定方法

BLE-MIDIを使うためには、BLEのプロファイルとして、デバイス側で次の値を利用します。

MIDI_SERVICE_UUID        “03b80e5a-ede8-4b33-a751-6ce34ec4c700″
MIDI_CHARACTERISTIC_UUID “7772e5db-3868-4112-a1a9-f2669d106bf3″

macOSXの場合、デバイスとのペアリングにはMIDI studioを使い次のような手順が必要になります。

https://developer.apple.com/library/archive/qa/qa1831/_index.html

midi-studio-macOSX

また、iOSでも「設定」「Bluetooth」からペアリングが必要です。

macOSX, iOS共に、一度接続が切れると自動で再接続されない仕様のようです。再度同じ手順で接続が必要になります。

4. Examples

以下のソースコードを参考にして、ボタン押下でNote On/Offを送るプログラムを使い動作の確認をしました。

https://github.com/neilbags/arduino-esp32-BLE-MIDI

拙作ESP32基板に5ボタンのシールドを使い、Arduino 1.8.8 + ESP32 1.0.1で動作させています。

macOSXのGarageBand, iOSのMusic Studio, bs-16i, TouchOSCで動作を確認できました。

ble-midi-gb02

確認に使ったコードは、以下の場所に置いてあります。

https://github.com/kuwatay/ble-midi

5. 今後の予定

BLE-MIDIでESP32から信号が送れることを確認できました。次のステップは以下の項目になります。

  • BLE-MIDI経由の信号受信
  • ステップシーケンサの移植
  • バッテリー駆動化(基板作成?)
  • Windows 10など他の環境での動作確認
  • ハイブリッドデバイス化(WiFi + BLE)

また、@tadfmacさん作成中の「コネクタブル・ミラー」と接続する予定ですので、接続方法を検討しています。

(To Be Continued)

カテゴリー: Arduino, ESP8266/ESP32 タグ:

OSC on Air (Open Sound Control)

2018年05月01日 morecat_lab Comments off

1. はじめに

OSC (Open Sound Control)はネットワーク経由で音楽情報を交換するために開発されたプロトコルです。カリフォルニア大学バークレー校で1982年に次世代のMIDIとして開発されました。

ネットワークベースのプロトコルのため、マイコンでOSCを実装しようとするとLAN機能が必要で、それなりに強力なものが必要でした。Wi-Fiを搭載したESP-WROOM-02 / ESP-WROOM-32が登場し、安価にかつ手軽にネットワークプログラミングができるようになりました。

そこで、ESP-WROOM-02 / ESP-WROOM-32上でOSCの通信を実現してみました。

2. OSC on Airの実装

ハードウェア

開発ボードが流通していますので、そちらを使っても良かったのですが、次の理由からESP-WROOM-02/ESP-WROOM-32を搭載したオリジナルのボードを作成しました。

  • 組み込みやすい余計な機能のない小型のボードとする
    • 角丸のボードはかわいい(@tadmacさん)
  • 用途によって使い分けられるように、同じサイズでESP-WROOM-02版とESP-WROOM-32版を用意する
  • OSCはネットワーク経由で利用するため、USB-シリアルアダプターも外付けとする
  • USB-シリアルアダプターは拡張仕様(7ピン)とし、書き込み時の自動リセットに対応する
  • オンボードのUSB-Serialで複数のボードに書き込むと、シリアルポートの切り替えが必要になってめんどうくさい(@tadmacさん)
    • 外付けだと、ボードだけ変えれば良いので楽
  • 市販のボードより安価に作成できる(@tadmacさん)
    • OSSで設計公開しており、garber作ってelecrowに投げて1000円くらいで1台作れる。約半額

モジュールのピンをそのままピンヘッダーに出しているため、2つの拡張ヘッダーには互換性がありません。

ハードウェアの設計仕様は、以下の場所で公開しています。

ESP8266-BB/ESP32-BB

ソフトウェア

OSCのメッセージを扱うため、TinyOSCの一部を変更して利用しました。まだArduino用のライブラリとして実装していないため、ソースコードと同じフォルダーにTinyOSCのソースコードを置いています。

3. デモ

メッセージの送受信の実験をしました。

次の構成になっています。

OSC-ON-AIR-01

ESP32をコントローラにしてOSCメッセージを送っています。メッセージを受けたESP32/ESP02はLEDを点滅しています。

YouTube Preview Image

iPhoneのアプリ(TouchOSC)をコントローラにしてOSCメッセージを送っています。メッセージを受けたESP32/ESP02はLEDを点滅しています。

YouTube Preview Image

4. 続く

@tadmacさんとコラボをしています。OSC on airを使ってこれまで作成したアプリケーションをつなげて動かします。

MFT2018_01MFT2018_02

カテゴリー: Arduino, ESP8266/ESP32 タグ: