LIRCでRaspberry Piの赤外線制御 (家電、エアコン、照明、テレビなどを制御するホームIoT)

概要

 LIRCを使って赤外線の送受信を行うRPiTPH Monitor及びRPZ-IR-Sensor用の応用例です。 赤外線を使ってエアコン、照明、テレビなどの家電を制御することが可能になります。

Pythonとpigpioを使った赤外線送受信ツール

LIRCを使う方法は、初期設定や送信データの登録などがややこしく、バージョンの違いによる変更も多くなっていました。

そこで、Indoor CorgiではPythonとpigpioを使って、赤外線送受信するツールを開発、公開しました。初めて赤外線を使う方や、特にLIRCを使う理由が無い方は、初期設定や送信データの登録が簡単な以下の記事の方法を推奨します。

ラズパイで赤外線制御 (家電、エアコン、照明、テレビなどを制御するホームIoT)

Pythonとpigpioを使ってRaspberry Piで赤外線の送受信を行う方法について解説しています。サンプルプログラムを用意しているので、簡単に受信、登録、送信動作をさせることができるほか、データ解析も可能です。赤外線を使ってエアコン、照明、テレビなどの家電を制御することが可能になります。

LIRCを使う方法は古いOSについての内容となりますが、以下に解説しています。

OSのバージョンについて

本ページは2019年6月にリリースされた旧バージョンのRaspberry Pi OS Buster用の設定方法です。 それ以降のバージョン、最新バージョンでは確認しておりません。

また、Buster以前のバージョンであるStretch、Jessieの設定方法も、 Stretch設定方法Jessie設定方法にございます。

設定方法はKernelとLIRCバージョンによって異なることがあります。 本ページの方法で動作確認済みのOSとLIRCバージョンの一覧は以下の通りです。インストール後 、ソフトウェアアップデートせずにLIRCをインストールして確認しています。

OSKernelバージョンLIRCバージョン動作確認
Raspbian Buster 2019-09-264.190.10.1確認済(パルス数255制限)
Raspbian Buster 2020-02-144.190.10.1確認済(パルス数255制限)
Raspberry Pi OS Buster 2020-05-284.19.1180.10.1確認済

Kernelバージョンはapt-get upgradeで更新されることがあります。更新したくない場合は raspberrypi-bootloaderおよびraspberrypi-kernelパッケージのバージョンを固定することをおすすめします。




パルス数の制限について

2020年2月リリース以前のBusterでは赤外線送信のパルス数が最大255までとなっていましたが、5月リリースのBuster (Kernelバージョン 4.19.118)でこの制限がなくなりました。なお、このリリースからRaspbianはRaspberry Pi OSという名称に変更になりました。

Kernelバージョンは以下のコマンドで確認できます。

uname -a

2020年2月以前のバージョンをお使いの場合は、2020年5月版のOSの再インストールを推奨しております。(アップデートしただけだと正常に動かないケースを確認したため)

Stretch、Jessieではこのパルス数の制限はありません。

ビルド環境の構築

Busterにおいて赤外線受信機能を使用する場合、lircをビルドする必要があります。aptを使ってlircのインストールは行わないで下さい。以下のコマンドを順に実行して、ビルドに必要なパッケージをインストールします。

sudo su -c "grep '^deb ' /etc/apt/sources.list | sed 's/^deb/deb-src/g' > /etc/apt/sources.list.d/deb-src.list"

sudo apt update

sudo apt install devscripts dh-exec doxygen expect libasound2-dev libftdi1-dev libsystemd-dev libudev-dev libusb-1.0-0-dev libusb-dev man2html-base portaudio19-dev socat xsltproc python3-yaml dh-python libx11-dev python3-dev python3-setuptools

LIRCのビルド

以下のコマンドを順に実行して、buildディレクトリを作成し、その中でビルドを行います。途中でgpio-irにパッチを当てる作業を行っています。最後のapt installでエラーとなる場合がありますが、そのままLIRCの設定に進んで下さい。

mkdir build
cd build
apt source lirc

wget https://raw.githubusercontent.com/neuralassembly/raspi/master/lirc-gpio-ir-0.10.patch

patch -p0 -i lirc-gpio-ir-0.10.patch
cd lirc-0.10.1
debuild -uc -us -b
cd ..

sudo apt install ./liblirc0_0.10.1-5.2_armhf.deb ./liblircclient0_0.10.1-5.2_armhf.deb ./lirc_0.10.1-5.2_armhf.deb

LIRCの設定

/boot/config.txtをスーパーユーザーで開き、ピン番号に関する設定を以下のように編集してください。

# Uncomment this to enable infrared communication.
dtoverlay=gpio-ir,gpio_pin=4
dtoverlay=gpio-ir-tx,gpio_pin=13

