【Raspberry Pi】スマートホーム化 : 赤外線リモコン

Raspberry Pi

やりたいこと

以下の記事を参考に自宅でも作れないかを思案することに。

格安スマートリモコンの作り方 - Qiita
材料費400円の赤外線送受信器を、1,800円のラズパイZeroに載せて、Google Homeから操作する方法を、ゼロから丁寧に解説します。安くても高機能むしろ市販のスマートリモコンではできな…
ラズパイとNode-REDでスマートリモコンを作ってみた - Qiita
先日Developers Boost 2019に参加したのですが、そこで講演・展示されていた株式会社マイクロアドさんのブースでRaspberry Pi用拡張基板(赤外線学習リモコン & 温湿度気圧セ…

やりたいこの図(ノートPCのペンで書いた図、我ながらひどい図である)

準備

スマホでも、AmazonEchoでも、RaspberryPiを外部サイトやプログラムと連携させないと話にならない。

当然GPIOのピンから信号を出すにしても学習させることも必要でいろいろ必要である。

部品もない状態からスタートなので、物を買う前に最低限RaspberryPiに対して必要な設定をしておきたい。

諸事情のため、RaspberryPiを外部公開用のサーバーとすることができないので、Slackなどと連携させて、外部との接続はそういったものに任せるとする。

上記記事でもいろいろ使われているが、まずは、Red-Nodeをいれてやれないか試行中である。今後何かするにしても、ブロックプログラミングがあると便利だと思うので。

Node-Red の準備

Setupに関しては以下の記事を作成したので参照してほしい。

回路の準備

参考にしたサイトは以下のところである。丸パクリ

https://qiita.com/takjg/items/e6b8af53421be54b62c9

今回準備したのは以下の回路図である。

真ん中下LED4つ分はあくまでも、動作確認の際に使った部分のため、リモコン機能には不要である。

なので、必要な部分は、IR受信部とIR-LED発光回路のみである。

用意したものは、一旦ブレットボード上で組み立てて動作を確認することとする。

動作確認を完了させてから基板に実装する。

GPIOアクセスための準備

pigpioのインストール

別のものもあるらしいが、これが最も容易で、常にrootでいじらなくてもいいライブラリと聞いて、「pigpio」を使用することに。

インストールと、サービス実行に登録する。

$ sudo apt install pigpio python3-pigpio # パッケージをインストール
$ sudo systemctl enable pigpiod.service  # serivceに登録して起動時に自動で開始
$ sudo systemctl start pigpiod           # 今すぐに起動

IR Record and Playback

赤外線の学習・送信を行うPythonライブラリを持ってくる。

$ wget http://abyz.me.uk/rpi/pigpio/code/irrp_py.zip
$ unzip irrp_py.zip

解凍したirrp.pyを適当なフォルダ(例:/home/pi)に配置する

IR-LEDでリモコンの代わりの動作をさせてみる

リモコン信号の学習をする

Raspberry Piを起動時にGPIOのピンの状態を設定するべく以下の記載を実施

$sudo crontab -u root -e 

# crontabファイルの末尾に以下を追記
@reboot until echo ', 17 w  w 17 0  m 18 r  pud 18 u' > /dev/pigpio; do sleep 1s; done

# GPIO17 → w:output 出力設定を 0:low:defaultに設定
# GPIO18 → r:input  入力設定を u:pull upに設定

使用するGPIOを使う場所によって異なることなので、各自確認お願いいたします。

crontabに関してのコマンドについては以下を参照。

pigpioコマンドの意味ついては以下を参照。

リモコンの赤外線コードを学習するには、以下のコマンドを実行してから、リモコンのONボタンを押します。

python3 irrp.py -r -g18 --no-confirm --post 130 -f (保存ファイル名) (識別子)

# -r              : 学習(Record)モード
# -g18            : GPIO18で信号を読む
# --no-confirm    : 信号の再確認しない(デフォルトだと同じ信号を確認のため2回受信します)
# --post 130      : 学習終了判定するまでの時間間隔を130msとする
# -f              : ファイル名 + 識別子 指定
# (保存ファイル名) : コマンドを格納するファイル
# (識別子)        : コマンドの識別子

それでは、学習を一つ実行してみる。

$ python3 irrp.py -r -g18 --no-confirm --post 35 -f soundbar.irdata power:on
Recording
Press key for 'power:on'

# このタイミングでリモコン信号を送る。

Okay # 読み込みに成功すると出てくる。

これで、「soundbar.irdata」ファイルに「 power:on」のコマンドが記録された。

リモコン信号を送信する

リモコンの代わりにIR信号を送信する場合は以下のコマンドを実行する。

$ python3 irrp.py -p -g17 -f (保存ファイル名) (識別子)

# -p             : 動作(Play)モード
# -g17           : GPIO17で信号を送信する
# -f             : ファイル名 + 識別子 指定
# (保存ファイル名):コマンドを格納するファイル
# (識別子)        :コマンドの識別子

今度はIR-LEDで学習したコマンドを実行してみる。

$ python3 irrp.py -p -g17 -f soundbar.irdata power:on

そうのようにしたら、リモコン動作がしました。(実際に動くのは、示せませんが)

Node-Redから実行してみる

Node-RedおよびそのプラグインであるDashboardを使ってスマホなどからアクセスすることで、リモコンの肩代わりをさせてみる。

リモコンUIを作ってみる+Lチカもしてみた

実際にRaspberry PiにてNode-Redを介してLチカ(LEDチカチカ)は以下のように実施してみた。リモコンUIを表示させ、ボタン動作によってLEDを光るパターンを変えている。

IR送信を動作させるNodeを作る

今回は上記Lチカとは今回は異なり、IRリモコンの肩代わりを実施するので、手を加えておく。

やり方は単純で、buttonexecのコマンドを配置するだけで実施できる。(以下の記事が例)

ラズパイとNode-REDでスマートリモコンを作ってみた - Qiita
先日Developers Boost 2019に参加したのですが、そこで講演・展示されていた株式会社マイクロアドさんのブースでRaspberry Pi用拡張基板(赤外線学習リモコン & 温湿度気圧セ…

execノードにて、最終的に以下のコマンドが実行できるように作る。

python3 irrp.py -p -g17 -f soundbar.irdata power:on

buttonノードの設定

execノードの設定

コマンドの一番最後は「 」スペースが入っている必要があるので注意

msg.payloadの値と組み合わさった時にスペースがなければならないため。

ひたすらIR学習の実施とコマンド実行用のbuttonノードを用意する。

リモコンUIは「http://<raspberry Pi のIPアドレス>:1880:ui」でアクセスすることができる。

UIの設定は上記各buttonノードだけでなく、以下のように編集することができる。

ボタンの配置も図のように配置することでグラフィックから操作できる。

リモコンUIも以下のようになっている。

リモコン完成時

ちなみに2020/5/23時点での私のFlowの最終形態は以下のようになっている。

変数を格納して状態表示などをやりたいので、実際はもう少し面倒な形で実行している。

(まだ活用自体はできていないので、ただまわりくどいやり方をしているだけではあるが)

リモコンUIは同じ画像だが以下のとおりである。

Colour指定とBackGround指定で色を調整すると見やすい。

色指定は以下のサイトから参考にしている。

WEB色見本 原色大辞典 - HTMLカラーコード
色の名前とカラーコードが一目でわかるWEB色見本
外観 : Node-RED日本ユーザ会

Alexaから操作できるようにする<準備中>

準備はAlexaとNode-redの連携することはNode-Redのセットアップに示している。

連携サイトでキーワードを追加して、Alexaノードを追加して、接続することで使用できるようにする。

今回はここまで・・・・

今後更新します。