ESP32をスマホカメラのリモコンシャッターにする【PlatformIO】

タイトル

ESP32を搭載した小型マイコンATOM Matrixをスマートフォンのカメラのリモコンにします。ESP32からボリュームダウンキーを送りでカメラのシャッターやズームができるようにします。
前回の、PlatformIOでESP32のプログラムを作る環境を整えました。
今回はその続きでESP32 BLE Keyboardのサンプルプログラムを書き換えてATOM Matrixのボタンを押すとボリュームアップキーを送信するプログラムを作ります。
ATOM Matrixのライブラリを使ってボタンの状態を読み取りLEDを光らせます。
専用ライブラリになるのでプログラムに互換性が無くなります。Arduinoの汎用的なプログラムでも同じ事ができますが検索すればいくらでも情報はあるでしょうからここではやりません。専用ライブラリと言っても難しいコマンドではないので簡単に書き換えることができると思います。

M5Atomライブラリ

m5stack/M5Atom
ATOM Library
ATOM Matrix and ATOM Lite are ESP32 development board with a size of only 24 * 24mm.It provides more GPIO for user customization which is very suitable for embedded smart home devices and in making smart toys. 

ライブラリの初期設定

初期化はbeginメソッドで行います。引数は3つあります。
void begin(bool SerialEnable, bool I2CEnable, bool DisplayEnable);
Serialはデバッグのために使ういます。I2Cは今回使いません。LEDを光らせたいのでDisplayを使います。ですから、
M5.begin(true, false, true);
をsetup()の先頭に書きます。
beginメソッド内でSerialクラスの初期化もされます。Serialで通信速度を指定したい場合はM5.begin()の後に行う必要があるでしょう。

ボタンの読み取り

ボタンが押されたかを読み取るにはBbtnメンバークラスを使います。Btnメンバークラスの状態はupdateメソッドで更新されます。つまり最新のボタンの状態を知りたければupdateメソッドの後にBtnメンバークラスを使います。
loop()の先頭に
M5.update();
と書きます。
ATOM Matrixにはひとつの押しボタンスイッチがあります。その状態はBtnメンバークラスでわかります。ちなみに複数のスイッチがある他のマイコン用ライブラリではBtnA,BtnBなどもあるようです。
Btnメンバークラスの説明はこちらにあります。
ボタンが押されているかどうかならばreadメソッドでわかります。単純なボタンの状態だけではなく、押し続けられているのかとか、押し続けていても一度だけ押されたと認識するとか、何種類かのメソッド・プロパティがあります。
今回はisPressedを使います。

内部の処理はdigitalRead()でGPIOを読み、ソフトウエア的に押されている時間を求めてメソッドの戻り値を決めているようです。ですからdigitalRead()を使ってプログラムを書けば汎用性が上がります。

LEDマトリクスを光らす

ATOM Matrixには25個のLEDが5x5のマトリクス状に配置されています。そのLEDを光らせてみます。LEDを扱うメンバークラスはdisです。
disメンバークラスの説明はこちらにあります。
この説明のサンプルコードを見ると一部間違えがあるようです。Lcdメンバークラスを使った例がありますが、M5AtomにLcdメンバークラスはありません。LCDパネルを搭載したM5Stackなどの説明文をコピペして修正を忘れていると思われます。こういうのはよくある間違えですが初心者の方は混乱してしまいますよね。"dis"メンバークラスの名前も本当は"Dis"とdが大文字になるはずだったんじゃないか?と思ってしまいます。

今回は難しい光らせ方はしません。ただ光らせるだけにします。簡単な命令を探すとdrawpixメソッドとfillpixメソッドがありました。drawpixメソッドは座標を指定して一つのLEDを光らすことができそうです。fillpixメソッドは全てのLEDを同じ色に光らせるようです。今回はfillpixメソッドを使います。
LEDを使う初期化はM5.updateで行われています。

加速度ジャイロセンサー

今回は使いませんが加速度センサーとジャイロセンサーが搭載されています。IMUメンバークラスで扱えます。説明ページはこちら。
プログラムは紹介していませんがビデオ内では加速度センサーを使って傾きを検知しボリュームのアップとダウンを切り替えている映像があります。

プログラム

ビデオ内でのプログラムは次のようになりました。
/**
 * This example turns the ESP32 into a Bluetooth LE keyboard that writes the words, presses Enter, presses a media key and then Ctrl+Alt+Delete
 */
#include <M5Atom.h>
#include <BleKeyboard.h>

BleKeyboard bleKeyboard;

void setup() {
  M5.begin(true, false, true);
  Serial.begin(115200);
  Serial.println("Starting BLE work!");
  bleKeyboard.begin();
  M5.dis.fillpix(0x800080); 
}

void loop() {
  M5.update();    //You need to add m5.update () to read the state of the key, see System for details
  if (M5.Btn.isPressed()) {    //If the button is pressed
    Serial.println("Button is pressed.");
    if(bleKeyboard.isConnected()) {
      Serial.println("Sending VOLUME_UP media key...");
      bleKeyboard.write(KEY_MEDIA_VOLUME_UP);
    }
  }
  delay(20);
}

マイコンボード



ビデオ




コメント

最近のコメント

Threaded Recent Comments will be here.