3年ほど前にM5Burnerにアップロードしたものを更新。あらたにPlusとPlus2にも対応させた。M5Unifiedの勉強もかねて。
このTVリモコンは、M5StickCシリーズ本体のボタンを使って音量とチャンネルをコントロールする。機能はシンプルだ。東芝、Panasonic、SONY、日立、SHARP。それぞれのIR(赤外線)コードを全部送信するという雑な仕様。Aボタンで音量を+、本体左に傾けてAボタンを押すと音量を-。Bボタンは同様にチャンネルを+/-する。また左にかたむけてBボタンを押すと入力切り替えとなる。
M5StickC(以下無印)とM5StickC Plus(以下Plus)、M5StickC Plus2(以下Plus2)は、3機種とも微妙に仕様が違う。特にPlus2の違いが大きい。IRピンとか、IR LEDの位置が左側面にあったり(無印とPlusは縦にしたときの頭の方にある)。加速度や角速度などの複数のセンサーを搭載したIMUは無印の途中で変わっている。手元にあるのはSH200Qだが、後期モデルはMPU6886だそうだ。
傾きはこのIMUで拾っているのだけど、Plus/Plus2はボタンを押したタイミングで取得すればよかった。しかし、無印はそれだとうまくいかない。定期的に取得しておかないと、ボタンを押したタイミングで正しい値が返ってこないのだ(3年前に作った時にその仕様にしてたけど忘れてた)。まずはバッテリ持ちも考えて500ms間隔で取得するってのを試したけど、それではだめ。最終的に100ms間隔で取得することで思ったとおりの動きになった。なんかもっと違う方法があるはずだけど思いつかず。結果として30分ももたないけど、まあしょうがない。

M5Unifiedでは機種を判別することも可能だし、IMUのタイプも判別可能だ。それに従い機能をひとつひとつチェックしながら実装していく。
また、新機能としてTVの電源のコントロールも追加した。M5StickCの電源ボタンの短押しで送信する。電源ボタンが使えるのを知ったのは昨年だったろうか。これがPlusまでとPlus2以降でまた違う。それはここに書いたとおり。
画面サイズ(解像度)は無印とPlus/Plus2で違う。今回は表示テキストの位置などを変更せずそのままとした。「この機能なら画面見ないでしょ」というテキトーな方針で。
機種による違いといえば、赤いLEDのピンと役割が相当違う。無印とPlusはIR LEDと赤いLEDは別のピンを使用するのだが、Plus2では同じなのだ。最初のTVリモコンの仕様では、リモコンのIR信号を送る際にわかりやすいギミックとして赤いLEDを点灯させていたのだけど、Plus2で点灯させてたらIR信号が正しく送れない。同じピンなのだからそりゃそうだ。Plus2でIR送信したら勝手に赤いLEDも点灯(というか点滅)するので、見た目的にはあまり変わらない。処理は分岐させているけど。
プログラムの詳細はGitHubを参照してほしい。説明を日本語で細かく入れてあるので、だいたいわかるかと思う。ほとんどはAIのClaudeに書いてもらった。また、M5 Stack公式のチャットにも助けてもらった。もちろん、Lang-shipの記事も参考にさせていただいた(SH200Q、MPU6886)。いつもありがとうございます。
開発環境を整えたり、コンパイルしたりするのは面倒。すぐ試したい!という方は、M5Burnerをどうぞ。すぐに試せます。画面左側の機種選択でM5StickCを選び、検索欄に「tv」と入力すれば見つかるはず。なにかありましたがコメントなどでお願いします。
コメント