ラズパイOSMCで音声操作赤外線リモコン

Amazonファミリー会員なのに、プライムビデオを見ないのはもったいないっという動機で、セットアップしたOSMC(Raspberry Pi 3B+)ですが、新型ウィルスによる外出自粛で思いのほか活躍しています。

HDMI連動によりテレビのリモコンからも操作出来るとこが良いですね。あまり見ませんが、YouTubeも見れますし(APIの取得が面倒ですが)。

今回は、OSMCをOSとしたRaspberry Pi 3B+で音声操作できる赤外線リモコンを作成しました。

 

格安スマートリモコンの作り方
https://qiita.com/takjg/items/e6b8af53421be54b62c9

 

以下、参考サイトと言うと、ここを指します。

参考サイトで、RaspbianをOSとしたRaspberry Pi Zeroで音声操作できる赤外線リモコンの作り方が解説されています。最初はラズパイZeroを使って、手順通り進めると、ラズパイ赤外線)とGoogleHomeを使ったテレビの音声操作することができました。

ラズパイZeroで作ったものの、せっかくならテレビの横に常駐しているOSMC(Raspberry Pi 3b+)で音声操作できた方が便利かなと思い、やってみたところ、無事できました。どちらのOSもDebianをベースにしているので、ほぼ同じ手順でいけましたが、いくつかの細かい点で相違があったので記事にします。


とりあえず、購入時の箱に入れて運用しています(ダセェ)。

 

 

目次

 

回路の作成

基板自体はこうなりました。参考サイトとは赤外線の受信ICを接続するピン位置が異なっていて、18ピンではなく、25ピンにしました。その方が収まりがよかったので。計画の画はLEDを3つ別方向に取り付けるつもりでしたが、取り敢えず1つにしてて、しかもプラスマイナスを間違えたので微妙に配線が異なりますorz

また、抵抗は手持ちの関係で、27Ωてはなく22Ωを使っています。今のところはLEDが焼き切れたりはなく、正常に動作してます。

 
 

Sambaのインストール

これはしなくてもいいんですけど、ファイルを送るのに便利なので(今回はファイルはZeroで作成済みだったのでコピペしたかった)。OSMCはGUIからの操作でもSambaをインストール可能なはずですが、私の環境ではなぜかUpdatesエラーになりましたので、SSHでコマンドからインストールしました。

 

OSMCで共有フォルダを設定する(GUIからのSambaインストール)
http://nomux2.com/post-1713/

 

SSHでのインストール。ユーザー名はデフォルトのosmcであることが前提の設定です。

●インストール

sudo apt-get update
sudo apt-get install samba

 

●設定ファイルを開く

sudo nano /etc/samba/smb.conf

末尾に追加

[osmc]
   comment = OSMC
   path = /home/osmc
   guest ok = yes
   read only = no
   browsable = yes
   force user = osmc

 
 

pigpioのインストール

GIPO制御ライブラリpigpioをインストールします。Raspbianの場合はaptからインストールするだけなのですが、OSMCのパッケージリストには含まれていないため、インストール方法が異なります。開発者のサイトの方法に従いインストールします。

●Pythonのセットアップツールのインストール

sudo apt install python3-setuptools

 

●pigpioのインストール

wget https://github.com/joan2937/pigpio/archive/master.zip
unzip master.zip
cd pigpio-master
make
sudo make install

これだけでPythonプログラムは動くのかなぁっと思いましたが(aptにおけるpython3-pigpioがないため)、ちゃんと動きました。
 

●pigpioの開始

sudo pigpiod

停止する場合は

sudo killall pigpiod

 

pigpio library Download & Install(開発者のサイト)
http://abyz.me.uk/rpi/pigpio/download.html

 
 

pigpioの常駐化

aptでのインストールと異なり、常駐するプログラムには登録されていないので、手動で登録します。常駐しない場合は不要です。最初にしなくても、すべてを通して動作を確認した後、最後にしてもよいです。

 

●定義ファイルの作成

sudo nano /etc/systemd/system/pigpiod.service

ファイル内容

[Unit]
Description = pigpio daemon
 
[Service]
ExecStart = /usr/local/bin/pigpiod
Restart = always
Type = forking
 
[Install]
WantedBy = multi-user.target

 

Raspberry Pi 3 systemdでpigpiodの自動起動
https://hakengineer.xyz/2017/09/22/post-318/

 

上記サイト(Raspbian)と異なる点はExecStartのパス。which pigpiodで確認します。

●設定のリロード(ファイルを変更した場合に必要)

sudo systemctl daemon-reload

 

●サービスを認識しているかの確認

sudo systemctl list-unit-files --type=service | grep pigpiod

