LoginSignup
0
0

今回はとあるお客様より
「計測器の値を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);
        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」しか入力されないという
バグがあったので一文字づつ入れるようにしました。

0
0
0

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
0