M5ATOM(ESP32)で簡易プレゼンリモコンを作ってみる
ArduinoIDE環境用の ESP32をBLEキーボードにするライブラリ を使ってパワポやpdfでのプレゼンでページ送りをする「簡易プレゼンリモコン」を作成してみました。
作ったもの
今回もデバイスは M5Stack の小型モジュールである M5ATOM Lite を使用しました。
M5ATOM LiteはESP32・フルカラーLED・ボタンが2.5x2.5cmのケースにコンパクトに納められており、オフィシャルストアで$5.95、 スイッチサイエンスで買っても968円とコストパフォーマンスが非常に良いのでお勧めです。
作り方
ESP32 BLE Keyboard libraryの導入
T-vk氏がgithubで公開しているので、ダウンロードしてArduino IDEのLibraryフォルダに解凍します。
ESP32 BLE Keyboard library
examplesに SendKeyStrokes というスケッチがあるので、これを参考に作成しました。
ざっくりした仕様
Amazonでプレゼンリモコンを検索すると大体2500円位しますが、まあページ送りができれば自分としては十分なので、Windows PCでのプレゼンのページ送りと戻しに特化しました。
- M5ATOMのボタンを短押しすると次ページへ送る(右矢印キーを送信)
- M5ATOMのボタンを長押しすると前ページへ戻る(左矢印キーを送信)
- 長押しの時間は変数で持たせる(デバッグしやすいので)
- PCとの接続状態やボタンの操作はM5ATOM Lite上のLEDの色を変えて知らせる
作成したスケッチ
コードは非常にシンプルです。長押し判定はせっかくなのでM5.btn関数を使いました。
ボタンのONを検出したら一定時間待って再度ボタンの状態を確認して判定しています。
**M5.Btn.wasPressed()**関数はキーの状態がOFF->ONに変化した時に1度だけ発生しますので、この関数内で処理することにより押しっぱなしで連続動作することを避けています。
#include "M5Atom.h"
#include <BleKeyboard.h> // https://github.com/T-vK/ESP32-BLE-Keyboard
BleKeyboard bleKeyboard("M5ATOM KB"); //デバイス名
const int longPress_ms = 300; // 長押し判定時間(単位 msec)
void setup() {
// M5.begin(SerialEnable, I2CEnable, DisplayEnable);
M5.begin(true, false, true);
M5.dis.drawpix(0, 0x000000); // LED OFF
//Serial.begin(115200);
Serial.println("Starting BLE work!");
bleKeyboard.begin();
}
void loop() {
M5.update();
if(bleKeyboard.isConnected()){
if(M5.Btn.wasPressed()){
// M5ATOMのボタンが押されたら一定時間待つ
delay(longPress_ms);
if(M5.Btn.read() == true){ // キーが押されたままだったら長押しと判定
M5.dis.drawpix(0, 0x00f0f0); // LED MAGENTA
Serial.println("<-Page Back");
bleKeyboard.write(KEY_LEFT_ARROW);
delay(100);
}else{ // キーがリリースされていたら短押しと判定
M5.dis.drawpix(0, 0xf00000); // LED GREEN
Serial.println("Page Forward->");
bleKeyboard.write(KEY_RIGHT_ARROW);
delay(100);
}
}
M5.dis.drawpix(0, 0x0000f0); // LED BLUE
}else{
M5.dis.drawpix(0, 0x00f000); // LED RED
}
delay(10);
}
まとめ
送信するキーコードを変更すれば、パスワード入力やウインドウ操作等にも使えます。
ESP32 BLE Keyboard libraryのヘッダファイル(BleKeyboard.h)にはキー定義一覧があるので、これを参考にしてください。
Discussion