インテリジェントリモコンを作る
テレビを見なくなりました。
無理に見ることもないのですが、あまり世事に疎すぎるのも良くありません。
見ない原因のひとつにリモコンを探して操作するのが面倒臭いというのがあります。
そこで、Raspberry Piでリモコンを作って、PCなどから遠隔で操作できるようにしてみました。
Pi Zero 2 W + LIRCで実現
Raspberry Piは、LIRCという専用のツールを使うことで、簡単に赤外線リモコンが実現できます。
使った機種はRaspberry Pi Zero 2 Wです。処理能力と消費電力のバランスでこの機種を選択しました。
最初、Pi2 でテストして上手くいったので、コンパクトで省電力なPi Zeroに映したのですが、Pi Zeroでは処理能力不足で正しい赤外線コードが出力出来ませんでした。

IR LEDは秋月で買った「5mm赤外線LED 940nm OSI5FU5111C-40」です。
遠距離からでも届くようにIR LEDを4個使いました。
LEDの並列接続では、電流制限抵抗を個別に用意することが重要らしいです。
回路図にはありませんが、IR LEDは肉眼で見えないので、動作確認用に並列で赤色LEDを入れています。
赤外線リモコンのデータはArduinoで収集
リモコンの送信データは、ネットからも拾えるのですが、ウチのテレビ(REGZA Z-8000)のものが無かったのでArduinoを使って収集しました。
最初はRaspberry Piで収集しようとしましたが、うまくいかなかったのでArduino Uno R3にしたらうまくいきました。
赤外線受信モジュールは秋月で買った「赤外線リモコン受信モジュールOSRB38C9AA」です。
電源とGND、ArduinoのD11ピンに繋ぐだけで使えます。

使用ライブラリは「IRremote」。
ネット上で「バージョン2.6.1しか動かない」という情報を見たので、2.6.1をインストールしました。
サンプルスケッチの「IRrecvDumpV2」がそのまま使えます。
スケッチを走らせて、手持ちのリモコンを受信モジュール向けて操作すると、受信データがダンプされます。
これをChatGPTにペーストして「LIRC用の.confファイルを作って」と依頼してデータを作成しました。
REGZAの赤外線リモコンはNEC方式だと分かったので、header部分は測定値ではなく、NEC方式の規定値を入れています。
Arduinoの性能のためか、測定の精度はあまり高くないようなので規定値を使った方が動作が安定しました。
キー定義の部分、例えば「KEY_POWER 0xXXXXXX」のみ、測定値から作成しています。
以下は、作成したREGZA Z8000用の設定ファイルです。すべてのキーが含まれるわけではありません。
begin remote
name regza_z8000
bits 32
flags SPACE_ENC
eps 25
aeps 100
header 9000 4500
one 560 1690
zero 560 560
ptrail 560
repeat 9000 2250
gap 108000
pre_data_bits 0
toggle_bit 0
begin codes
KEY_POWER 0x2FD48B7
KEY_BS 0x2FD3EC1
KEY_CHIDEJI 0x2FD5EA1
KEY_INPUT 0x2FDF00F
KEY_1 0x2FD807F
KEY_2 0x2FD40BF
KEY_3 0x2FDC03F
KEY_4 0x2FD20DF
KEY_5 0x2FDA05F
KEY_6 0x2FDC03F
KEY_7 0x2FDE01F
KEY_6 0x2FD609F
KEY_8 0x2FD10EF
KEY_9 0x2FD906F
KEY_0 0x2FD00FF
KEY_10 0x2FD50AF
KEY_11 0x2FDD02F
KEY_12 0x2FD30CF
KEY_DISP 0x2FD38C7
KEY_QUICK 0x2FDE41B
KEY_REGZALINK 0x2FD2CD3
KEY_TIMETABLE 0x2FD7689
KEY_BACK 0x2FDDC23
KEY_END 0x2FD3CC3
KEY_UPUP 0x2FD04FB
KEY_DOWNDOWN 0x2FD847B
KEY_LEFTLEFT 0x2FD44BB
KEY_RIGHTRIGHT 0x2FDC43B
KEY_UP 0x2FD7C83
KEY_DOWN 0x2FDFC03
KEY_LEFT 0x2FDFA05
KEY_RIGHT 0x2FDDA25
KEY_ENTER 0x2FDBC43
KEY_BLUE 0x2FDCE31
KEY_RED 0x2FD2ED1
KEY_GREEN 0x2FDAE51
KEY_YELLOW 0x2FD6E91
KEY_VOLUMEUP 0x2FD58A7
KEY_VOLUMEDOWN 0x2FD7887
KEY_CHANNELUP 0x2FDD827
KEY_CHANNELDOWN 0x2FDF807
KEY_MUTE 0x2FD08F7
end codes
end remote
LIRCのインストールとセットアップ
Pi Zero 2のセットアップは以下のようなものです。
ステップ1:アップデート
sudo apt update
sudo apt upgrade -y
ステップ2:LIRCインストール
sudo apt install lirc -y
ステップ3:GPIO赤外線送信ドライバの有効化
/boot/firmware/config.txt
の編集
sudo nano /boot/firmware/config.txt
次を追記([all] の直後でもOK):
dtoverlay=gpio-ir-tx,gpio_pin=17
保存して再起動:
sudo reboot
LIRCの設定変更
設定ファイルを編集
sudo nano /etc/lirc/lirc_options.conf
以下の2行を次のように修正:
driver = default
device = /dev/lirc0
※devinput を defaultに、auto を /dev/lirc0にする
lircd サービスを再起動
sudo systemctl restart lircd
ステータス確認
sudo systemctl status lircd
※リストが、active (running) でエラーが消えていればOK
リモコン定義ファイルを設定
Arduino + ChatGPTで作成しregza_myremote.confファイルが現在のディレクトリにある場合、LIRCの設定ファイルの置き場所にコピー。
sudo cp regza_myremote.conf /etc/lirc/lircd.conf.d/
#再起動
sudo systemctl restart lircd
#確認
irsend LIST regza_myremote ""
コマンド送信
irsend SEND_ONCE regza_z8000 KEY_POWER
## "regza_z8000"は.confファイルのnameで定義された名前
PCのブラウザからテレビを操作できるリモコンWebアプリ
パソコンからテレビが操作できるように、Webアプリを作りました。
Raspberry Piをサーバーにして、http://IPアドレス:8080
でアクセスできます。
NHKの番組表APIから取得した現在放送中の番組と、次の番組も表示できるようにしました。
コードはgithubに置いてあります。
https://github.com/ryjkmr/pi_tv_remocon
NHKのAPI利用には登録とKeyの取得が必要です。
