アフィリエイト広告を利用しています

広告

posted by fanblog

ESP32のリモコンの話

半年ぐらい前に行った作業なのですが、忘備録のために書いておきます。

ESP32にはリモコン解析のライブラリがあります。

ちなみにESP32というのは、WiFi+BT+ LX6(CPU)x2のSOCチップの名前で、以下のような評価ボードが沢山出回っています。

WayinTop ESP32開発ボード Wi-Fi BLEモジュール ESP-WROOM-32実装済み デュアルコア 技適取得済み 2個入り 専用USBケーブル付き

新品価格
¥2,180から
(2024/8/17 00:20時点)



開発ツールも沢山リリースされているので、ちょっとした装置を作りたい場合は、簡単に作れてしまいます。
Raspberry Piのように重いLinuxは動かさないけど、色んなライブラリが揃っており、WiFI+BTも使えるので、IoTなんかに良く使われています。
(一応、Linuxも動くみたいです)

そして、その評価ボードのGPIOにリモコンの受光部の出力を接続すると、リモコン解析機が出来上がりです。

IMG_8256.jpg


Arduinoのライブラリは、 IRremoteESP8266を使います。

そして、赤外線解析ソフトは、IRrecvDumpV3というexamplesディレクトリに入っているものを使います。

○Panasonicの場合
例えば、Panasonicのライトのリモコンの場合、以下のような結果が得られます。

21:05:49.941 -> Protocol : PANASONIC
21:05:49.941 -> Code : 0x344A90F464 (40 Bits)
21:05:49.941 -> uint16_t rawData[83] = {3470, 1732, 434, 430, 434, 430, 434, 1298, 436, 1296, 436, 430, 434, 1298, 434, 430, 436, 430, 434, 430, 434, 1298, 436, 430, 434, 430, 436, 1298, 436, 430, 434, 1298, 436, 430, 434, 1298, 434, 430, 436, 430, 434, 1298, 434, 430, 436, 430, 434, 430, 434, 428, 434, 1298, 440, 1294, 434, 1298, 436, 1298, 436, 430, 432, 1298, 434, 430, 434, 432, 434, 432, 436, 1298, 436, 1298, 434, 430, 436, 428, 434, 1300, 436, 430, 432, 432, 436}; // PANASONIC 344A90F464
21:05:49.984 -> uint32_t address = 0x34;
21:05:49.984 -> uint32_t command = 0x4A90F464;
21:05:49.984 -> uint64_t data =0x344A90F464;


そこで得られた値をこんな感じでsendPanasonic64関数に渡せばリモコンの送信となります。

const uint64_t data=0x344A90F464;
sendPanasonic64( data, kPanasonic40Bits , 2);


○アイリスオーヤマの場合
では、リモコン送信用の関数が用意されていないようなメーカの場合、どうなるのでしょうか?

例えば、私の家でアイリスオーヤマのライトが一つだけあります。
これを解析すると以下のような値が得られます。

21:16:07.962 -> Protocol : EPSON (Repeat)
21:16:07.962 -> Code : 0x7B019A65 (32 Bits)
21:16:07.962 -> uint16_t rawData[271] = {8942, 4426, 584, 530, 582, 1640, 580, 1638, 584, 1638, 584, 1636, 584, 528, 580, 1638, 584, 1638, 582, 528, 582, 530, 582, 526, 584, 528, 582, 530, 584, 526, 584, 528, 584, 1636, 584, 1636, 584, 528, 584, 528, 582, 1638, 582, 1638, 584, 528, 584, 1638, 582, 526, 584, 528, 584, 1636, 584, 1640, 582, 528, 584, 526, 584, 1636, 584, 526, 582, 1640, 582, 41530, 8948, 4428, 584, 528, .............. }; // EPSON (Repeat) 7B019A65
21:16:08.106 -> uint32_t address = 0x80DE;
21:16:08.106 -> uint32_t command = 0x59;
21:16:08.106 -> uint64_t data = 0x7B019A65;



プロトコルがEPSONと表示され、正しく認識されていないのがわかります。
この場合、sendGeneric関数を呼びます。

その際にデータのフォーマットを指定する必要があり、そのために得られたデータを理解する必要があります。
(リモコンフォーマットの詳しい情報はこちらのHPに記載されています。)

上記のデータの最初の値のペアがはLeader部分でHigh=8942, Low=4426を表していることがわかります。
次に、High=580, Low=1640のペアがデータ1、High=580, Low=530のペアがデータ0ということがわかります。
また、コマンドとコマンドの間に41530分のLow区間であることがわかります。

それを変数にすると以下のようになります。

const uint16_t kIrisHdrMark = 8942; ///< uSeconds. [Leader High]
const uint16_t kIrisHdrSpace = 4426; ///< uSeconds. [Leader Low]
const uint16_t kIrisBitMark = 580; ///< uSeconds. [Data 1 High]
const uint16_t kIrisOneSpace = 1640; ///< uSeconds. [Data 1 Low]
const uint16_t kIrisZeroSpace = 530; ///< uSeconds. [Data 0 Low]
const uint32_t kIrisCommandLength = 120000; ///< uSeconds.
const uint32_t kIrisMinGap = 41530; ///< uSeconds. [stop bit Low]
const uint16_t kIrisFreq = 36700;


そして、sendGenericを呼ぶ時に以下のように指定すれば良いわけです。

const uint64_t data = 0x7B019A65;
sendGeneric(kIrisHdrMark, kIrisHdrSpace, kIrisBitMark,
kIrisOneSpace, kIrisBitMark, kIrisZeroSpace,
kIrisBitMark, kIrisMinGap, kIrisCommandLength,
data, 32, kIrisFreq, true, 0, 50);


以上、参考までに。
タグ:リモコン

トラックバック

コメント

お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのコメント

   
検索
検索語句
記事ランキング
最新記事
×

この広告は30日以上新しい記事の更新がないブログに表示されております。