2017年初めにRaspberry Pi 1 B(256MB)とブレッドボードで作ったものをRaspberry Pi 3 B+とユニバーサル基板にした。Raspberry Pi 3 B+ スマートリモコンできた。今回のはユニバーサル基板載せたので縦置きもできるし電源供給も十分なはず。LANケーブル不要になったのも嬉しい。 pic.twitter.com/OPtffRP9xk
— ebith (@ebith) 2019年1月21日
特徴
- Amazon Echo, ブラウザ, curlなどに対応
- 高強度の発信で天井などに反射して遠くまで届く
- それでも駄目ならLEDの足を折り曲げて直接飛ばす
- 難解なLIRCを使わない
- 赤外線送受信部の総パーツ数は最低4
買い物メモ
Raspberry Pi 3 B+はケースとヒートシンクと送料込みで6000円足らずだったのでPimoroniで買った。
Pibow CoupeのLAN側の穴には六角オネジ・メネジ MB26-11が入らない。
ネジをやすりで削って入れたが力をかけないならそもそも不要そう。でも押すとたわむの気になるので頑張って入れた。
秋月のRaspberry Pi用ユニバーサル基板が便利。基板取付用DCジャックが載りACアダプタから電源供給できるようになっている。
5V4Aというちょうど良い感じに余裕を持たせたACアダプタも売られている。しかもどれも安い。
CPUヘビーな処理をさせる予定があるなら5V25mm角 DCファンみたいなのがあると良さそう。
2個入りのヒートシンクもあるRaspberryPi B+用ヒートシンクセット
- Pimoroni
- ユニバーサル基板一式
- その他部品
- 基板固定用
参照
- 3.3V対応赤外線LED駆動回路決定版 | 電脳伝説 Vintagechips
- 格安スマートリモコンの作り方 - Qiita
- Raspberry Pi Raspbianの pigpioライブラリでエアコン対応の赤外線学習リモコンを作る方法、Goodbye LIRC (ラズパイ Stretchでエアコン対応の赤外線リモコンを動かす、ややこしい LIRCを使わないで IR機器を制御)
- Raspberry Pi GPIO Pinout
本編
pigpio+Pythonで赤外線の記録と再生をし、Node.jsでAPIサーバとブラウザ用クライアントを用意する。
さらにNode-RED経由でAmazon Echoからの音声操作を可能にする。
Raspberry Pi本体のセットアップはほぼ以前の記事のとおり。
config.txtは触らずraspi-config
で設定をするようにしたのと固定IPの設定をしたぐらい。
sudoedit /etc/dhcpcd.conf # interface wlan0 # static ip_address=192.168.0.81/24 # static routers=192.168.0.1 # static domain_name_servers=192.168.0.1
ハードウェア
3.3V対応赤外線LED駆動回路決定版 | 電脳伝説の回路図のとおりでLPC810がRaspberry Piに代わるだけ。真上からの写真も参考になる。
三本足の赤外線受光部やMOSFETは正面左からGPIO, GND, 電源へ繋ぐことになり、MOSFETと電源の間にはLEDと抵抗が入る。
赤外線受光部はBCM 18と3.3VへMOSFETはBCM 17と5Vへ繋ぎ、抵抗は10Ωを選んだ。
pigpio
sudo apt install python3-pip pigpio sudo systemctl enable pigpiod sudo systemctl start pigpiod pip3 install pigpio
赤外線送受信スクリプト
pigpioのサンプルコードがそのまま使える。
wget http://abyz.me.uk/rpi/pigpio/code/irrp_py.zip unzip irrp_py.zip sed -i -e "1 s/python$/python3/g" irrp.py mv irrp_py ~/bin/ irrp.py --record --gpio 18 --file ircodes.json --no-confirm light:on irrp.py --play --gpio 17 --file ircodes.json light:on
APIサーバ
- distributions/README.md at master · nodesource/distributions
- インストール | Yarn
- ebith/Remopi: Scripts for IR remote control on Raspberry Pi
スクリプトを書いたがnode-red-dashboardやexecノードを使ってすべてNode-REDで済ますという手もありそう。
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - sudo apt install nodejs curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list sudo apt update && sudo apt install yarn mkdir ~/.config/remopi mv ircodes.json ~/.config/remopi/ircodes.json vi ~/.config/remopi/commands.json # { "desktop:on": "/home/pi/bin/wol.sh desktop" } git clone https://github.com/ebith/remopi cd remopi yarn && yarn run build sudo ln -s ~/remopi/remopi.service /etc/systemd/system/multi-user.target.wants/remopi.service sudo systemctl daemon-reload sudo systemctl start remopi
Amazon Echo
node-red-contrib-amazon-echoはPhilips Hueをエミュレートすることでそれ単品で完結させていて外部のブリッジなどを必要としない。
その代わりにポート80が必要でAmazon Echoが受け付けるコマンドも限られている。
ポート80はsudo sed -i -e '/^\[Service\]$/a AmbientCapabilities=CAP_NET_BIND_SERVICE' /lib/systemd/system/nodered.service
ではだめだったのでsetcap
した。
sudo setcap cap_net_bind_service=+ep /usr/bin/node bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered) cd ~/.node-red npm install node-red-contrib-amazon-echo sudo systemctl enable nodered.service sudo systemctl start nodered.service
あとはNode-REDのドキュメントやnode-red-contrib-amazon-echoのreadmeを参考に設定する。
付録
pigsコマンドでsocket connect failedする
"socket connect failed" but only if starting pigpiod via systemctl · Issue #203 · joan2937/pigpio
sudo sed -i -e 's/pigpiod -l$/pigpiod -l -n 127.0.0.1/g' /lib/systemd/system/pigpiod.service cat /etc/systemd/system/multi-user.target.wants/pigpiod.service sudo systemctl daemon-reload sudo systemctl restart pigpiod
Rclone (バックアップ)
curl https://rclone.org/install.sh | sudo bash rclone config # https://rclone.org/onedrive/ rclone sync --exclude-from=/home/pi/.config/rclone/ignore.home /home/pi oneDrive:RaspberryPi3B/home echo -e '#!/bin/sh\nrclone sync --config=/home/pi/.config/rclone/rclone.conf --exclude-from=/home/pi/.config/rclone/ignore.home /home/pi oneDrive:RaspberryPi3B/home' | tee -a ~/bin/backupHome chmod 755 ~/bin/backupHome sudo ln -s ~/bin/backupHome /etc/cron.daily/backupHome
Mackerel (死活監視)
sudo mkdir /etc/mackerel-agent/ wget https://github.com/mackerelio/mackerel-agent/releases/download/v0.59.0/mackerel-agent_linux_arm.tar.gz tar xvf mackerel-agent_linux_arm.tar.gz mv mackerel-agent_linux_arm/mackerel-agent ~/bin/mackerel-agent sudo mackerel-agent init -apikey="xxxxxxxx" wget https://raw.githubusercontent.com/mackerelio/mackerel-agent/master/packaging/deb-systemd/debian/mackerel-agent.service vi mackerel-agent.service # ExecStart=/home/pi/bin/mackerel-agent supervise --root $ROOT $OTHER_OPTS sudo mv mackerel-agent.service /etc/systemd/system/multi-user.target.wants/mackerel-agent.service sudo systemctl daemon-reload sudo systemctl start mackerel-agent
CPU温度の監視を追加する
sudo apt install bc wget https://raw.githubusercontent.com/ymyzk/mackerel-plugins/master/raspberrypi/temp.sh chmod 755 temp.sh mv temp.sh ~/bin/temp.sh echo -e '[plugin.metrics.temp]\ncommand = "/home/pi/bin/temp.sh"' | sudo tee -a /etc/mackerel-agent/mackerel-agent.conf sudo systemctl restart mackerel-agent