Raspberry Pi」タグアーカイブ

ラズパイにSquidでキャッシュサーバーを立てる

現在の自宅ではマンションの無料インターネット回線を使っていて、公称100Mbpsである。実測で90Mbps程度は出るようだが、決して早い部類ではない。工事して個別に光回線を引き込めばいいのかもしれないが、初期費用もかかるし月額料金もかかる。その前に現状でできることはやっておきたい。

回線が細いと何が辛いかというと、同じ(巨大な)gitリポジトリーをcloneしたり、でかいバイナリー(GHCとか)を何回も落としてくるのがしんどい。こういうダウンロードするものを何とかして手元にキャッシュできないか。

家にはラズパイやNASが転がっている。これらは常時稼働しているので(最近はNASは止めているが)、これらにキャッシュサーバーを立てるのが良いだろう。

QNAPのNASの一部機種はProxy Serverに対応しているようだが、残念ながらうちにあるやつは非対応だ。それに、どっちみちHTTPSには(オフィシャルには)対応していない。

ということで、ラズパイにプロキシーサーバーを立てることにする。

今使っているラズパイはRaspberry Pi 4の8GBモデル、ストレージはUSB接続のSSD(256GBくらい)だ。OSはUbuntu 22.04を入れている。今回の記事でラズパイらしさは(最後に書く件以外は)ないので、Ubuntuなら同様にできるだろう。

続きを読む

Raspberry PiでI2C接続キャラクターディスプレイを制御する/CPU温度の表示

この間買ったRaspberry Piは基本的にヘッドレス運用(キーボードもディスプレイもつながない)をしている。

ただ、CPUの温度などの、安定動作に関わる情報はリアルタイムで確認できると良い。なので、小型のLCDを取り付けてそこに表示させてみることにした。

続きを読む

Raspberry Pi 4を買った

最近、Raspberry Pi 3を自作HaskellライブラリーのAArch64での動作確認用に使っていた。だが何かとスペックが物足りないので、Raspberry Pi 4の最近新たに出たメモリ8GBモデルに環境を移行することにした。

色々あった結果、ラズパイ本体だけではなくストレージやOS(ディストリ)も変わった:

旧環境

  • Raspberry Pi 3 Model B (メモリ1GB)
  • /: microSD 16GB
  • OS: Ubuntu Server 18.04 LTS 64bit

新環境

  • Raspberry Pi 4 Model B (メモリ8GB)
  • /: USB接続SSD 250GB
  • OS: Ubuntu Server 20.04 LTS 64bit
続きを読む

Raspberry Pi で赤外線リモコン

Raspberry Pi の GPIO に赤外線 LED をつけてリモコンとして使おう。

使ったハードウエア

  • Raspberry Pi Model B
    • 手元にあるのは、初代の、プラスじゃないやつ。microじゃない標準サイズのSDカードが刺さる。
    • Arch Linux が入っている。Raspbian だと若干手順が変わると思われる。
  • 赤外線LED
  • 赤外線リモコン受信モジュール
    • 3.3V で使えるもの。
    • Raspberry Pi を送信側として使うつもりであっても、既存のリモコンの信号を分析するには受信モジュールが必要となる。
  • トランジスター、抵抗、配線、ブレッドボードとか

参考にしたページ

ネット上のブログ記事の情報は古い場合があるし、そもそも環境が違って(Raspbian vs Arch Linux)参考にならないかもしれない。ネットの情報は参考程度にして、ソフトウエアのマニュアル等を参照するのが大切である。

作ったもの(ハードウエア)

使う GPIO の番号は選択の余地があるが、適当に GPIO17=出力 (LED), GPIO27=受信 とした。

ソフトウエア的な手順

Linux で赤外線リモコンの信号を送受信するための LIRC というソフトウエアがあるらしいのでそれを使う。

1. LIRC をインストールする

Arch Linux のパッケージになっているのでラクチン。

# pacman -S lirc

2. 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

3. 受信テスト

mode2 コマンドで、受信したものを吐かせる。

# mode2 -d /dev/lirc0

適当にリモコンを向けて、

space (数字)
pulse (数字)

の羅列が出てきたら多分OK。

4. リモコンを登録

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/

5. 信号を送る

irsend SEND_ONCE (リモコン名) (ボタン名) で信号を送れる。

# irsend SEND_ONCE homeceiling lighter

Raspberry Pi と gPhoto2 で一眼レフを叩く

Raspberry Pi (Arch Linux インストール済み)に一眼レフをUSBで繋いで制御してみよう。

gPhoto2のインストール

# 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 を参照。)

設定を変えた後は再起動が必要かもしれない。

簡単な使い方その2

gPhoto2 で写真を撮ってみる:

$ gphoto2 --capture-image

写真を撮影&ダウンロード:

$ gphoto2 --capture-image-and-download

頑張れば露出とかシャッター速度とかいろいろ設定できそうだが、そういうのはまた今度。

Raspberry Pi じゃなくても

gPhoto2は別にRaspberry Piじゃなくても普通のLinuxとかあるいはOS Xでも動くのだが、お節介なリッチなデスクトップ環境とかが入っていると、そっちの方にカメラの制御権(?)を奪われてしまう場合があるので注意しよう。