ESP32C3をBLEキーボードにする

Nimbleライブラリ マイコン/Arduino

以前、ESP32をワイヤレスキーボード(ワイヤレスフットスイッチ)にするという記事をいくつか書きました。

以前紹介した方法(スケッチ)のままではESP32C3においてうまく動作しないことが分かりました。今回はそれを解決策する方法を紹介します。小ネタです。

ESP32をキーボードにする

以前も紹介しましたが、ESP32をBLEキーボードにするには以下のライブラリを使うと簡単です。

GitHub - T-vK/ESP32-BLE-Keyboard: Bluetooth LE Keyboard library for the ESP32 (Arduino IDE compatible)
Bluetooth LE Keyboard library for the ESP32 (Arduino IDE compatible) - GitHub - T-vK/ESP32-BLE-Keyboard: Bluetooth LE Ke...

EPS32にはたくさん種類があり、うまく動作しない場合があります。ESP32-C3は内部のアーキテクチャーが大きく変更になったためか以前紹介したスケッチのままでは動作しません。

↓従来の方法ではデバイス一覧にすら出てきません.

ESP32C3-BLEKeyboard

解決方法

ESP32-BLE-Keyboardのライブラリをインストールしたフォルダに移動し、BleKeyboard.hをテキストエディタか何かで開いてください。そして、先頭行にあるコメントアウトを外してください。

// uncomment the following line to use NimBLE library
#define USE_NIMBLE //ここのコメントアウトを外す

これでESP32公式BLEライブラリではなくNimBLEを使うようになり、問題が解決します。

スケッチサンプル

#include <BleKeyboard.h>
BleKeyboard bleKeyboard("macroPad3x3C");

//LED
const int PinLED01 = 20;
//Button
const int PinButtonA = 3;

void setup() {
 pinMode(PinLED01, OUTPUT);
 digitalWrite(PinLED01, LOW);
 pinMode(PinButtonA, INPUT_PULLUP);
 bleKeyboard.begin();
}

void loop() {
 if (bleKeyboard.isConnected()) {
  digitalWrite(PinLED01, HIGH);
  if (digitalRead(PinButtonA) != true) {
   bleKeyboard.print("Hello world");
  }
  delay(5);
 }
 else{
  digitalWrite(PinLED01, HIGH);
  delay(1000);
  digitalWrite(PinLED01, LOW);
  delay(1000);
 }
}

NimBLE-Arduinoが必要

NimBLE-Arduinoは有志が作成しているESP32のBLEライブラリです。どうもEspressifが出している公式BLEライブラリよりも出来が良いらしく各所でよく使われています。

ArduinoIDEのライブラリ管理から簡単にインストールできますので上記スケッチでエラーが出る場合はこれをインストールしてみてください。

補足事項

BLE-Gamepadというライブラリもありますが、こちらはもともとNimbleを使うため、上記のような操作をしなくても一応、動作します。SupportハードウェアにもESP32C3の名前があります。

ただ、私が試した範囲だと、一応使えはするものの接続が非常に不安定だったことを付け加えておきます。単なるおま環なのか、なにか設定が必要なのかバグがあるのかは不明です。

まとめ

ESP32C3自体がまだ新しいためか、あまり情報がなく、海外のサイトでいくつか質問が上がっているような状態でした。その中でどんぴしゃな内容だったのが下記サイトです。誰か存じ上げませんが感謝。

Can't connect with BLE using seeed studio ESP32C3
Can't connect with BLE using seeed studio ESP32C3

コメント