スマホとM5stickCを使って外出先から家のエアコンをリモコン起動する#1

環境・目標

  • M5stickCを使用。
  • エアコンは東芝製(RAS-402PDR)
  • 外出先からスマホを操作して家のエアコンを起動することができるようにする。
  • 基本的に以下のサイトの情報を参考にさせていただいた。

elchika.com

準備物

  • M5stickC
  • M5StackIRユニット(GROVE端子使用)1
  • ENV HAT(今は不要。後に部屋の温度もモニターできるようにする計画)
  • パソコン(win10home)
  • arduinoIDE(ver1.8.12)
  • Blynk アプリ

方法

M5stickCのセットアップ

arduinoIDEを使用します。
以下写真のような接続構成になっています。
IR UNITはGROVE部に接続。

f:id:ellechien:20200602174714j:plain:w150
M5StickC と IR UNIT と ENV HAT

現リモコンの赤外線信号の解析

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)を控えておく。
こちらのサイトも参考にさせていただいた。

ogimotokin.hatenablog.com

ArduinoIDEにて設定

ソースコードこちら。 ArduinoIDE ver.1.8.12使用。
ライブラリはBlynkをインストールしておく。
10行目にBlynkから送付されてきたAuth Tokenを記入。
11~12行目は家のwifiSSIDとパスワード情報を記入。 リモコン起動時のRAW信号はac_power_on に保存。

動作確認

スマホwifiをOFFした状態で、Blynkのボタン操作によってエアコンが起動できた。
ただしIR UNITの反応はエアコンから2mくらいまでが限界。それより長くするためにはIrLedの電流を増やす必要あり。

次へのステップ

  • スマホからの操作で、HATセンサを使って家の温度・湿度などの情報をスマホに表示する。
  • LINEのbotへのメッセージにて家のエアコン の操作と、温度等の情報を表示する。
  • エアコンへのコマンド受付音をM5StickCで判別して、エアコン起動・失敗確認をして結果をスマホに表示する。

補足


  1. GROVEのIR-UNITを準備した理由: m5stickC内蔵のIRトランスミッタはHAT装着時に隠れてしまうこと、現在のリモコン信号の解析のために受信モジュールが必要であったため。

  2. シリアルモニターで簡単に信号は拾えましたが、信号体系は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 の対策。参考 )