Home > 一般 > ラズパイをエアコンのリモコンにした

ラズパイをエアコンのリモコンにした

  • 2022-06-26 (Sun) 14:44
  • 一般

ラズパイ3,4 をエアコンのリモコンにしようということで試行錯誤した結果,「pigpio + irrp.py + ちょっと改良」でやったらどうにかなった.ちょっとまえに gpio-ir を使ってみたらエアコンのコードが長すぎて 500ms 制限に引っかかって泣いてたののリベンジ(dkms でパッチあてたモジュールに差し替えて…… とかも試してたけどうまくできなかったので gpio-ir は諦めた).

「ちょっと改良」の部分は,やっぱりエアコンのリモコン波形データが長すぎてそのままだと pigpiod が 'chain is too long' の文句を言ってくるというのへの対処.irrp.py の使ってる pigpio パッケージのドキュメントによると使える限界は "roughly 600 entries and 20 loop counters" とかいう程度らしい.でも家に付いてる日立のエアコンだと wave chain の長さが 850程度なので怒られる.なんでこんなに長いのか.

具体的な対処としては,pigpio の波形データは何故かループが使えるというリッチな仕様なので,ループを使って波形データを圧縮するというのをやってみた.めんどいので O(n^3) で愚直に波形データ全体をなめて圧縮可能な繰り返し部分を全列挙して最も効果的な部分をループで潰すという程度.これで 5種類程度のリモコン信号を圧縮してみたら,どれも 850 程度の長さだったのがループをネストしつつ 450 程度にまで縮まってくれたので,まあ実用的に問題ないっぽい.流石に愚直過ぎて遅いから送信時処理ではなく信号記録時に圧縮しとく感じで組み込んだ(もとの波形データは正整数値のみなのでループ部分は 0以下の値で記録しとける).

さて,これでハードウェアに近い部分の準備は整った.少なくとも固定のパターンを叩き込むのは OK.次は温度設定とかから波形データを生成する方法の解析かな.とりあえずビット列を眺めて考えよう.

★下記に2つの英単語をスペースで区切って入力してください

Home > 一般 > ラズパイをエアコンのリモコンにした

Search
Feeds

Page Top