Raspberry Piと赤外線LEDを使ってiPhoneから家電を操作する

Raspberry Pi

赤外線LEDで家電操作

スマートホームを目指すからには家電くらい操作できないといけません。

今回はRaspberry Piに赤外線LEDを接続して家電の操作を行います。
類似記事は山のようにあるので、他を参照したほうが確実だとは思います

正直、赤外線でAlexaなどから家電を操れる製品はたくさんあります。
でも自分で作ったほうが細かいところに手が届いたり好きなようにできるので非常に楽しいのです。

準備

赤外線で家電を扱うには、赤外線を読み取る回路と、赤外線を出す回路が必要です。

秋月で一式揃えました。

接続

実際にブレッドボード上に回路を組んでいきます。

右の接続した写真はLEDあたりの配線が少し間違っています。
あまり参考にしないでください。

回路図

LEDのドライブ回路は以下のサイトを参考にさせていただきました。

https://paltee.net/archives/45

赤外線受信モジュールの方はノイズ除去のためにコンデンサを付けたほうが良いという話もありますが、なくても特に問題なく動作しました。

プログラム

pigpioのライブラリを使ってGPIOを操作します。
インストールとsystemdで自動的に有効にするようにします。

また、GPIOの17(11番ピン)を出力、GPIOの18 (12番ピン)を入力に設定します。

pigpioのインストール
$ sudo apt install pigpio python3-pigpio
$ sudo systemctl enable pigpiod.service
$ sudo systemctl start pigpiod
$ echo 'm 17 w w 17 0 m 18 r pud 18 u' > /dev/pigpio

再起動時も自動的に設定されるようにcronに記述しておきます。

editor
$ crontab -e

以下を記述

@reboot until echo 'm 17 w w 17 0 m 18 r pud 18 u' > /dev/pigpio; do sleep 1s; done

実際に赤外線の送受信を行うプログラムは「irrp.py」を使います。
コマンド1行で簡単に赤外線の送受信をすることができるすごいプログラムです。

irrp.pyを使う
$ cd /
$ sudo chown pi /opt/
$ cd /opt
$ mkdir ir
$ cd ir
$ curl http://abyz.me.uk/rpi/pigpio/code/irrp_py.zip | zcat > irrp.py

今回は/opt配下に配置していますが、好きなところでOKです。

以下のコマンドで赤外線を学習することができます。
GPIOの18番の入力で、codesというファイルに「livingroom_light:off」という命令で保存されます。

コマンドを実行して「Recording」表記になったら赤外線受信モジュールに向けてリモコンのボタンを押します。
Okay表示が出れば学習完了です。

赤外線を受信する
$ python3 irrp.py -r -g18 -f codes living_light:off --no-confirm --post 130
pi@raspberrypi:/opt/ir $ python3 irrp.py -r -g18 -f codes livingroom_light:off --no-confirm --post 130
Recording
Press key for 'livingroom_light:off'
Okay

学習したものが正しく動作するか試してみます。
以下のコマンドで赤外線を送信することができます。

GPIOの17番からcodesファイルの中にあるlivingroom_aircon:onという先程学習した信号を送信します。

赤外線の送信
$ python3 irrp.py -p -g17 -f codes livingroom_aircon:on

実際に家電が反応すればOKです。

赤外線コードについて

テレビや照明のリモコンの場合は単純にON/OFFや各機能の信号が送信されますが、エアコンの場合は厄介で、電源を入れるボタンを押したとしても、温度や冷房/暖房、風量などの情報まで送信されています。

27度の冷房で風量風向自動と学習したものはその設定しか使うことができません。

パターンわけをしてひたすら学習させ続ければできないこともないですが、膨大な記録が必要です。

コードを解析できれば自分の好きなようにエアコンを操れますが、今回は見送りです。

そのうちやるかもしれません。

家電を操作するシェルスクリプトを作る

先程のコマンドをそのまま使ってもいいのですが、パラメータも多く大変なので、シェルスクリプトにしました。

何も難しいことはしておらず、シェルスクリプトの引数にon/offを入れてそれにあったコマンドが実行されるようになっているだけです。

コード解析していないので、冷房27度風量風向自動の設定です。
settimerは5時間のタイマーをセットするときの信号を入れています。(寝るとき用ですね)

もう少しきれいに書けますが、とりあえず暫定版ということで・・・

livingroom_aircon.sh
#!/bin/bash

irrpdir="/opt/ir/irrp"


if [ $# -eq 1 ]; then
    if [ $1 = "true" ]; then
    	python3 ${irrpdir}/irrp.py -p -g17 -f ${irrpdir}/codes livingroom_aircon:on
    elif [ $1 = "false" ];then
    	python3 ${irrpdir}/irrp.py -p -g17 -f ${irrpdir}/codes livingroom_aircon:off
    elif [ $1 = "on" ];then
    	python3 ${irrpdir}/irrp.py -p -g17 -f ${irrpdir}/codes livingroom_aircon:on
    elif [ $1 = "off" ];then
    	python3 ${irrpdir}/irrp.py -p -g17 -f ${irrpdir}/codes livingroom_aircon:off
    elif [ $1 = "settimer" ];then
    	python3 ${irrpdir}/irrp.py -p -g17 -f ${irrpdir}/codes livingroom_aircon:settimer
    fi
fi

実行するときは以下のようにします。

$ ./livingroom_aircon.sh on

iPhoneからエアコンを操作する

このスクリプトをiPhoneのショートカットアプリから実行すればお手軽スマホリモコンの完成です。

ショートカットアプリに先程作ったシェルを起動するようなショートカットを作成します。
sshがiPhoneから起動できるので簡単です。

もちろんローカル環境(家のWi-Fiにつながっている状態)じゃないと動作しません。

ボタンを押すだけでなく、Siriにも対応しています。
今回の場合はSiriを起動させて「寝室のエアコン付けて」と言うとエアコンが付きます。
いよいよスマートホームらしくなってきました。

コメント

タイトルとURLをコピーしました