Androidでカメラを作る ~ その2:物理ボタンの処理

2021年6月23日

さて、いよいよM5StickCボタンを押して写真を撮ります。

M5StickCからスマートフォンへ通信をすることでシャッターを切る訳ですが、bluetoothにしろ、UDPにしろプログラムが大変だなあと考えていたら、とても簡単な方法で実現する記事を見つけました

なるほど、M5StickCbluetoothキーボードに見立てて、音量ボタンを押したことにしてスマートフォンカメラアプリシャッターを切れば良いのです。スマートフォンカメラアプリの多くは音量ボタンでシャッターが切れるように作られているので、汎用性があります

結局、自分でカメラアプリを作る必要性がなくなったわけですが、せっかくカメラアプリを作り始めたので、自分用にカスタマイズしたカメラアプリを作ることにします。

1.M5StickC側のプログラム

上記の「Wak-tech」さんのコードを、ほぼそのまま使わせて頂きました。注意する点として、「ESP32 BLE Keyboard library」を入手する必要があります。以下からライブラリダウンロードして

https://github.com/T-vK/ESP32-BLE-Keyboard

Arduino IDEインストールしてください。

また、参考にしたプログラムは「音量+」のボタンシャッターが割り当てられていますが、今回は「音量ー」のボタンに変更しています。

あとはビルドすればM5StickC側は終了です。

2.Android側のプログラム

    @Override
    public boolean dispatchKeyEvent(KeyEvent event){
        if(event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN){
            if (event.getAction() == KeyEvent.ACTION_UP) {
                takePicture();
            }
        }
        return super.dispatchKeyEvent(event);
    }

Android側のプログラムは、音量ボタンの押されるイベントを検出します。予定していたbluetoothの受信プログラムは必要なくなりました。

送られてくる「音量ー」のキーイベントですが、押した時と離した時の2回分送られてくるので、離した時のイベントを有効にしています。

この方法は簡単ですが欠点もあって、撮影時に音量のポップアップウインドウが出てしまいます。ちょっとかっこ悪いですが、このままでいきます。

3.動作確認

まだ最低限のみの実装です

特に問題なく、M5StickCボタンイベントAndroidカメラアプリで受け取れました。

作成中のカメラアプリですが、まだまだ実装が足りないので、公開は先になります。でも、他のカメラアプリを使っても今回のテストができますので、ぜひやってみてください。

これから先ですが、カメラアプリに自分の必要とする機能を追加していきます。他とはちょっと違ったカメラアプリにするつもりです。