はじめに
Panasonicの天井照明の赤外線信号を格安学習リモコンに学習させました。
親信号は純正リモコンではなく、ネットで拾ってきた信号コードをM5stickCで出力したものです。
ハマりポイントは、M5stickCの出力の仕方と格安学習リモコンの学習方法です。
結論
- M5stickCの出力関数の引数には、ビット数を40ではなく、デフォルトの48にする。
スケッチは以下参照。 - 学習リモコンの学習方法
- 親信号を出してから、LED点滅パターンが速い点滅からゆっくりの点滅に変わるまで3秒ほど待ってから、次の操作を行うこと。
- m5stickCのIR remoteデバイスと学習リモコンの間は0.5~1cm程度まで近づける。
背景
- Amazonで購入した格安学習リモコンを純正リモコンで学習させ、通常ONと常夜灯の2ボタンのみを使用していた。
消灯は壁スイッチで実施。 - 今回格安リモコンの電池が切れたので、電池交換だけで行けると思ったら、再学習が必要となった。
厳密に言うと、使用していた格安リモコンの動作も異常になったので、新しく格安リモコンを買い直した。 - 純正リモコンは紛失しており、親信号には使えない。
- M5stickC+IRremoteデバイスを持っている。
- ネットでリモコンの制御信号を調べてM5stickCで出力したものでリモコン学習させたいと思って調べた。
ツール類
- パソコン: win10機
- arduino ide
- M5stickC
- grove IR REMOTE デバイス
M5stickC + IRremoteデバイス
-
arduino ideのインストールおよびセットアップは省略。
-
スケッチ例
- AボタンをCH1の通常点灯に割り当てる。
- BボタンをCH1の常夜灯に割り当てる。
#include <Arduino.h> #include <IRremoteESP8266.h> #include <IRsend.h> #include <M5StickC.h> const uint16_t kIrLed = 32; // IR-REMOTE Unit の OUT IRsend irsend(kIrLed); // Set the GPIO to be used to sending the message. void setup() { M5.begin(); irsend.begin(); #if ESP8266 Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY); #else // ESP8266 Serial.begin(115200, SERIAL_8N1); #endif // ESP8266 } void loop() { M5.update(); if ( M5.BtnA.wasReleased() ) { Serial.println("send an IR signal: A"); // panasonic ceiling light: normal ON / CH1 // irsend.sendPanasonic64(0x344A90B424, kPanasonic40Bits); irsend.sendPanasonic64(0x344A90B424, 48); delay(2000); } if ( M5.BtnB.wasReleased() ) { Serial.println("send an IR signal: B"); // panasonic ceiling light: night on / CH1 // irsend.sendPanasonic64(0x344A9074E4, kPanasonic40Bits); irsend.sendPanasonic64(0x344A9074E4, 48); delay(2000); } }
リモコン信号に関する情報
以下の状況に応じた信号を送る。
githubサイトより抜粋
Protocol : PANASONIC
Code : 0x344A9034A4 (40 Bits)
uint16_t rawData[83] = {3482, 1766, 408, 454, 406, 456, 406, 1336, 406, 1334, 408, 456, 406, 1336, 404, 456, 406, 456, 406, 458, 406, 1336, 406, 454, 406, 456, 408, 1334, 406, 458, 404, 1336, 406, 458, 406, 1336, 404, 456, 410, 454, 406, 1336, 406, 456, 404, 458, 404, 456, 406, 458, 406, 454, 406, 458, 404, 1336, 406, 1334, 406, 458, 406, 1312, 430, 456, 406, 454, 408, 1334, 406, 456, 406, 1336, 408, 454, 406, 456, 406, 1334, 408, 456, 406, 460, 402}; // PANASONIC 344A9034A4
uint32_t address = 0x34;
uint32_t command = 0x4A9034A4;
uint64_t data = 0x344A9034A4;
Only the code is listed below.
送出コード一覧
command | CH1 | CH2 | CH3 |
---|---|---|---|
on | 0x344A90B424 | 0x344A90AC3C | 0x344A90BC2C |
full | 0x344A9034A4 | 0x344A902CBC | 0x344A903CAC |
night | 0x344A9074E4 | 0x344A906CFC | 0x344A907CEC |
high | 0x344A9054C4 | 0x344A904CDC | 0x344A905CCC |
low | 0x344A90D444 | 0x344A90CC5C | 0x344A90DC4C |
off | 0x344A90F464 | 0x344A90EC7C | 0x344A90FC6C |
格安学習リモコン
こちらのリモコンを使用します。
学習方法動画はyoutube。
学習方法は以下の通り。
-
通常使用モードと学習モードの2つがあり、[POWER]と[CH UP]の2つのボタンの同時長押し(3秒ほど)で切り替えることが可能。
-
通常使用モードではLEDは消灯状態だが、学習モードに入ると赤色LEDが速い点滅になる。
-
学習モードの状態で学習させたいボタンを押すと、親信号待ち状態となり、LEDは連続点灯状態(A)になる。
-
上記A状態で親信号を格安リモコン受光・発光部に送出する。
親信号受領に成功すると、LEDは連続点灯状態から遅い点滅になり3秒間継続した後、速い点滅に切り替わる。 -
その次は、次のボタンの学習もできるし、学習モードから退出することも可能。
-
次のボタンの学習は上記3.を実施。
-
学習モードからの退出は、[POWER]と[CH UP]の2つのボタンの同時長押し(3秒ほど)する。
-
学習モードのA状態にて、
- 親信号受領に失敗するとLEDは連続点灯のまま変化しない。
- 約10秒経過すると、自然に通常使用モードに移行する。
ハマり箇所
格安学習リモコンの学習方法
- 学習時には、
- m5stickCのIRデバイスの発光部(トランスミッタ部)と、格安リモコン部の受光部の距離は0.5~1cm程度に近づける。
格安リモコン説明書には2~5cmとあるが、これでは学習が成功しない。
m5stickCの発光量が格安リモコン学習に対して不十分なためか。 - 親信号受領成功後、格安リモコンのLEDは遅い点滅となるが、次に速い点滅になるまでそのまま約3秒間放置して、学習完了させる必要がある。
この間に次の操作をしてしまうと、学習を完了できない。
- m5stickCのIRデバイスの発光部(トランスミッタ部)と、格安リモコン部の受光部の距離は0.5~1cm程度に近づける。
IR信号送出関数の引数
-
こちらのサイトによると、Panasonic製照明への送出ビット数はデフォルトの48ではなく40としなければならないとあるが、私のケースでは48である必要があった。
当初は40ビットで設定しており、40ビットでもm5stickCからPanasonic製照明の直接操作は問題なく反応した。
しかし、格安リモコンへの学習は何度やっても成功しなかった。
格安リモコンの仕様と思われる。
Panasonic照明用の信号は以下のsendPanasonic64関数で送出可能。送出データを第一引数、送出ビット数を第二引数に設定する。irsend.sendPanasonic64(0x344A90B424, 48);