スマホとM5stickCを使って外出先から家のエアコンをリモコン起動する#1
環境・目標
準備物
- M5stickC
- M5StackIRユニット(GROVE端子使用)1
ENV HAT(今は不要。後に部屋の温度もモニターできるようにする計画)- パソコン(win10home)
- arduinoIDE(ver1.8.12)
- Blynk アプリ
方法
M5stickCのセットアップ
arduinoIDEを使用します。
以下写真のような接続構成になっています。
IR UNITはGROVE部に接続。
現リモコンの赤外線信号の解析
IRremoteESP8266モジュールをインストール。その中にあるのIRrecvDumpV2(スケッチ例)を使用。
受光モジュールのGPIO端子番号を33に変更(GROVEコネクタのINPUT端子はM5stickCの場合no.33です)。
受信したIR信号の解析にトライしましたが、結局断念。2 リモコン学習時の受信したRAWデータをそのまま送信する方法にする。
スマホの赤外線信号の解析
スマホ(Huawei製)にスマートリモコンというアプリがあり、それが出す信号を学習してM5StickCから出すことにした。
どうやら東芝エアコン用には複数のパターンがあるらしく、アプリ設定中に1回目に出てきたパターンではウチのエアコンは反応せず、2度目のパターンで反応してくれました。そのパターンをIRrecvDumpV2で再びRAWデータを取得、そのRAWデータをm5stickCから送信すると、ようやくウチのエアコンはONもOFFも反応してくれました。(ただしm5stickCの信号による冷房起動で涼しい風が出ることは未確認)
Blynkのセットアップ
スマホから家にあるM5StickCの操作にはBlynkアプリを使用。アプリのインストールとユーザー登録を完了させる。
今回はBLEではなくwifiによる接続。
とりあえずボタン1個だけ準備し(V0)、それをリモコンの冷房起動(ON)さえできればよしとする。
ユーザー登録時にメールで送付されてくるキー(Auth Token)を控えておく。
こちらのサイトも参考にさせていただいた。
ArduinoIDEにて設定
ソースコードはこちら。
ArduinoIDE ver.1.8.12使用。
ライブラリはBlynkをインストールしておく。
10行目にBlynkから送付されてきたAuth Tokenを記入。
11~12行目は家のwifiのSSIDとパスワード情報を記入。
リモコン起動時のRAW信号はac_power_on に保存。
動作確認
スマホのwifiをOFFした状態で、Blynkのボタン操作によってエアコンが起動できた。
ただしIR UNITの反応はエアコンから2mくらいまでが限界。それより長くするためにはIrLedの電流を増やす必要あり。
次へのステップ
- スマホからの操作で、HATセンサを使って家の温度・湿度などの情報をスマホに表示する。
- LINEのbotへのメッセージにて家のエアコン の操作と、温度等の情報を表示する。
- エアコンへのコマンド受付音をM5StickCで判別して、エアコン起動・失敗確認をして結果をスマホに表示する。
補足
-
GROVEのIR-UNITを準備した理由: m5stickC内蔵のIRトランスミッタはHAT装着時に隠れてしまうこと、現在のリモコン信号の解析のために受信モジュールが必要であったため。↩
-
シリアルモニターで簡単に信号は拾えましたが、信号体系はUNKNOWNと表示。冷房起動(ON)側はコードやコード長は安定していましたが、停止(OFF)側はビット長やコードもリモコンのボタンを押すたびに変わるという状況であり、NECフォーマットではないと思われる。またAEHAフォーマットにも合わないところがあり、どういうフォーマットになっているのか不明。冷房起動(ON)側はRAWデータの直送信でONは確認できましたが、停止(OFF)側は操作できず。RAW信号の送信にはこのサイトのスケッチをほぼそのまま使用、ただし数点変更必要。(1)送信LEDの端子番号: kIrLed: 9 –> 32 (2)ヘッダファイル変更 <IRremote.h> –> <IRremoteESP8266.h> (3)ヘッダファイル追加 <IRsend.h> ( (2),(3)はコンパイルエラー ‘SEND_PIN’ was not declared in this scope の対策。
ライブラリ中のIRremote.hの最後の部分に"#elif defined(SEND_PIN)“を追加も実施。参考 )(4)RAWデータの変数宣言 unsinged int –> uint16_t (これはコンパイルエラーno matching function for call to ‘IRsend::sendRaw の対策。参考 )↩