0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ESP32でBluetoothキーボードを自作してみた

Last updated at Posted at 2024-06-18

今回はとあるお客様より
「計測器の値をPCへキーボードで入力するような感じで
データを送りたい」
と言われたのでESP32で試作器を作ってみました。

ハードウェア

1、ESPr® Developer C3
https://www.switch-science.com/products/9185?variant=42767371010246
2、LED 1個
3、押し釦 1個
4、スイッチ 1個

ソフトウェア

1、まずはArduinoIDEにライブラリをダウンロード
https://github.com/T-vK/ESP32-BLE-Keyboard/releases/tag/0.3.0
ESP32-BLE-Keyboard.zipをダウンロード
image.png

2、ZIP形式のライブラリをインストール
image.png

3、ボード選択「ESP32C3 Dev Module」
※事前にESP32のライブラリはインストールしておく
image.png

4、ライブラリマネージャーで「NimBLE-Arduino」をインストールする
image.png

5、ESP32-C3の場合は、ESP32_BLE_Keyboardライブラリ内の「BleKeyboard.h」の
 #define USE_NIMBLEのコメントアウトを外す

【変更前】
image.png

【変更後】
image.png

※ちなみにESP32-C3の時だけこの処理が必要!ほかのESP32でこれをすると逆に接続がおかしくなる

6、以下のソースコードでプログラム作成

#include <BleKeyboard.h>

BleKeyboard bleKeyboard("TESTBLE");

int LED_PIN = 5;
int BUTTON_PIN = 6;
int SWITCH_PIN = 7;
int back_data = 0;

void setup() {
  // put your setup code here, to run once:
  pinMode(BUTTON_PIN, INPUT_PULLUP);
  pinMode(SWITCH_PIN, INPUT_PULLUP);
  pinMode(LED_PIN, OUTPUT);

  bleKeyboard.begin();
}

void loop() {
  if (bleKeyboard.isConnected()) {
    digitalWrite(LED_PIN, HIGH);
    if (digitalRead(SWITCH_PIN) == 0) {
      if (back_data == 0) {
        bleKeyboard.print("1");
        delay(100);
        bleKeyboard.print("2");
        delay(100);
        bleKeyboard.print("3");
        delay(100);
        bleKeyboard.press(KEY_LEFT_SHIFT);
        bleKeyboard.press(KEY_TAB);
        delay(200);
        bleKeyboard.releaseAll(); // すべてのキーを離す
        back_data = 1;
      }
    } else if (digitalRead(BUTTON_PIN) == 0) {
      if (back_data == 0) {
        bleKeyboard.write(KEY_TAB);
        delay(100);
        back_data = 1;
      }
    } else {
      digitalWrite(LED_PIN, LOW);
      back_data = 0;
    }
  } else {
    digitalWrite(LED_PIN, LOW);
  }
}


これでスイッチをONにすると「123」が書き込まれ、
ボタンをONにするとTABが押されます。
ちなみに始めは
bleKeyboard.print("123");
で入力しようとしたのですがたまに「12」しか入力されないという
バグがあったので一文字づつ入れるようにしました。


bleKeyboard.setDelay(50);
を入れることで問題は解決しました。
詳細は以下の記事を参照。
https://qiita.com/Kurogara/items/ca26d59989fb56ca53b4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?