githubリポジトリ
はじめに
デレステPにとってスクショは非常に重要な作業のひとつです。新曲が出たらMVを解放して、推しに踊ってもらってスクショを録りまくります。
Androidではボリューム下+電源でスクショを撮ることができます。ですがスマホのハードウェアキーは経年劣化で破損しやすい箇所で、電源ボタンの寿命すなわちスマホの寿命なのです。デレステPは推しのMVでは1曲に何十回もスクショを撮るので、スマホの寿命を削って推しの姿を記録することになります。スクショでスマホの寿命を縮めたくはありません。
キーボードを使うとPrintScreenキーでスクショを撮ることができます。有線だとこれまた破損しやすいUSB端子を傷めることになりますが、Bluetoothキーボードだとハードウェアを傷めることなくスクショを撮ることができます。
自分はBluetoothキーボードをつないでいたのですが、最近仕事で使っているので、スクショのためにわざわざキーボードを引っ張り出してくるのは手間になりました。だからといってスクショのためだけにBluetoothキーボードをもう1台買いたくはありません。
M5AtomシリーズはBluetoothとボタンを1つ積んでいるので、「1つのキーしかないBluetooth HID デバイス化」することができます。なので今回は転がっていたM5Atom Liteを「Bluetoothボタン」化することにしました。
BLEKeyBoardライブラリ
Arduinoには標準でBluetoothを扱う機能があります。ですがサーバを作ったりコールバックを設定しないといけなかったりとかなり複雑です。
そこでBluetooth HIDデバイスを扱うためのライブラリが用意されています。
Arduinoには有線でハードウェアキーボードを扱うためのkeyboardというライブラリがあり、blekeyboardを使うとkeyboardとほとんど同じようにBluetoothキーボードを使うことができます。
インストールするには、githubからzipをダウンロードしてきます。Arduino IDEには「zipファイルからライブラリをインストールする」という機能があるので、それを使ってインストールします。
HIDデバイスでのPrintScreenの扱い
ここがわからなくて苦労しました。
「PrintScreenを押す」には、0xCEを送ります。0x2cや0x46、0x78などの情報もありましたが、0xCEだとなぜうまくいくのかはよくわかりません。下のサイトによると「F12の次のキーがPrintScreenのはずだが、ArduinoだとF12は205(=0xCD)なので、PrintScreenはその次の0xCE」らしいです。
動作の様子
こんな感じです。
これでスクショ撮り放題や!!! pic.twitter.com/Z5D4Lmcol9
— 青ポス (@Bluepost125) October 10, 2020
ボタンを押すとちゃんとスクリーンショットを保存することができます。
感想、課題など
- iOSだと、そもそもPrintScreenを押してもスクショが撮れないので、ペアリングはできますが動作しません。
- M5Atomだとバッテリーがないので不便です。OTGでスマホから電源を取ることもできますがそれでは元の木阿弥です。
- ちょっとソースをいじればほぼ同じことができるので、M5StickCのほうがいいと思います。
→下記続編で作りました。 - M5Atom専用バッテリーもあります。https://www.marutsu.co.jp/pc/i/1634661/
- ちょっとソースをいじればほぼ同じことができるので、M5StickCのほうがいいと思います。
- やっぱりハードウェアキーはめちゃくちゃはかどりますね。
続編
参考
- ESP32でキーボードショートカットを作ってしまおう
https://qiita.com/poruruba/items/eff3fedb1d4a63cbe08d - Arduino Leonardo(Pro Micro)のHID(キーボード)機能を使う(ショートカットキー実行,コマンド実行)
https://qiita.com/MergeCells/items/17bdc1c1fb35949195b5