06.ATOM Liteでスマホの写真シャッター
06.ATOM Liteでスマホの写真シャッター
Atomのボタンを押すと、Bluetoothでスマホのシャッターが切れます。ただし、音量upボタンで写真のシャッターが切れるスマホが対象です。また、私の携帯の標準カメラでは動作しなかったので、Play ストアから"Open Camera" (Mark Harman) の無料カメラアプリをインストールしました。
https://wak-tech.com/archives/1796 を参考にしています。
ESP32 BLEキーボードライブラリ
ESP32-BLE-Keyboardhttps://github.com/T-vK/ESP32-BLE-Keyboard
ESP32をBluetoothキーボードとして、テキスト送信や個々のキーを押す等の機能があります。
・print: 文字列を入力
・write: 指定キーを押してすぐに離す
・press: 指定キーを押す (release するまで押したままにする)
・release: 指定キーを離す
・releaseAll: すべてのキーを離す
キーには、
・KEY_MEDIA_VOLUME_UP: 音量up
・KEY_MEDIA_VOLUME_DOWN: 音量down
等があります。
インストール
https://github.com/T-vK/ESP32-BLE-Keyboard/archive/refs/heads/master.zipをダウンロードし、ディスクトップに置きます。
Arduino-IDE > スケッチ > ライブラリをインクルード > .ZIP形式のライブラリをインストール... > 先程のESP32-BLE-Keyboard-master.zipを指定 > 開く
でインストールできます。
操作方法
1.Atomを起動2.AtomのLEDが緑色なら4へ、赤色なら3へ
3.スマホ > 設定 > Bluetooth > 利用可能なデバイスの"BLE-Shutter"を指定 > ペアリング
(Atomを再起動したら、スマホで1度ペアリングを解除し、再ペアリングが必要な場合もあります。)
4.AtomのLEDが赤色から緑色でBLE Keyboardに接続完
5.スマホ > カメラを開く
6.Atomのボタンを押す(一瞬赤色)
7.スマホのシャッターが切れます
・LEDが緑色は、BLE-Keyboardに接続できた時
・起動してLEDが赤色は、BLE-Keyboardにまだ接続できていない時
・ボタンを押してLEDが赤色は、音量upキーを送信した時
です。
解説
ESP32 BLE Keyboard library (ESP32-BLE-Keyboard)を使用することによって、ESP32をBluetoothキーボードにすることができます。私のスマホは音量ボタンを押すことでシャッターが切れるようになっていますのでそれを利用します。しかし、BLEには対応していないようなので、別アプリをダウンロードしました。BLE Keyboardから音量アップキー、つまり"KEY_MEDIA_VOLUME_UP"を送信してあげれば良いわけです。このキーをボタンに割り当てているため、リモートシャッターとして使えます。消費は、72mA, 360mWでした。
スケッチ
// スマホのBluetoothシャッター Atom Lite
// https://wak-tech.com/archives/1796 を参考
#include <M5Atom.h> // ATOMを使用
#include <BleKeyboard.h> // BLEキーボードを使用
BleKeyboard bleKeyboard("BLE-Shutter"); // Bluetooth名を設定
bool Connected = false; // 接続状態変数
void setup() {
M5.begin(true, false, true); // 初期化(Serial,I2C?,Display)
Serial.begin(115200); // Upload Speed=15200にする
bleKeyboard.begin(); // Bluetoothキーボード開始
Serial.println("start"); // 表示
}
void loop() {
M5.update(); // ボタンの状態を更新
if (bleKeyboard.isConnected()) { // Bluetoothキーボードが接続されていれば
Serial.println("Connect"); // 表示
if (Connected == false) { // 接続変数=非接続ならば
Connected = true; // 接続変数=接続にする
Serial.println("Disconnect->Connect"); // 表示
M5.dis.drawpix(0, 0x008000); // LED緑色
} //
if (M5.Btn.wasPressed()) { // ボタンが押されていたら1回だけtrue,それ以外はfalse
Serial.println("Btn push"); // 表示
M5.dis.drawpix(0, 0xFF0000); // LED赤色
bleKeyboard.write(KEY_MEDIA_VOLUME_UP); // 音量upキーを送信
delay(200); // 赤色点灯時間
M5.dis.drawpix(0, 0x008000); // LED緑色
} //
} else { // Bluetoothキーボードが接続されていなければ
Serial.println("Disconnect"); // 表示
M5.dis.drawpix(0, 0xFF0000); // LED赤色
if (Connected) { // 接続変数=接続ならば
Connected = false; // 接続変数=非接続にする
Serial.println("Connect->Disconnect"); // 表示
} //
} //
delay(200); // 0.2秒待つ
}
* flash memory(1.3Mbyte)のうち、スケッチが83%使用。RAM(327kbyte)のうち、global変数が12%使用、local変数で288kbyte使用可能。(1000byte=1kbyteで計算)