Arduino html Javascript Linux Python raspberry Pi プログラミング 工作 電子工作

Raspberry Pi Zero 2 Wでブラウザから遠隔操作できるテレビリモコンを作った

インテリジェントリモコンを作る

テレビを見なくなりました。

無理に見ることもないのですが、あまり世事に疎すぎるのも良くありません。

見ない原因のひとつにリモコンを探して操作するのが面倒臭いというのがあります。

そこで、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の取得が必要です。

https://api-portal.nhk.or.jp

-Arduino, html, Javascript, Linux, Python, raspberry Pi, プログラミング, 工作, 電子工作