この間買ったRaspberry Piは基本的にヘッドレス運用(キーボードもディスプレイもつながない)をしている。
ただ、CPUの温度などの、安定動作に関わる情報はリアルタイムで確認できると良い。なので、小型のLCDを取り付けてそこに表示させてみることにした。
続きを読むこの間買ったRaspberry Piは基本的にヘッドレス運用(キーボードもディスプレイもつながない)をしている。
ただ、CPUの温度などの、安定動作に関わる情報はリアルタイムで確認できると良い。なので、小型のLCDを取り付けてそこに表示させてみることにした。
続きを読む最近、Raspberry Pi 3を自作HaskellライブラリーのAArch64での動作確認用に使っていた。だが何かとスペックが物足りないので、Raspberry Pi 4の最近新たに出たメモリ8GBモデルに環境を移行することにした。
色々あった結果、ラズパイ本体だけではなくストレージやOS(ディストリ)も変わった:
旧環境
新環境
Raspberry Pi の GPIO に赤外線 LED をつけてリモコンとして使おう。
ネット上のブログ記事の情報は古い場合があるし、そもそも環境が違って(Raspbian vs Arch Linux)参考にならないかもしれない。ネットの情報は参考程度にして、ソフトウエアのマニュアル等を参照するのが大切である。
使う GPIO の番号は選択の余地があるが、適当に GPIO17=出力 (LED), GPIO27=受信 とした。
Linux で赤外線リモコンの信号を送受信するための LIRC というソフトウエアがあるらしいのでそれを使う。
Arch Linux のパッケージになっているのでラクチン。
# pacman -S lirc
/boot/config.txt
を編集して、 LIRC をロードする。
/boot/overlays/README
を参照。例として lirc が書いてあった。
# nano /boot/config.txt
dtoverlay=lirc-rpi,gpio_out_pin=17,gpio_in_pin=27
を書き加える。
lirc をロードするのに modprobe
を叩いたり /etc/modules
を編集したりは、しない。
(この辺で再起動をかける?)
systemctl start で lircd を起動する。systemctl enable するとラズパイの起動時に自動で起動してくれるはず。
# systemctl start lircd
mode2 コマンドで、受信したものを吐かせる。
# mode2 -d /dev/lirc0
適当にリモコンを向けて、
space (数字)
pulse (数字)
の羅列が出てきたら多分OK。
irrecord コマンドを使い、リモコンの信号をファイルに記録する。
# irrecord -n -d /dev/lirc0 lircd.conf
メッセージの指示に従う。
途中で、 Enter name of remote と聞かれたので、 homeceiling と入力した。出力ファイル名は homeceiling.lircd.conf となった。
Enter name of remote (only ascii, no spaces) :homeceiling Using homeceiling.lircd.conf as output filename
個別のボタンを登録する段になって Something went wrong: Cannot decode data
といわれ、最後に Try using the -f option.
と出てきたので、 -f
オプションをつけて再実行した。
# irrecord -n -f -d /dev/lirc0 lircd.conf
homeceiling.lircd.conf
ができた。
# cp homeceiling.lircd.conf /etc/lirc/lircd.conf.d/
irsend SEND_ONCE (リモコン名) (ボタン名)
で信号を送れる。
# irsend SEND_ONCE homeceiling lighter
Raspberry Pi (Arch Linux インストール済み)に一眼レフをUSBで繋いで制御してみよう。
# pacman -S gphoto2
違うディストリ/パッケージマネージャーでも、何かしら gphoto2 みたいなパッケージはあると思う。
接続されたデバイスの一覧を見る:
$ gphoto2 --list-ports Devices found: 3 Path Description -------------------------------------------------------------- ptpip: PTP/IP Connection usb:001,005 Universal Serial Bus usb:001,003 Universal Serial Bus
機種名を表示:
$ gphoto2 --auto-detect Model Port ---------------------------------------------------------- Canon EOS 600D usb:001,005
EOS 600DというのはEOS Kiss X5のことで、同じ製品でも日本と海外で名前が違うとかいうアレだ。
では、 gphoto2 --summary
でもっと詳しい情報を取得してみよう。
$ gphoto2 --summary *** Error *** An error occurred in the io-library ('I/O problem'): No error description available *** Error (-7: 'I/O problem') *** For debugging messages, please use the --debug option. Debugging messages may help finding a solution to your problem. If you intend to send any error or debug messages to the gphoto developer mailing list <gphoto-devel@lists.sourceforge.net>, please run gphoto2 as follows: env LANG=C gphoto2 --debug --debug-logfile=my-logfile.txt --summary Please make sure there is sufficient quoting around the arguments.
なんかエラーが出た。
しかし、このエラーはハードウエアの問題とかgPhoto2の問題ということとも限らない。なぜなら、
$ sudo gphoto2 --summary
としてみたり、
$ lsusb | grep Canon Bus 001 Device 005: ID 04a9:3218 Canon, Inc. EOS 600D / Rebel T3i (ptp) $ ls -l /dev/bus/usb/001/005 crw-rw-r-- 1 root root 189, 4 Feb 14 18:23 /dev/bus/usb/001/005 $ sudo chgrp users /dev/bus/usb/001/005 $ gphoto2 --summary
みたいな感じで /dev/bus/usb/ほにゃらら/ほにゃらら
のグループを変えてやるとうまくいく。つまり、USBデバイスのパーミッション的な問題だということだ。
そこで、 udev の設定をいじる。Arch WikiのDigital Camerasのページを参考にして、
# groupadd camera # /usr/lib/libgphoto2/print-camera-list udev-rules version 175 group camera > /etc/udev/rules.d/40-gphoto.rules # usermod -a -G camera (自分)
みたいなことをやったらうまくいった。(自分の環境だと 40-gphoto.rules
というファイルは /usr/lib/udev/rules.d/40-gphoto.rules
に既に存在したが、/etc/udev/rules.d/
に同名のファイルを置くとそっちの方が優先される。この辺は man udev を参照。)
設定を変えた後は再起動が必要かもしれない。
gPhoto2 で写真を撮ってみる:
$ gphoto2 --capture-image
写真を撮影&ダウンロード:
$ gphoto2 --capture-image-and-download
頑張れば露出とかシャッター速度とかいろいろ設定できそうだが、そういうのはまた今度。
gPhoto2は別にRaspberry Piじゃなくても普通のLinuxとかあるいはOS Xでも動くのだが、お節介なリッチなデスクトップ環境とかが入っていると、そっちの方にカメラの制御権(?)を奪われてしまう場合があるので注意しよう。