記事の内容を試す場合は自己責任でお願いいたします。
- Raspberry Pi Zero WH OSインストール
- Raspberry Pi Zero WHを使ってAmazon Echo Flexから音を出す
- Raspberry Piと赤外線LEDで家電を操作する
- Raspberry PiとBME280を利用して気温、湿度、気圧を測定する
- Raspberry Pi Zero WHにMackerelを導入して死活監視を行う
- Raspberry Piで照度を取得する TSL2572 TSL2561
- AlexaからRaspberry Piを経由して家電を音声で操作する
- AlexaをRaspberry PiのNodeREDから喋らせる
- Raspberry PiとAlexaでオリジナルスキルを作る 「今日のご飯は?」
- Raspberry Pi とSlackとLINE Messaging APIでLINEから家電を操作する
- Raspberry Piで収集したセンサー情報をMachinistに送信する
- Raspberry Piを使ってAlexaからゴミの日のお知らせをする
- Raspberry Piでダイソーのリモートシャッターを使う
- 2台のRaspberry PiとMySQLでレプリケーションを構成する
- iPhoneからRaspberry Piを経由して家電を操作する
- Raspberry PiでWebサーバを立ててブラウザから家電を操作する
赤外線LEDで家電操作
スマートホームを目指すからには家電くらい操作できないといけません。
今回はRaspberry Piに赤外線LEDを接続して家電の操作を行います。
類似記事は山のようにあるので、他を参照したほうが確実だとは思います
正直、赤外線でAlexaなどから家電を操れる製品はたくさんあります。
でも自分で作ったほうが細かいところに手が届いたり好きなようにできるので非常に楽しいのです。

準備
赤外線で家電を扱うには、赤外線を読み取る回路と、赤外線を出す回路が必要です。
秋月で一式揃えました。
接続
実際にブレッドボード上に回路を組んでいきます。
右の接続した写真はLEDあたりの配線が少し間違っています。
あまり参考にしないでください。
回路図
LEDのドライブ回路は以下のサイトを参考にさせていただきました。

赤外線受信モジュールの方はノイズ除去のためにコンデンサを付けたほうが良いという話もありますが、なくても特に問題なく動作しました。
プログラム
pigpioのライブラリを使ってGPIOを操作します。
インストールとsystemdで自動的に有効にするようにします。
また、GPIOの17(11番ピン)を出力、GPIOの18 (12番ピン)を入力に設定します。
$ 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に記述しておきます。
$ 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行で簡単に赤外線の送受信をすることができるすごいプログラムです。
$ 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時間のタイマーをセットするときの信号を入れています。(寝るとき用ですね)
もう少しきれいに書けますが、とりあえず暫定版ということで・・・
#!/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を起動させて「寝室のエアコン付けて」と言うとエアコンが付きます。
いよいよスマートホームらしくなってきました。
コメント