青ポスの部屋

旅と技術とポエムのブログ

M5Atom LiteでBluetoothスクショボタンを作る

githubリポジトリ

github.com

はじめに

デレステ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デバイスを扱うためのライブラリが用意されています。

github.com

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」らしいです。

forum.arduino.cc

動作の様子

こんな感じです。

f:id:bluepost69:20201011180218p:plain

ボタンを押すとちゃんとスクリーンショットを保存することができます。

感想、課題など

  • iOSだと、そもそもPrintScreenを押してもスクショが撮れないので、ペアリングはできますが動作しません。
  • M5Atomだとバッテリーがないので不便です。OTGでスマホから電源を取ることもできますがそれでは元の木阿弥です。
    • ちょっとソースをいじればほぼ同じことができるので、M5StickCのほうがいいと思います。
      →下記続編で作りました。
    • M5Atom専用バッテリーもあります。https://www.marutsu.co.jp/pc/i/1634661/
  • やっぱりハードウェアキーはめちゃくちゃはかどりますね。

続編

bluepost69.hatenablog.com

参考