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

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

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Androidタブレットで楽譜を表示して、足でスクロールできるように、レゴでペダルスイッチを作ってみた。中身は携帯電話型キーボードっていう謎の物体。そのボタンをてきとうに押すようにして、PerfectViewerでスクロール設定。 <a href="https://t.co/jXJaKtjxnV">pic.twitter.com/jXJaKtjxnV</a></p>&mdash; オカリナ太郎 (@ocarinaTaro) <a href="https://twitter.com/ocarinaTaro/status/723075982177914881?ref_src=twsrc%5Etfw">April 21, 2016</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

以前に上のようなレゴブロックと特殊キーボードを使ったなんちゃってフットペダル（譜めくり用）を作ってみたことがあるのですが、こんな感じで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\）に入れて完了。
（これ以降の記事ほぼ不要）

# プログラム

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

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

```c++
#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'→「次のページにスクロール」<br>'b'→「前のページにスクロール」|
|スクロール量設定|お好みで|

こんな感じに設定。

# 回路

回路というのはばかられるくらい簡単。
GPIO4,5を`INPUT_PULLUP`にしているので、タクトスイッチを挟んでGPIO4,5とGNDを直結するだけ。ブレッドボード上だとこんな感じ。
![KIMG0786.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449620/d5c005cd-85a2-1f8c-455f-763ebe8e682f.jpeg)

# 作ってみた

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

![KIMG0801.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449620/4a41fbba-46f5-37b0-731e-fbfc9effb7ea.jpeg)
![KIMG0800.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449620/a314101f-a80f-cebe-90a1-66c168833d2e.jpeg)


# 動かしてみた

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

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Bluetoothフットペダルできた。ページ送りと戻しの機能のみのシンプルなやつ。電池も中に収まったのでけっこう小さくできた。動画は手で押してるけど、足で踏んでも十分動く。 <a href="https://t.co/scjA4ovwAQ">pic.twitter.com/scjA4ovwAQ</a></p>&mdash; オカリナ太郎 (@ocarinaTaro) <a href="https://twitter.com/ocarinaTaro/status/1206226875019755521?ref_src=twsrc%5Etfw">December 15, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

# まとめ

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