以前、ダイキンのエアコン(リモコン型番がARC468A3)ために、ESP32によるスマート赤外線リモコンを作りました。この時は、IRremoteESP8266ライブラリのダイキン用クラスを使いました。今回は、このダイキン用クラスを作り直して、プログラムを簡単にしました。
前回のあらすじ
前回、ARC468A3というリモコンを使ったダイキンエアコンをコントロールしました。こんなリモコンです。
その記事がこちらです。
今回はこれの改訂版です。おさらいをしておくと、ハードウェア構成は以下です。
ハードウェアはDIYしたプリント基板上にESP32で組みました。
ESP32の上には、Arduino IDEを使って、MQTTベースで赤外線リモコン信号を送出するプログラムを作りました。その際に、IRremoteESP8266と言うライブラリを使いました。
このライブラリの中に、ダイキンエアコン用クラスIRDaikin2があったのでそれを利用しました。しかしながら、日本のダイキンエアコンとは仕様が違うのか、クラスの機能(メソッド)はほとんど利用してませんでした。
そこで、このリモコンを使うダイキンエアコンに合わせたクラスを作り、ESP32のプログラムを書き換えました。
ダイキンエアコン用クラス
作成したクラスは、ir_Daikin468です。リモコンの型番の数字をつけました。以下に置いておきました。Arduinoのサンプルスケッチも置いてあります。
このクラスは、ダイキンエアコン用クラスIRDaikin2を元にして作りました。リモコンARC468A3の赤外線パターンと同じビット列を送出するように変更してあります。また、HomeKitから使用することを前提にしたので、HomeKitのHeater Cooler Accessoryとして必要とする機能のみに絞って実装しました。主なメソッドは以下です。
- send() 設定に基づき赤外線信号を送出します
- setPower() On/Offを設定します
- getPower() 設定されたOn/Offを返します
- setTemp() 温度を設定します
- getTemp() 設定された温度を返します
- setFan() 風量を設定します
- getFan() 設定された風量を返します
- setMode() 運転モードを設定します
- getMode() 設定された運転モードを返します
- setSwingVertical() 垂直方向の風向を設定します
- getSwingVertical() 設定された垂直方向の風向を返します
- setSwingHorizontal() 水平方向の風向を設定します
- getSwingHorizontal() 設定された水平方向の風向を返します
ここにあるIRremoteESP8266.cppとIRremoteESP8266.hを、IRremoteESP8266ライブラリのsrcディレクトリにコピーすればArduinoのスケッチから使えます。ライブラリの場所は、macOSの場合、デフォルトで、
~/Documents/Arduino/libraries/IRremoteESP8266/src/
です。
ESP32のプログラム
プログラム例を以下に置いておきました。
WiFiのSSID, パスワード、MQTTブローカのアドレスなどは、環境に合わせて設定してください。
ArduinoOTAでの更新にも対応してます。パスワードのhashも必要ならば設定してください。こちらをご覧ください。
Homebridgeの設定
Homebridgeでは、Mqttthingプラグインを使います。これにより、Heater Coolerアクセサリを実装します。Homebridgeの設定で、
{
"type": "heaterCooler",
"name": "Living Aircon",
"url": "mqtt://localhost:1883",
"topics": {
"setActive": "mqttthing/irLiving/set/Active",
"setCoolingThresholdTemperature": "mqttthing/irLiving/set/CoolingThresholdTemperature",
"getCurrentTemperature": "mqttthing/irLiving/get$.temperature",
"setHeatingThresholdTemperature": "mqttthing/irLiving/set/HeatingThresholdTemperature",
"setRotationSpeed": "mqttthing/Irving/set/RotationSpeed",
"setSwingMode": "mqttthing/irLiving/set/SwingMode",
"setTargetHeaterCoolerState": "mqttthing/irLiving/set/TargetHeaterCoolerState"
},
"restrictHeaterCoolerState": [
1,
2
],
"accessory": "mqttthing"
},
のように設定しました。
HomeKitから使う
この結果、iPhoneやMacのホームには、こんな形で現れます。DHT20が測定した室温も表示されます。室温部分をクリックするとエアコンがon/offします。
余白をクリックすると、On/off、温度調整、冷暖房切り替えを行うウィンドウが開きます。
また、このウィンドウの歯車アイコンをクリックすると、「ファンの速さ」が0から100までのスライダで調節でき、さらに「首振り」をスイッチでon/offできます。ファンの速さは、数値が低い方から自動・しずか・1・2・3・4・5・6・7(最強) にマッピングされてます。また首振りは、垂直方向のスウィングに割り当ててあります。
まとめ
ESP32で赤外線リモコン信号を扱うライブラリIRremoteESP8266に、手元のダイキンエアコンに合わせたクラスを作成しました。リモコン型番がARC468A3を使うダイキンエアコンです。これを用いて、HomeKitからエアコン制御するプログラムをESP32に作成しました。
もともとのクラスIRDaikin2を使うと、赤外線リモコン信号の一部のビットが、実際のリモコンと違ってしまいます。前回は信号の生データを書き換えて対応してましたが、今回はクラスを書き換えて一致させました。ただ、差異が生じるのは用途不明のビットで、対応しなくても特に不具合はありません。きっちりと合わせられると気持ちが良いという程度の効果です。
用途不明のビットは、タイマー機能や自動清掃機能などの高機能モデルで使われるようです。なので市販のエアコン用汎用リモコンや、スマートリモコンを使うとこれらの設定がリセットされることも報告されてます。市販製品が全てのエアコン製品に対応することが不可能でも、DIYなら使用中のエアコンにだけは完全対応可能かと思います。
コメント