pigpiod.serviceがあればOK。私の場合はステータスはstaticになってました。
 

●自動起動の有効化

sudo systemctl enable pigpiod.service

無効する場合には

sudo systemctl disable pigpiod.service

 

●確認

sudo systemctl status pigpiod.service

pigpiod.serviceがenabledになっていればOK
 

●サービス開始

sudo systemctl start pigpiod.service

 

 

GPIOピンの設定

17ピンを出力、25ピンを入力に設定します。

echo 'm 17 w w 17 0 m 25 r pud 25 u' > /dev/pigpio

ちなみに、下のような返しがあったらpigpioか開始されていません。
-bash: /dev/pigpio: Permission denied
 

●起動時の自動設定

crontab -e

でファイルを開いて(初めての場合は、どのエディタで編集するか聞かれる)、最後の行に以下の1行を追加して保存。

@reboot until echo 'm 17 w   w 17 0   m 25 r   pud 25 u' > /dev/pigpio; do sleep 1s; done

 

この時点で赤外線の送受信の確認をすべきですが、その辺は参考サイトを見てください。

 
 

nodejsとnpmのインストール

このシステムではslackというチャットサービスを通信サーバーに利用してネット上からラズパイを操作しますが、slack上のメッセージの監視、メッセージに応じた処理の実行にhubotというアプリケーションを使用します。そのhubotの実行にnodejs、インストールにnpmが必要です。
手順としてはnodejs、npmの順にインストールします。

 

nodejsはaptから普通にインストールすると最新版にならず、その後のnpmのインストールに支障をきたすので、下記のコマンドでインストールします。

 

●nodejsのインストール

curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs

現時点で、安定版がv10、開発版がv12なので、v10にしました。

 

●インストールの確認

node -v

バージョンが返ってきます。もし、nodejs -vでは返ってくるものの、nodeではコマンドエラーになる場合は下記をするそう。

sudo ln -s /usr/bin/nodejs /usr/bin/node

 

●npmのインストール

curl -O -L https://npmjs.org/install.sh
sudo sh install.sh

 

●インストール確認

npm -v

ちなみに古いnodejsだと、npmインストール時にSyntaxError(構文エラー)を吐きました。

 

Raspberry Pi 3 Model Bに最新のNode.jsとnpmをインストールする[公式準拠]
https://qiita.com/Avocado/items/512f64428545bf0d94ba

Installing node.js and npm on OSMC on Raspberry Pi
http://unibeaverse.blogspot.com/2015/08/installing-nodejs-and-npm-on-osmc-on.html

curl http://npmjs.org/install.sh | shで失敗する人へ
https://qiita.com/Gaddict/items/af982987cad9e8ca4aab

 
 

hubotのインストール

hubotの他、redisというデータを保管するライブラリと、参考サイトの作者が作ったhubotの拡張スクリプトをインストールします。

 

●hubotのインストール

sudo npm install -g yo generator-hubot

 

●hubotの雛形作成

mkdir homebot
cd homebot
yo hubot
? Owner          # メールアドレスなど、空欄でも可
? Bot name       # 「homebot」と入力
? Description    #  なんでも
? Bot adapter    # 「slack」と入力

 

●redisのインストール

sudo apt install redis-server

 

●拡張スクリプトのインストール

npm install hubot-broadlink-rm

 

●hubotの設定

sudo nano external-scripts.json

ファイル内容

[
  "hubot-heroku-keepalive",  #この行を削除
  "hubot-broadlink-rm",    #この行を追加
]

 

●hubotの不要(非推奨)ファイルの削除

rm hubot-scripts.json

 

●動作確認

bin/hubot
homebot> ping
homebot> PONG

pingと打つとPONGと返ってくる。終了はCtrl+d。

 
 

hubotにコマンド登録

hubotに赤外線送受信のコマンドを登録します(送受信がうまくいくかは事前に参考にサイトに従ってチェック)

 

●送受信プログラム(Python)のダウンロード

curl http://abyz.me.uk/rpi/pigpio/code/irrp_py.zip | zcat > irrp.py

 

●プログラムをhomebot内のbinに移動

mv irrp.py homebot/bin

 

●homebot内にデータ保管フォルダ作成

mkdir data

 

●学習用コマンド作成

sudo nano bin/pi-learn.sh

ファイル内容

#!/bin/sh
name=$1
python3 bin/irrp.py -r -g25 -f data/pigpio.json --no-confirm --post 130 "$name"

 

●実行用コマンド作成

sudo nano bin/pi-send.sh

ファイル内容

#!/bin/sh
name=$1
python3 bin/irrp.py -p -g17 -f data/pigpio.json "$name"

 

