Raspberry Pi をスマートリモコン化 -その1-


Raspberry Pi と赤外線学習リモコンボードを使って、スマートリモコン化し、iPhone の Siri からTV等の電源オン/オフができるようにします。

Raspberry Pi を使ったスマートリモコンの例では、IRKit を使ったものがよく紹介されていますが、

ここでは「ラトックシステム Raspberry Pi UART/USB対応 赤外線学習リモコンボード RPI-IREX」を使ってみます。

今回の「RaspberryPi をスマートリモコン化 -その1-」では、RPi-IREX のセットアップと動作確認までの内容になります。(Siri からのコントロールは 「その2」 以降で紹介します。)

RPi-IREX パッケージはこのような簡易パッケージでした。

組み立て:

パッケージの内容物は、ユーザーズマニュアル、ボード、ピンヘッダー、スペーサーx4、ネジx8 からなります。

 

RPi-IREX はGPIOを使用したUART接続とUSB接続のどちらでも使用することができます。私は、UART接続を選びました。(以下の説明はすべて UART 接続の場合になります。)

ボードの下からピンヘッダーを刺します。

しっかり刺し込むとこのような感じになります。

4つのスペーサーをネジ止めします。(ドライバが必要です。)

Raspberry Pi  のGPIOに差し込んでネジ止めします。(ハンダ付けしなくて良いようになってます。) 使用したのは Raspberry Pi 3 model B です。

本当は、公式ケースに入れたかったのですが、ネジ部分がケースに当たってしまいケースに入れることができませんでした。残念。入るケースを探さないと…。

 

ソフトウェアのセットアップ:

次はソフトウェアの設定です。

ユーザーズマニュアルに記載されている内容の通りですが、せっかく調べたので記載しておきます。

最初に Raspbian を最新状態にアップデートします。

$ sudo apt-get -y update
$ sudo apt-get -y upgrade

 

シリアル設定の削除:

/boot/cmdline.txt をテキストエディタで開き、「console=serial0,115200」部分を削除します。

 

変更前: (注意: 行の途中から省略しています。)

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 ...

 

変更後:

dwc_otg.lpm_enable=0 console=tty1 ...

 

 

シリアル設定のサービス停止:

シェルから以下のコマンドを入力して、サービスを停止、削除します。

$ sudo systemctl stop serial-getty@ttyS0.service
$ sudo systemctl disable serial-getty@ttyS0.service

 

UARTの登録設定:

/boot/cmdline.txt の最後に次の1行を追加して、UART の登録設定を行います。

enable_uart=1

 

以上の設定が済めば、再起動します。

 

動作確認:

シェルから /proc/device-tree/hat/product, /proc/device-tree/hat/vendor の内容を確認します。正しく認識できていれば、以下のような出力が得られます。

$ more /proc/device-tree/hat/product
Infrared Remote Control Board RPi-IREX
$ more /proc/device-tree/hat/vendor 
RATOC Systems, Inc.

 

次に /dev/ttyS0 が作成されていることを確認します。

$ ls /dev/ttyS0  
/dev/ttyS0

もしコマンドがエラーになった場合は、/boot/cmdline.txt の設定を見直してください。誤りを修正後、再起動し、/dev/ttyS0 の存在を確認します。

 

RPi-IREX用Pythonサンプルファイル:

 

RPi-IREX用サンプルプログラムをダウンロードします。その前に サンプルプログラムの実行に必要な pyserial と RPi.GPIO をインストールします。

 

pyserialのインストール:

以下のコマンドで pyserial をインストールします。

$ sudo pip3 install pyserial

 

RPi.GPIOのインストール:

以下のコマンドで  rpi.gpio をインストールします。

$ sudo pip3 install rpi.gpio

 

サンプルプログラムのダウンロード:

サンプルプログラム irexIn.py と irexOut.py をダウンロードします。これらのプログラムを使うことで、赤外線リモコン信号の学習と送信をコマンドラインから行うことができます。

$ mkdir RPi-IREX 
$ cd RPi-IREX
$ wget https://github.com/ratocsystems/rpi-irex/raw/master/python/irexIn.py  
$ wget https://github.com/ratocsystems/rpi-irex/raw/master/python/irexOut.py

 

ファームウェアバージョン取得:

 

以下のコマンドで RPi-IREX のファームウェアバージョンを取得することができます。

$ python3 irexIn.py -d /dev/ttyS0 -v
/dev/ttyS0で制御を行います
RPi-IREXのファームウェアバージョンを取得します
Firmware Version:01.00

手元の RPi-IREX のファームウェアバージョンは 01.00 でした。

 

赤外線リモコンの信号学習:

 

準備が整いましたので、赤外線リモコンを学習させてみましょう。以下のコマンドを入力して赤外線信号学習モード(LED2が点灯)に入ります。

$ python3 irexIn.py -d /dev/ttyS0 -f irData.json
/dev/ttyS0で制御を行います
赤外線リモコンデータを学習します

上記のように表示されたら、TV のリモコンを赤外線受光部に向けてリモコンの電源ボタンを押してみましょう。

学習が正常に終了しました:0x2

と表示されたら正常に学習できています。学習したデータは、-f オプションで指定したファイルに保存されます。(今回の場合は、irData.json)

なお、15秒以内にリモコンの入力がないとタイムアウトしてしまいます。

タイムアウトしました(15秒):0x3

この場合は、再度学習し直しましょう。

 

赤外線リモコンの信号出力:

 

先ほど学習したデータを使って、今後は RPi-IREX から赤外線リモコンの信号を出力して、TV の電源をオンしてみましょう。

以下のコマンドを入力すると、TV の電源が入ります。(TV の電源が入っていれば切れます。)

$ python3 irexOut.py -d /dev/ttyS0 -f irData.json
/dev/ttyS0で制御を行います
赤外線リモコンデータを送信します
赤外線データは正常に送出されました:0x0

TV のリモコンの電源ボタンを押すのと同じことが、コマンド入力でできるようになりました。

あとは、学習したいリモコンのボタンごとに同じ操作を行って、学習データを揃えていきます。

 

リセット:

 

なお、以下のコマンドで RPi-IREX をリセットすることができます。万一、RPi-IREX が正常動作しなくなった場合にはリセットしてみましょう。

$ python3 irexIn.py -r

 

備考:

以下の GitHub ページにたくさんの資料が用意されています。

https://github.com/ratocsystems/rpi-irex

 

 

関連記事: