UIFlowと平行してArduinoIDEでのプログラム開発を始めました。(IR制御の情報がUIFlowではほとんど無かったので…)
で、環境準備でいきなりはまってしまいました。
結論だけ書きますが、以下のサイト情報で解決しました。macOS12.3からPython2が削除されたため、だそうです。Python2は実行時「python」で、Python3は「python3」と指定して実行しますが、M5Stack用のコンパイルで「python」で実行しようしていますが対象がないのでエラーになっているようです。
ArduiinoIDEを使うと、ESP32で赤外線通信ができるライブラリ「IRremoteESP8266」で受信も送信も簡単にできます。
早速サンプルを参考にプログラミング、「テレビを確実に消す」をやってみました。
テレビの電源ボタンは1個しかなく、押すと「ON」「OFF」を交互に切り替えます。つまり、「電源OFF」ボタンはなく、テレビの状態によって変わってきます。(このようなボタンは「トグルボタン」といいます。)
人間が操作する時は問題ありませんが、IoTとして操作するには困ります。「設定した時間になったらテレビを消す」ということをしたくても、トグルボタンでは逆にONにしてしまうこともあるわけです。
調べたら「隠しコマンドとして、電源ON・OFFそれぞれの信号がテレビには設定されている」らしいのですが、探せませんでした。
そこでもう一つの方法、「電源ボタンの2回押し」を使っていきます。
テレビが消えている状態で電源ボタンを押すとテレビに電源が入ります。多分、今のテレビは電源が入った後、パソコンと同じように様々な設定を行う「起動処理」をしているため、実際に画面が出るまで時間がかかります。この画面が出るまでの間は電源ボタンを続けて押しても受け付けません。そのため、電源ボタンを続けて2回押しても消えることはありません。
それに対して、テレビが点いている状態で電源ボタンを押すとすぐにテレビは消えます。そのため、電源ボタンを続けて押すと、テレビはその信号を受け付けて電源が再度入ります。
これをまとめると、「電源ボタンを2回続けて押す」と、
- テレビが消えた状態 → テレビは点く
- テレビが点いている状態→テレビは一度消えてすぐに再度点く
つまり、確実にテレビは点きます。この状態で電源ボタンを押せばテレビは確実に消えます。
ただし、テレビが完全に起動しないと2回目と同じように無視されてしまいます。何回か時間を変えて試した結果、
1回目→(1秒待つ)→2回目→(8秒待つ)→3回目
で上手くいきました。
M5Stackの下にある3つのボタンのうち、ボタンB(真ん中のボタン)を押すとテレビが消えます。
ついでに、ボタンAでM5Stack自体の電源OFF、ボタンCでテレビの電源確実にON処理をしています。
この方法では、テレビが消えている時に実行するとテレビが一度点いてしまいます。もう少し考えた方がいいですね。