2020/07/02 ラズパイでエアコン制御したい1
前回までで部屋の温度を取得して、可視化、通知するところまでは成功した。
次は実際に温度に合わせてエアコンを制御する部分。
規定の温度を越した場合、エアコンをオンにする。オフは手動で行うことにする。
まずは必要なパーツ
ラズベリーパイ
赤外線受光モジュール
赤外線LED
抵抗
これらがあれば問題ない。
流れとしては、赤外線受光モジュールを使い、リモコンの信号を覚えさせる。
覚えたパルス信号をLEDで発光させて、対象を制御する。
今回使っていくのはPythonのGPIOを利用したlircdを使う。
割と悪名高く、うまく動かないケースが有るようだ。
さっそくインストール。
code:/boot/config.txt
dtoverlay=gpio-ir,gpio_pin=24
dtoverlay=gpio-ir-tx,gpio_pin=17
code:/etc/lirc/lirc_options.conf
driver = default
device = /dev/lirc0
これらの設定を入れて配線を行う。
GPIOピンは受信に24、送信に17を指定した。
https://gyazo.com/abb440b676c6c90f4eb01b26c6b7092a
https://gyazo.com/f975ab38b3c6943fd5accab3c48a1d1a
このように配線する。
そして、再起動
受光テストを行う。
mode2 -m -d /dev/lirc1
これはリモコンの信号を受信してパルス信号を表示させる。
https://gyazo.com/d7ea0e3a8bd10c858d0ac29168ac13e2
このようにspaceとpulseが交互に表示される。
次はmオプションを付ける。
mode2 -m -d /dev/lirc1
https://gyazo.com/f66c6ecd65a82672e9223f9f2e3087d2
このように表示された。
lircdには実際にリモコンの信号を覚えさせるコマンドもある。
しかし、信号が長いとうまく行かない。
試してみる。
sudo irrecord -n -d /dev/lirc1
//これがだめだった場合こっち
sudo irrecord -n -f -d /dev/lirc1
自分の場合、部屋の照明の信号は正しく設定できたが、テレビなどはうまくいかなかった。
そこで先程のパルス信号を表示させたデータを利用する。
/etc/lirc/lircd.conf.d/hoge.lircd.conf
code:hoge.lircd.conf
begin remote
name light
flags RAW_CODES
eps 30
aeps 100
gap 79248
begin raw_codes
name on
3516 1706 473 397 475 396
474 1270 474 1270 473 397
474 1271 474 396 474 395
475 395 489 1257 472 397
475 397 475 1269 474 395
475 1271 472 395 475 1270
474 395 476 396 475 1270
475 399 471 395 477 396
474 396 475 396 475 397
474 1271 472 1271 473 396
473 1272 471 397 475 396
475 1271 473 396 474 1270
473 398 474 397 475 1271
472 396 476 396 476
name off
3491 1704 474 395 477 395
475 1269 475 1270 473 395
476 1270 474 395 476 396
474 396 476 1244 499 397
475 395 477 1270 474 394
475 1270 475 396 475 1271
472 393 478 395 476 1270
473 396 474 395 476 396
475 395 476 1244 499 1269
477 1268 473 1269 473 397
475 1245 499 395 476 398
473 393 478 1270 473 1270
473 396 475 395 477 1270
474 397 474 396 476
end raw_codes
end remote
name <name>の下に信号を書く。
これはmode2コマンドで得たものをコピペすれば良い。
保存した後、この信号を発信する。
irsend SEND_ONCE light on
10回飛ばしたい場合は
irsend -#10 SEND_ONCE light on
構文としては
irsend SEND_ONCE <confの名前> <name>
これを実行することで実際にリモコンとして動作する。
他の製品は実行できなかった。
どうやらkernelのバージョンが4.19.*だとバッファの設定の問題で難しいようだ。
そこでカーネルの更新を行う。
そうするとバッファが大きくなり、他の製品も操作が可能になった。
ただひとつ。HITACHIのエアコンを除いて
自分の部屋にある日立のエアコン。このエアコンの信号が異様に長い。
irsendでは送信できない。
どうしたものか。
一番操作したかったものが操作できないなんて、、、、
とりあえず、保留。
========================================
試しに汎用リモコンを使ったらオン・オフできてしまった。
どういうことなの?
信号が異なるのにオンになるのはなぜ?
これはパルスからビット変換して見てみないとわからなそう。
余裕があれば、いつかやってみる。。。