今回はとあるお客様より
「計測器の値を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をダウンロード
3、ボード選択「ESP32C3 Dev Module」
※事前にESP32のライブラリはインストールしておく
4、ライブラリマネージャーで「NimBLE-Arduino」をインストールする
5、ESP32-C3の場合は、ESP32_BLE_Keyboardライブラリ内の「BleKeyboard.h」の
#define USE_NIMBLEのコメントアウトを外す
※ちなみに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