目次
ESP32とタクトスイッチでBluetoothキーボードを自作する(ESP32-BLE-KEYBORAD)
ESP32と基本的な部品だけでBluetoothキーボードを作ったので、その方法を紹介します!
ESP32とタクトスイッチでブレッドボード上にBluetoothキーボードを作りました????#esp32 #arduino #Bluetooth #自作キーボード pic.twitter.com/Htc9oey1JZ
— ????????????-????????????h????電子工作 (@wak_tech) April 12, 2020
参考にしたサイト
ESP32とは
Espressif社が開発している、Wi-FiとBluetooth Low Energy(BLE)の機能を併せ持つマイコンです。入出力に使えるGPIOピンは30本以上あり、タッチセンサも内蔵しています。
更に開発にArduinoが使用でき公式のライブラリもかなり豊富で大人気のマイコンです。
これだけ豊富な機能を持ちながらモジュール単体で700円程度と非常に安価なのが特徴。USBポートなど開発に必要なすべてを搭載した開発ボードがAmazonや秋月電子で購入できます。開発ボードでも1000円以下で、ProMicroよりも安く高機能です。
ESP32の使い方については20個以上のチュートリアルとして公開していますのでESP32の使い方入門をご覧ください。
今回はこのESP32開発ボードを使って、Bluetoothキーボードを作っていきます。
準備
今回使用する部品
- ESP32開発ボード
 - タクトスイッチ
 - サンハヤトブレッドボード
- 片方に6個穴がある特殊なタイプのブレッドボードです。ESP32は横幅があるため、このブレッドボードでないと片側のピンしか使えません。
 
 - ジャンパワイヤ
 - 高めの抵抗(数十kΩ)
 
ESP32-BLE-KEYBOARDのインストール
- Githubに飛び、ZIP形式でダウンロードする
 - ArduinoのZIP形式のライブラリをインストールでzipファイルを選びインクルードする
 
これで完了です!
回路
自動生成の回路図で汚くてすみません。
タクトスイッチの両側に抵抗と3.3Vを接続します。また、抵抗のもう片足はGNDに接続しておきましょう。こうすることで、押していない間は0V,押したときは3.3Vとなり、オンオフ判定ができます。
サンプルプログラム(コピペで動く)
以下のプログラムをArduinoから書き込みます。
#include <BleKeyboard.h>
BleKeyboard bleKeyboard("Wak-tech keyboard"); //デバイスの名前を指定できます
void setup() {
  Serial.begin(115200);
  Serial.println("Starting BLE work!");
  bleKeyboard.begin();
  pinMode(32,INPUT);    //GPIO32を入力に
  pinMode(33,INPUT);    //GPIO33を入力に
}
void loop() {
  if(bleKeyboard.isConnected()) {    //接続されているとき
    if(digitalRead(32) == HIGH){    //32ピンのタクトスイッチが押された時
      bleKeyboard.print("wak-tech!");    //文字を送信
      delay(200);
    }
    if(digitalRead(33) == HIGH){    //33ピンのタクトスイッチが押された時
      bleKeyboard.write(KEY_RETURN);    //Enterキーを送信
      delay(200);
    }
  }
}
書き込みが完了した後は、パソコンやスマホから「Wak-tech keyboard」という名前のBluetoothデバイスを探し、接続してみてください!
片方のボタンを押すと「wak-tech!」という文字列が、もう片方ではEnterキーが押されます。
プログラムの解説
プログラム中で解説していますが、簡単に使い方をまとめます。
- BleKeyBoardオブジェクトの作成
BleKeyboard bleKeyboard("hogehoge");とすることでhogehogeという名前のBLEデバイスを設定できます。このオブジェクトが各機能を持っていて、bleKeyboard.begin()で動作を開始します。 - インプットピンの設定
今回はGPIO33,32をインプットとして使うので、pinMode(32,INPUT);のように入力に設定しておきます。 - loop処理
Bluetoothに繋がれると、bleKeyboard.isConnected()がTrueになります。よってif(bleKeyboard.isConnected()){}文の中に処理を書けばOKです。スイッチが押されると各ピンは3.3V,つまりHIGHとなるため、digitalRead(32)で値を読み取り、HIGHなら~する等の動作が可能です。 - キーの出力
- printメソッド
文字列を一気に送信するメソッド。 - writeメソッド
特殊な文字を送信するメソッド。引数に予約語を入れるとそのキーを送信してくれる。
これらのキー出力のメソッドはArduinoのKeyboardライブラリ を踏襲しているので、そちらを参考にしてください! 
 - printメソッド
 
まとめ
かなり優秀なライブラリがあるので簡単にBluetoothキーボードが作れました!
ESP32にはタッチセンサがあり、入力スイッチのようにも使えます。以前作ったタッチセンサピアノ
これを使ってキーマトリクスを組んで、5*5 = 25キーのタッチセンサ型Bluetoothキーボードにしても面白いかもしれません!
記事をご覧いただきありがとうございました。
簡単にできるなあ
この設計だとGPIOに大電流が流れ込んでしまうのあまりおすすめしません(内部抵抗が在るので大丈夫って言えば大丈夫なのですが)
内蔵プルアップに対応しているようなので
pinMode(ピン番号, INPUT_PULLUP)
に書き換えて
GPIO→SW→GND
のシンプルな配線だけで off=High on=Low になりますよ〜
コメントありがとうございます。
いわゆるアクティブローという配線方式ですね.仰る通り,そちらの方が絶対に安全で一般的な配線だと思います.上記回路では直感的なHigh = Onで表現しようと思いましたが,スイッチとGPIOの間に抵抗を入れるべきでしたm(__)m