●権限の設定

chmod 755 bin/pi-learn.sh bin/pi-send.sh

 

●動作確認

bin/pi-learn.sh tvon
bin/pi-send.sh tvon

 

●hubotにコマンド登録

bin/hubot                                              
homebot>homebot command pi:learn bin/pi-learn.sh '#'
set !pi:learn to bin/pi-learn.sh '#'
homebot>homebot command pi bin/pi-send.sh '#'
set !pi to bin/pi-send.sh '#'

 

●動作確認

homebot> send pi:learn(lightoff)
bin/pi-learn.sh 'lightoff'
Recording
Press key for 'lightoff'
Okay
homebot> send pi(lightoff)
bin/pi-send.sh 'lightoff'

Ctrl+dで終了

 
 

Slackと接続

SlackはPCから設定しました。

●Slackアカウント作成(無料)

 

●hubotアプリを追加
右メニュ→App→hubotと検索→Hubotを追加
 

●TOKENの取得
Hubot→設定→TOKENをコピー
 

●TOKENの設定

nano bin/hubot

ファイル追記

export HUBOT_SLACK_TOKEN=xxxxxxxxxxxxxxxxx  # をexecの前に追加


 

●動作確認

bin/hubot --adapter slack

INFO Logged in as homebot···
と出ていたらOK。Ctrl+cで終了。
 

●Slack起動コマンドの作成

nano bin/homebot.sh

ファイル内容

#!/bin/sh
cd /home/osmc/homebot
sudo bin/hubot --adapter slack

最初は最後の部分をsudo -u osmc bin/hubot --adapter slackとしていましたが下記のエラーがでました。
Sorry, user osmc is not allowed to execute 'bin/hubot --adapter slack' as osmc on osmc.
 

●常駐化登録

sudo nano /etc/systemd/system/homebot.service

ファイル内容

[Unit]
Description = hubot for smart home

[Service]
ExecStart=/home/osmc/homebot/bin/homebot.sh
Restart=always
Type=simple

[Install]
WantedBy=multi-user.target

 

●自動開始設定

sudo systemctl enable homebot

 

●開始

sudo systemctl start homebot

 
 

IFTTTと接続

IFTTTのサービスを利用して、Google HomeからSlack投稿を行います。PC(ウェブサイト)でアカウント登録、設定を試みましたが、登録はできたものの、設定は画面操作がまったくわからずできませんでした。
iPhoneアプリでやるといとも簡単にできたので、アプリで作業することをお勧めします。

●アカウント取得(無料)

 

●アプレットの追加
Make your own Applets from scratch横の+ボタンをタップ
→ This横の+をタップ
 → googleと検索 → Google Assistantを選択
  → Say a simple phraseを選択
   → What do you want to say?に「テレビをつけて」と入力
    LanguageをJapaneseに → Create trigger
→ That横の+をタップ
 → slackと検索 → Slackを選択
  → Post to channelを選択
   → Which channel?をDirect Messages @homebot
    Messageに「send pi(tvoff)」と入力 → Create action
→ Finishをタップ

 
 

いずれ繰り返し処理やちょっと複雑なこともやってみたいですね。

 
 

追記:

繰り返し実行コマンド

例えば、CMを飛ばすときに30秒を5回実行するとか、そんな繰り返し処理を実装してみました。

●コマンドファイル作成

cd homebot
nano bin/pi-repeat.sh

ファイル内容

#!/bin/sh
set -- $1
name=$1
repeat_n=$2
for i in `seq $repeat_n`
do
python3 bin/irrp.py -p -g17 -f data/pigpio.json "$name"
sleep 1s
done

 

●hubotにコマンド登録

sudo systemctl stop homebot
bin/hubot                                              
homebot>homebot command pi:repeat bin/pi-repeat.sh '#'
set !pi:learn to bin/pi-repeat.sh '#'
#Ctrl+dでhubot終了
sudo systemctl start homebot

 

●動作確認
Slackで以下のテキストをhomebotに投稿

send pi:repeat(tvskip,5)

 

●IFTTTにアプレット追加
Make your own Applets from scratch横の+ボタンをタップ
→ This横の+をタップ
 → googleと検索 → Google Assistantを選択
  → Say a phrase with a numberを選択
   → What do you want to say?に「ビデオスキップ # 回」と入力
    LanguageをJapaneseに → Create trigger
→ That横の+をタップ
 → slackと検索 → Slackを選択
  → Post to channelを選択
   → Which channel?をDirect Messages @homebot
    Messageに「send pi:repeat(tvskip,NumberField)」と入力 → Create action
→ Finishをタップ

コメントを残す

メールアドレスが公開されることはありません。