多人数でWeb会議やっていると、変な声が入らないようにミュートしていることが多くなります。
すると、いざ会心のコメントを発言したとき限ってにミュート解除し忘れてるんですよね。
さらにミュートしたつもりでくしゃみしたら実はまる聞こえだったことも。。。
そんな悲劇を繰り返さないために、素早く押せる物理的な専用のMUTEボタンと、ぱっと見で確認できる「 ON AIR 」 「 MUTED...」 表示を作ってみました。
出来上がり
Zoomでミーティング中。音声が出ている時は赤色バックで「ON AIR」。
M5と書かれたところがボタンになっていて、押すとミュートのショートカットキーを送って、表示を「Muted...」に切替。
ZoomだけじゃなくてWebExでも利用できるようにモード切り替え機能も付けました。
活用した材料
利用したのはM5StickC。$10と破格なのにディスプレイもボタンも付いてるし、バッテリーも内臓。ESP32のBLEを利用してHIDにできると聞いていたのでやってみました。ハードウェアの工作なしにできちゃうのがお手軽。
ライブラリは公式のM5StickCを活用。ボタンのDebounceや画面に文字を中央揃えで表示するなど、M5StickCの豊富な機能を手軽に使えるように整備してくれているのは嬉しい。
さらにESP32-BLE-Keyboardは、ESP32のBLEでキーボードとして使うのを便利にしてくれる。ありがたく利用させていただきます。
ハマりどころ
ライブラリも充実しているから楽勝だろうと思ったのですが、いくつかハマりどころがありました。主にMacOS Catalinaがらみですが。。。
UIFlow環境からArduino環境への切り換えにfirmwareの書き変えは特に不要
M5Stack社は初心者の教育用途に力を入れているようで、最近はUIFlowという環境が推奨されています。
私は以前少し触ってみたときに、FirmwareのバージョンとWeb版やローカル版のIDE環境のバージョンとが合わなかったりと、あまり完成度が高くない印象で終わってしまいました。
今回は、その時のUIFlowのFirmwareを書き込んだままのM5StickCを引き出しから出してきました。
さて、Arduino環境へ切り替えるにはどのFirmware(bootloader?)を書き込めばいいのか?
いろいろググったのですが、明確な記述がみつからず。。。
結論を言うとUIFlow用のFirmwareのままで大丈夫。
ただし私がその結論になかなか辿り着けなかったのは、次の問題にハマっていたから。。。
MacOS Catalina での Arduinoスケッチ書き込み時に、GPIO0を強制的にGNDにしないといけない
ESP32に書き込みをする際には、GPIO0をGNDに繋いだ状態でリセットして書き込みモードにするなどのお作法が必要です。各種EPS32開発ボードはこの辺を自動でやってくれるように工夫されています。
M5StickCもSiLabsの(?)シリアル変換チップを上手く使ってやるようなのですが、どうやらMacOS Catalinaではこの仕組みが動かないらしい。
幸いGPIO0は拡張ソケットに出て来ているので、強制的にGNDに繋いであげればArduinoスケッチの書き込みに成功します。
MacOS Catalina で BLE再接続ができない。Authenticationの方法を変更して対処
キーボードとして使うには”Bluetooth環境設定”で接続する必要があります。一度接続して上手く動いたと安心していたのですが、M5StickCのスケッチを修正して再接続しようとしたら上手く繋がらなくなってしまいました。
ESP32-BLE-KeyboardのIssueに同様の現象があがっており、そこにあった対処法でなんとかなりました。
PR出しておいたけど、どうなるかなぁ。
コード
コードはGitHubに上げておきました。
問題点
所詮ショートカットキーを送っているだけなので、実際にミュートになったかどうかのフィードバックを得ることはできません。
Muteボタンを押したときにZoomアプリがバックグランドになってたりするとダメです。
Zoomアプリをアクティブにするシステムショートカットを割り当てて、それも必ず送り込むようにすると良いのかも??