はじめに
赤外線リモコンの信号を学習してネットワーク経由で家電を操作出来るスマートリモコンが市販されていますが、今回市販されているスマートリモコンを使用せずにRaspberry Piを使用して外部から自宅のエアコンの電源を入れられるようにしました。
(帰宅時に最寄り駅に到着したらスマートフォンからエアコンの電源を入れる想定です。)
※配線を間違えるとRaspberry Piが壊れる可能性があります。試す際は自己責任でお願いします。
参考リンク
- 格安スマートリモコンの作り方
- GPIO – Raspberry Pi Documentation
- pigpio library – IR Record and Playback
- pigpio library – pigs
- 赤外線リモコン受信モジュール OSRB38C9AA
- ジャンパーワイヤ
- ミニブレッドボード
端末について
以前NASを作成した際に、Raspberry Pi 4 Model B 4GBを使用しましたが、今回以下のような理由から新たにRaspberry Pi Zero WHを使用することにしました。
- NASは速度を優先して有線LANを使用、またUSB3.0接続で外部ストレージも接続しているため、配線の都合上エアコンの近くに設置が難しい(今回は速度は重要でないため無線LANでよく、またUSBも不要)
- もし電子部品を接続する際に失敗するとRaspberry Piを破壊する可能性があるため、7000円程度するRaspberry Pi 4は躊躇しますが(更にNASも失いますが)、Raspberry Pi Zeroなら2000円程度と少しダメージが少ないです
OSインストール~起動
以前のようにWindows上でRaspberry Pi Imagerを使用してmicroSDカードにOSを書き込み、その後microSDカードをRaspberry Piに差し込みモニタに接続して電源を入れてSSHなどの初回起動時の設定を行えば完了となるはずだったのですが、少しトラブルが発生しました。
事前に確認していなかったのが悪いのですが、Raspberry Pi 4はmicro HDMI接続でRaspberry Pi Zeroはmini HDMI接続でした。手元にmicro HDMI⇔HDMIの変換ケーブルしかなかったため、いざ起動しようとした際にRaspberry Pi Zeroをモニタに接続出来ませんでした。
初回起動時に無線LAN、SSHの設定をするだけのためにmini HDMI⇔HDMIの変換ケーブルを準備するのも勿体ないと思ったので、今回はRaspberry Pi ImagerでmicroSDカードにOS書き込み後、そのままWindows PC上でSSHの設定と無線LANの設定を行い、その後microSDカードをRaspberry Piに差し込み起動したらそのままSSHでアクセス出来るようにしました。
SSHの設定
エクスプローラでOSを書き込んだmicroSDカードのルートディレクトリに「ssh」という名前の空のファイルを作成します。
※拡張子(.txtなど)は不要です
無線LANの設定
sshの設定と同様にエクスプローラでmicroSDカードのルートディレクトリに「wpa_supplicant.conf」名前のファイルを作成し、以下のように編集して保存します。
country=JP ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="{ここに無線LANのSSIDを指定}" psk="{ここに無線LANのパスワードを指定}" scan_ssid=1 }
※scan_ssid=1の指定はステルス設定されているSSIDに接続する場合に必要です。
上記設定のあとにmicroSDカードをRaspberry Piに差し込み電源を入れて数分待つと無線LANに接続されSSH接続可能になり、無事外部モニタ無しで以降の作業を進めることが出来ました。
赤外線信号送受信のための準備
エアコンのリモコンの赤外線信号の送受信のためにpigpioというライブラリをインストールして起動します。
sudo apt update sudo apt upgrade sudo apt install pigpio python3-pigpio sudo systemctl enable pigpiod.service sudo systemctl start pigpiod
pigpioの作者がpigpioを使用した信号の送受信プログラム(IR Record and Playback)を用意しているので、ダウンロードして任意の場所に保存しておきます。
curl http://abyz.me.uk/rpi/pigpio/code/irrp_py.zip | zcat > irrp.py
GPIO(汎用入出力)の設定
Raspberry Piには以下の図の信号ピンが用意されています。
※公式サイトから引用
図の中で薄い黄色で番号が振られているGPIOピンがデータの入出力に使用可能です。以下のコマンドを実行し、入出力に使用する信号ピンの設定を行います。
※信号ピンはどの番号でも使用出来るため、これは一例です。
echo 'm 22 w w 22 0 m 23 r pud 23 u' > /dev/pigpio
- m 22 w w 22 0:22番の信号ピンを出力用に設定。出力を0に設定
学習したエアコンの赤外線信号を送信するのに使用します。
※学習した赤外線信号の出力は次回行いますが、今回ついでに設定しています。 - m 23 r pud 23 u:23番の信号ピンを入力用かつpull upに設定。
エアコンの赤外線信号を学習するのに使用します。
コマンドの詳細はpigpio library – pigsに説明があります。
リモコンの赤外線信号の学習
今回はブレッドボードを用いて動作確認を行います。赤外線リモコン受信モジュールをブレッドボードに接続し、それぞれの線をRaspberry Piに接続します。
- 右のピン:3.3V(GPIOの図の濃い黄色ピン)に接続
- 中央のピン:Ground(GPIOの図の黒色ピン)に接続
- 左のピン:信号出力設定しているGPIOピン(今回はGPIOの図の23番ピンに接続)
以下のコマンドを実行するとリモコンの赤外線信号の学習待機状態になります。
python3 irrp.py -r -g23 -f codes power:on --no-confirm --post 130
- -r -g23:GPIO23からの入力信号を受信
- -f codes power:on:codesというファイルにpower:onという名称で受信したデータを保存
- --no-confirm:確認を省略
- --post 130:入力信号の受信が130ミリ秒途絶えたら終了
この状態で赤外線リモコン受信モジュールにエアコンのリモコンを向けて電源ONボタンを押すと以下のような信号データを学習することが出来ました。
おわりに
今回は外部からエアコンの電源を入れるために、Raspberry Piでリモコンの赤外線信号を受信して学習するところまで進めました。
次回以降は引き続き以下の内容を進めていく予定です。
- 学習した赤外線信号の送信
- Slackの投稿を監視し特定のキーワードのチャットを送るとエアコンの電源を入れる