次に以下のコマンドを順に実行して設定ファイルを生成します。

sudo cp /etc/lirc/lirc_options.conf.dist /etc/lirc/lirc_options.conf
sudo cp /etc/lirc/lircd.conf.dist /etc/lirc/lircd.conf

LIRCのビルドの最後のapt installコマンドでエラーが出ていた場合はbuildディレクトリで再度実行します。

sudo apt install ./liblirc0_0.10.1-5.2_armhf.deb ./liblircclient0_0.10.1-5.2_armhf.deb ./lirc_0.10.1-5.2_armhf.deb

全ての設定終了後、Raspberry Piを再起動します。




赤外線受信

/etc/lirc/lirc_options.confをスーパーユーザーで開き、一部設定を以下のように編集してください。

driver = default
device = /dev/lirc1

設定が終了したら以下を実行してlircdを一度終了してください。

sudo service lircd stop

以下のコマンドを実行した後、基板の赤外線受信ユニットに向けて、お使いのリモコンから赤外線を送信してください。 送信が終わったらCtrl+Cで取り込みを終了します。

mode2 -d /dev/lirc1 > rec.txt

受信に成功すると、赤外線情報がrec.txtに記録されます。

pulse 3506
space 1700
pulse 466
space 401
pulse 467
space 1269
...

赤外線送信

先ほど記録したデータを赤外線送信データとして登録します。 /etc/lirc/lircd.conf.dディレクトリに好きな名前でconfファイルを作成します。(今回はaircond.confとします) さらに、confファイルを以下のように編集してください。nameの行は好きな名前を付けられます。 今回はエアコンのオフボタンの例としてname aircond, name offとしました。 begin raw_codesのname offに続く行は赤外線データを示しています。 rec.txtに記録されたデータのうち、pulse/spaceに続く数値をスペースで区切って入力していきます。 1行のデータが非常に多い場合エラーとなる事があります。適宜改行を入れてください。最後のtimeout行の数値はいれる必要はありません。

begin remote
 name aircond
 flags RAW_CODES
 eps 30
 aeps 100
 gap 200000
 toggle_bit_mask 0x0

 begin raw_codes
 name off
 3506 1700 466 401 467 1269 ...
 end raw_codes
end remote

/etc/lirc/lirc_options.confをスーパーユーザーで開き、一部設定を以下のように編集してください。

driver = default
device = /dev/lirc0

送信準備として以下を実行します。

sudo service lircd stop
sudo service lircd start

登録した赤外線データを送信するには以下のコマンドを実行します。正常に送信されればお使いの機器が反応します。また、赤外線送信中を示す赤色LEDが一瞬点灯します。aircond、offの部分は自分で付けた名前に置き換えてください。

irsend SEND_ONCE aircond off

関連記事

ラズパイと赤外線でエアコンの自動ON、消し忘れ機能を実現

普段、エアコンを消し忘れてしまい夜間つけっぱなしにしてしまったり、冬場に朝エアコンを入れても暖かくなるのに時間がかかったことは無いでしょうか?本記事では、Raspberry Piと拡張基板を利用して、毎晩のエアコン消し忘れ機能、および朝に温度が低い場合に自動で暖房を入れる機能を実現します。

ラズパイで赤外線制御 (家電、エアコン、照明、テレビなどを制御するホームIoT)

Pythonとpigpioを使ってRaspberry Piで赤外線の送受信を行う方法について解説しています。サンプルプログラムを用意しているので、簡単に受信、登録、送信動作をさせることができるほか、データ解析も可能です。赤外線を使ってエアコン、照明、テレビなどの家電を制御することが可能になります。

RPZ-IR-Sensor (Raspberry Pi用 温度/湿度/気圧/明るさ/赤外線 ホームIoT拡張ボード)

動作をプログラミング可能な、Raspberry Pi/Zero(ラズパイ)用ホームIoT拡張ボードです。温度、湿度、気圧、明るさセンサー、赤外線送受信機能を搭載。温度が上がったらエアコンをオンにする、暗くなったら照明を点灯する、外出先から家電の操作をする、気温や日照時間を記録する、といった使い方が可能です。LEDにステータスを表示したり、スイッチを押したら特定の処理をすることもできます。

RPi TPH Monitor Rev2 (Raspberry Pi用 温度/湿度/気圧/赤外線 ホームIoT拡張ボード)

動作をプログラミング可能な、Raspberry Pi(ラズパイ)用ホームIoT拡張ボードです。温度、湿度、気圧センサー、赤外線送信、受信機能を搭載。温度が上がったらエアコンをオンにする、外出先から家電の操作をする、気温や湿度を記録する、といった使い方が可能です。ディスプレイやLEDに情報表示、スイッチを押したら特定の処理をすることもできます。