ESP32をBluetoothキーボードにして楽譜めくり用フットペダルを作ってみる


概要

ESP32をBLEキーボードにするという記事を見かけました。
普段からAndroidタブレットで楽譜を見たりしているのですが、演奏中に使うと譜めくりが大変です。

以前に上のようなレゴブロックと特殊キーボードを使ったなんちゃってフットペダル(譜めくり用)を作ってみたことがあるのですが、こんな感じでESP32を使ってBluetooth接続のものにしたいと思います。

ESP32評価ボード(安いの)

ESP32はAmazonで見つけたのを適当に買いました。
(これ → https://t.co/1FKYttcJcp
買っては見たものの、ピン配置が他の評価ボードと同じかどうかもよく分からずなんとなく使ってます。
(どうせたいしたことはしないので)

ESP32への書き込みはArduino IDEを使ってますが、ここではArduino IDEのインストールやセットアップについては触れません。

BLEキーボードライブラリ

https://github.com/T-vK/ESP32-BLE-Keyboard
こちらを利用させていただきました。
ダウンロードしてきて、Arduino IDEのlibrariesフォルダ(普通にインストールするとこの辺? → C:\Program Files (x86)\Arduino\libraries\)に入れて完了。
(これ以降の記事ほぼ不要)

プログラム

まとまってないけどこんな感じ。
ボタン2つで、'f' と 'b' を送るだけのもの。
キーイベントが送られてきた後はAndroid側でどうにかします。

githubで全体が見られます(ここに貼ったソースと大差なし)
https://github.com/manontroppo1974/PageTurner

#include <BleKeyboard.h>

#define PIN_LED0 2
#define PIN_BTN0 4
#define PIN_BTN1 5

BleKeyboard bleKeyboard;

int gConnect = 0;
int gBtn0 = HIGH;
int gBtn1 = HIGH;

uint8_t chrBtn0 = 'f';
uint8_t chrBtn1 = 'b';

void setup() {
  Serial.begin(115200);
  Serial.println("Starting BLE Keyboard");
  bleKeyboard.begin();

  pinMode(PIN_LED0, OUTPUT);
  pinMode(PIN_BTN0, INPUT_PULLUP);
  pinMode(PIN_BTN1, INPUT_PULLUP);
}

void loop() {
  int btn0 = digitalRead(PIN_BTN0);
  int btn1 = digitalRead(PIN_BTN1);

  if(bleKeyboard.isConnected()) {
    if(gConnect == 0){
      gConnect = 1;
      digitalWrite(PIN_LED0, HIGH);
      Serial.println("BLE Keyboard: connected");
    }

    if(gBtn0 != btn0){
      if(btn0 == LOW){
        Serial.println("Button 0");
        bleKeyboard.write(chrBtn0);
      }      
    }    
    if(gBtn1 != btn1){
      if(btn1 == LOW){
        Serial.println("Button 1");
        bleKeyboard.write(chrBtn1);
      }      
    }    
  }
  else {
    if(gConnect == 1){
      gConnect = 0;
      digitalWrite(PIN_LED0, LOW);
      Serial.println("BLE Keyboard: disconnected");
    }
  }

  gBtn0 = btn0;
  gBtn1 = btn1;

  delay(100);
}

PerfectViewer

Android側はこのソフトで楽譜を表示することにします。
漫画ビューアとして有名ですが、

  • 余白自動カット
  • ハードキー設定
  • スクロール量設定

どの機能をとっても今回の用途に最適です。
このソフトはきっと楽譜ビューアだと思います。

設定項目 設定値
余白自動カット ON
ハードキー設定 'f'→「次のページにスクロール」
'b'→「前のページにスクロール」
スクロール量設定 お好みで

こんな感じに設定。

回路

回路というのはばかられるくらい簡単。
GPIO4,5をINPUT_PULLUPにしているので、タクトスイッチを挟んでGPIO4,5とGNDを直結するだけ。ブレッドボード上だとこんな感じ。

作ってみた

ESP32と電池とボタンを百均で買ってきた適当な大きさのケースに詰め込みます。
配線が余って大変なことになっていますが気にしません。


動かしてみた

実際に動かしてみたのがこちら。
ケースの角を押すとボタンが押されて楽譜がスクロールします。

まとめ

これくらいコンパクトで数個のボタンがついててカスタマイズ可能なフットペダル売ってないですかね、、?