よくある話ですが、外からエアコンとかの家電を赤外線LEDを使って操作できるようにした話です。
使ったものは、以下のものです。
- raspberry pi 3
- 赤外線LED
- 赤外線受光モジュール(PL-IRM2121)
- ジャンパワイヤ
- ブレッドボード
- 適当なトランジスタ
- 抵抗(27Ω、1kΩ)
作成した回路
Raspberry Pi側の設定
赤外線を扱うプログラムについて
赤外線を記録、出力するプログラムを書いても良いのですが、ここではlirc
を使います。
ただし自分で書く場合だとユーザ空間のプログラムとして動作させると、上手く赤外線LEDの明滅が出来なくて動かないことが多いです。
自分もCで適当に送信するプログラムを書いたところ余り正確に対象機器が操作できませんでした。
これはOSの割り込みや他のプログラムなどが動作している時間などの影響だと思われます。
本来は一定の波になっていなければならないリモコン信号にずれが発生してしまい正しい形にならなくなるためだと考えられます。
ですので、ちゃんと動作させるためには割り込みなどがちゃんと制御できる世界、つまりカーネルモジュールとして実装させる必要があります。
lircはカーネルモジュールも持っているのでそれを利用することで上記の問題を回避しているのだと思われます。
というわけで、apt-get
でlirc
をインストールしておきます。
sudo apt-get install lirc
lircの設定
まずは、GPIOとの対応を取るため、/boot/config.txt
に以下の内容を追記します。
dtoverlay=lirc-rpi,gpio_out_pin=18,gpio_in_pin=17,gpio_in_pull=up
PL-IRM2121の仕様眺める限り、pullupしなくても大丈夫そうですが検証していません…。そもそも赤外線が目に見えないせいで色々検証が辛すぎました…
/etc/lirc/hardware.conf
を以下のように設定しました。
# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS="--uinput"
#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD=false
#Don't start irexec, even if a good config file seems to exist.
#START_IREXEC=false
#Try to load appropriate kernel modules
LOAD_MODULES=true
# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="default"
# usually /dev/lirc0 is the correct setting for systems using udev
DEVICE="/dev/lirc0"
MODULES="lirc_rpi"
# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""
実際の使い方に関しては次回以降にまとめようかと思います。