Raspberry pi をスマートリモコンにする
赤外線センサー(ELEGOOのセンサーキットに付属していた)と赤外線LED(Amazonで買ったけど品質が悪すぎて返品中)を使ってスマートリモコンを作ろうと思います。
参考にする記事はこちら。格安スマートリモコンの作り方。 手順通りにインストール、作業を進めていきます。これによると、pigpioというGPIOを操作するライブラリがあり、この作成者が赤外線リモコンの送信波形をキャプチャし、赤外線LEDを波形通りに光らせることでリモコンにすることが可能になるコードを公開しているみたいです。
ちなみに、エアコンの長い赤外線コードに対応した学習リモコンを作る で紹介されているように、エアコンの場合はコードが長いので、他のプログラムを使うといいみたいです。いずれは Twitter経由で家電を動かせるようにした話【新歓ブログリレー2020 64日目】 や ラズパイに初めて触る人が、Slackから自宅のエアコンを制御する みたいなことをしてみたいです。
スマートリモコンって、買うと2000円はするし、複数の部屋に置こうと思ったらまたお金がかかるので、自作したいですね。こんなものも作れる、というのがRaspberry pi 、Arduinoはじめとしたマイコンの魅力だと思っています。
さて、作業を始めます。
pi@raspberrypi:~/pythons $ sudo apt-get install pigpio
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
pigpio はすでに最新バージョン (1.71-0~rpt1) です。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 62 個。
pi@raspberrypi:~/pythons $ sudo systemctl enable pigpiod.service
pi@raspberrypi:~/pythons $ sudo systemctl start pigpiod
pi@raspberrypi:~/pythons $ pip install pigpio
Looking in indexes: https://pypi.org/simple, https://www.piwheels.org/simple
Requirement already satisfied: pigpio in /usr/lib/python2.7/dist-packages (1.44)
pi@raspberrypi:~/pythons $ echo 'm 17 w w 17 0 m 18 r pud 18 u' > /dev/pigpio
bash: /dev/pigpio: 許可がありません
いつも通り、エラーです。なんなんでしょうね、このエラーしか起きないやつ。
Raspberry PiのGPIO制御方法を確認する(GPIO制御編その1) このページを見て、
pi@raspberrypi ~ $ sudo echo 18 > /sys/class/gpio/export
とかしても全然エラーが取れません。というか、
python3 irrp.py -r -g18 -f codes light:on --no-confirm --post 130
これをしても、何にも表示が出ず、Ctrl + cで止めると、
pi@raspberrypi:~/pythons $ python3 irrp.py -r -g26 -f codes light:on --no-confirm --post 130
^CTraceback (most recent call last):
File "irrp.py", line 357, in <module>
pi = pigpio.pi() # Connect to Pi.
File "/usr/lib/python3/dist-packages/pigpio.py", line 5071, in __init__
self._notify = _callback_thread(self.sl, host, port)
File "/usr/lib/python3/dist-packages/pigpio.py", line 1102, in __init__
self.lastLevel = _pigpio_command(self.sl, _PI_CMD_BR1, 0, 0)
File "/usr/lib/python3/dist-packages/pigpio.py", line 994, in _pigpio_command
dummy, res = struct.unpack('12sI', sl.s.recv(_SOCK_CMD_LEN))
と出てきます。これ、pigpioを読んですぐハングしてるみたいです。色々調べても出てこない…。そして、pigpiodが起動できない で質問者が使っているコマンドを私も使ってみることに。(というか気が付けよ、status見るってことに。。。)
すると
pi@raspberrypi:~/pythons $ sudo systemctl stop pigpiod
pi@raspberrypi:~/pythons $ sudo systemctl restart pigpiod
pi@raspberrypi:~/pythons $ sudo systemctl status pigpiod
● pigpiod.service - Daemon required to control GPIO pins via pigpio
Loaded: loaded (/lib/systemd/system/pigpiod.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Thu 2020-12-17 21:36:17 JST; 2s ago
Process: 2055 ExecStart=/usr/bin/pigpiod -l (code=exited, status=0/SUCCESS)
Main PID: 2056 (code=exited, status=1/FAILURE)
12月 17 21:36:17 raspberrypi systemd[1]: Starting Daemon required to control GPIO pins via pigpio.
12月 17 21:36:17 raspberrypi systemd[1]: Started Daemon required to control GPIO pins via pigpio.
12月 17 21:36:17 raspberrypi pigpiod[2055]: 2020-12-17 21:36:17 initInitialise: bind to port 8888
12月 17 21:36:17 raspberrypi pigpiod[2055]: Can't initialise pigpio library
12月 17 21:36:17 raspberrypi systemd[1]: pigpiod.service: Main process exited, code=exited, status
12月 17 21:36:17 raspberrypi systemd[1]: pigpiod.service: Failed with result 'exit-code'.
lines 1-12/12 (END)
initInitialise: bind to port 8888 この辺でエラーが起きてる…。
そういえば、他の記事でDockerを入れてみるときに、
docker: Error response from daemon: driver failed programming external
connectivity on endpoint fervent_elbakyan
Error starting userland proxy: listen tcp 0.0.0.0:8888:
bind: address already in use.
ERRO[1649] error waiting for container: context canceled
とあったことを思い出し、さらに他の記事でjupyter labをポート8888で立ち上げてることを思い出しました。
pi@raspberrypi:~/pythons $ lsof -i -P | grep "LISTEN"
jupyter-l 376 pi 4u IPv4 22540 0t0 TCP *:8888 (LISTEN)
jupyter-l 376 pi 5u IPv6 22541 0t0 TCP *:8888 (LISTEN)
pulseaudi 1354 pi 43u IPv6 28387 0t0 TCP *:4713 (LISTEN)
pulseaudi 1354 pi 45u IPv4 28388 0t0 TCP *:4713 (LISTEN)
pi@raspberrypi:~/pythons $ sudo systemctl disable jupyter.service
Removed /etc/systemd/system/multi-user.target.wants/jupyter.service.
pi@raspberrypi:~/pythons $ lsof -i -P | grep "LISTEN"
jupyter-l 376 pi 4u IPv4 22540 0t0 TCP *:8888 (LISTEN)
jupyter-l 376 pi 5u IPv6 22541 0t0 TCP *:8888 (LISTEN)
pulseaudi 1354 pi 43u IPv6 28387 0t0 TCP *:4713 (LISTEN)
pulseaudi 1354 pi 45u IPv4 28388 0t0 TCP *:4713 (LISTEN)
pi@raspberrypi:~/pythons $ kill 376
pi@raspberrypi:~/pythons $ lsof -i -P | grep "LISTEN"
pulseaudi 1354 pi 43u IPv6 28387 0t0 TCP *:4713 (LISTEN)
pulseaudi 1354 pi 45u IPv4 28388 0t0 TCP *:4713 (LISTEN)
pi@raspberrypi:~/pythons $
さよなら、jupyter lab。。。と思ったら、
pi@raspberrypi:~/pythons $ lsof -i -P | grep "LISTEN"
pulseaudi 1354 pi 43u IPv6 28387 0t0 TCP *:4713 (LISTEN)
pulseaudi 1354 pi 45u IPv4 28388 0t0 TCP *:4713 (LISTEN)
jupyter-l 2104 pi 4u IPv4 37189 0t0 TCP *:8888 (LISTEN)
jupyter-l 2104 pi 5u IPv6 37190 0t0 TCP *:8888 (LISTEN)
pi@raspberrypi:~/pythons $ sudo systemctl disable jupyter.service
^[[Api@raspberrypi:~/pythons $ sudo systemctl stop jupyter.service
pi@raspberrypi:~/pythons $ lsof -i -P | grep "LISTEN"
pulseaudi 1354 pi 43u IPv6 28387 0t0 TCP *:4713 (LISTEN)
pulseaudi 1354 pi 45u IPv4 28388 0t0 TCP *:4713 (LISTEN)
pi@raspberrypi:~/pythons $
復活してたので、きちんとstopさせました(サービスについて不勉強がバレました)
そしたら、
pi@raspberrypi:~/pythons $ sudo systemctl status pigpiod
● pigpiod.service - Daemon required to control GPIO pins via pigpio
Loaded: loaded (/lib/systemd/system/pigpiod.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-12-17 21:51:26 JST; 4s ago
Process: 2160 ExecStart=/usr/bin/pigpiod -l (code=exited, status=0/SUCCESS)
Main PID: 2161 (pigpiod)
Tasks: 4 (limit: 4915)
CGroup: /system.slice/pigpiod.service
└─2161 /usr/bin/pigpiod -l12月 17 21:51:26 raspberrypi systemd[1]: Starting Daemon required to control GPIO pins via pigpio...
12月 17 21:51:26 raspberrypi systemd[1]: Started Daemon required to control GPIO pins via pigpio.
はい、動きました。
ここから続き、と行きたいですが、リモコンとなるLEDがないため中断です。(返品したLEDを使ったところ、今回参考にした記事通りうまくできました)
この記事が気に入ったらサポートをしてみませんか?