見出し画像

Eclipse ShooterのためのRaspberry Pi環境構築

こちらのnoteで紹介した Eclipse Shooter のためのRaspberry Pi環境構築手順を備忘録としてまとめておきます。

こちらに記載されている内容は 2023/12/6 現在のテスト結果です。


1. OSイメージの書き込み

まず、初めにRaspberry Pi Imagerを使ってMicroSDカードにOSのイメージを書き込みます。

Raspberry Pi OS 公式サイトよりRaspberry Pi Imager をダウンロードし、インストールし、起動します。(使用するOSによってWindows用、macOS用、Ubuntu用などがあります)

Raspberry Pi Imagerを起動後、イメージを選択します。私のRaspberry Piは 3B+というモデルですので、「デバイスを選択」の欄ではRASPBERRY PI 3を選び、OSはGUIの無いRASPBERRY PI OS(LEGACY) LITEを選び、最後に書き込み先ストレージとしてPCに接続したカードリーダー(MicroSDカード挿入)を選びました。

Select OS

次へ、ボタンを押すとカスタム設定を行うか聞かれますので、

「設定を編集する」ボタンを押して、出てきたダイアログでユーザー名や設定中に使用するwifiなどを指定しておき、サービスのタブで「SSHを有効化する」にチェックを入れておきましょう。

設定を保存後、「はい」を押して書き込みを開始します。

最終確認
書き込み中

指定されたOSイメージがネット上からダウンロードされてMicroSDカードに書き込まれます。

書き込み完了

取り出したMicroSDカードをRaspberry Pi に差し込み、起動させると数回の再起動の後、使用できるようになります。

HDMIにモニタをつなげばコンソールが表示されます

書き込みの際「SSHを有効化する」にチェックを入れておいたので、SSH(Port22)へ接続してログインすることが可能です。

SSHクライアントソフト Termius での接続例

Raspberry Piに割り当てられているIPアドレスが分からない場合や、SSHを使いたくない場合にはHDMIにモニタをつなぎ、USBにキーボードでもつなげば、キーボードからのログインも可能です。

ip a 

ip a コマンドなどでIPアドレスを確認することが出来ます。

2. vimのインストール

設定を行うために vim エディタをインストールします。
Raspberry Piに標準でインストールされているテキストエディタ「nano」を使っても良いのですが、個人の好みで vim エディタをインストールしました。
まず、sudo apt-get update でインストール可能なパッケージの「一覧」を更新しておいて、vimのパッケージをインストールします。

sudo apt-get update
sudo apt-get install vim -y
vimのインストール

vim の使い方は…適当にググってください。nanoで編集しても全然かまいません。

3. LANポートの固定IP化

Raspberry Pi デフォルトの状態だと wlan 側も ether 側もDHCPサーバーでIPアドレスを取得して動くようになっており、屋外で使用する際にwifiアクセスポイントやLAN環境が無い場合にはIPアドレスが割り振られずアクセスできません。
また、どのアドレスが割り当てられているか分かりづらいこともあります。(キーボードでログインして ip a コマンドなどで見ることは出来ますが面倒)

対策として、今回はLAN側のIPアドレスに固定IPを割り当てて、それに有線接続したPCから容易にアクセスできるようにDHCPサーバーを稼働させておくことにします。

まず、IPアドレスを固定化させます。vimなどのエディタで /etc/dhcpcp.conf を編集します。

sudo vim /etc/dhcpcd.conf

そして、ファイルの最後に以下の行を追加します。(途中あたりにあるExample static IP configuration: の欄のコメントを外して利用してもOKです)

interface eth0
static ip_address=192.168.0.10/24

次にDHCPサーバーをインストールします。

sudo apt-get install dnsmasq -y

dnsmasqは小規模ネットワーク向けのDNS/DHCP/TFTPサーバーです。

インストール後に、/etc/dnsmasq.conf を編集します。

sudo vim /etc/dnsmasq.conf

ファイルの最後の箇所に以下の設定を追加します。(カンマとコロンの違いに注意)

interface=eth0
dhcp-range=192.168.0.100,192.168.0.200,255.255.255.0,12h

設定完了後 reboot コマンドで Raspberry Piを再起動させましょう。IPアドレスが固定IPアドレスになります。

4. WANポート側の設定

WANポート側で接続するアクセスポイント(およびパスワード)などはRaspberry Pi Imagerで書き込む前に設定したものが書き込まれていますが、変更したい場合などは設定が /etc/wpa_supplicant/wpa_supplicant.conf に書かれていますので、

sudo vim /etc/wpa_supplicant/wpa_supplicant.conf

などで設定を変更し

sudo reboot

でラズベリーパイを再起動させます。

5. pipのインストール

Raspberry Piには標準でpythonの3.9.2がインストールされています。(2024/2/19現在)

python -V でバージョン確認

しかし、ライブラリパッケージを管理する pipがインストールされていないので、インストールしておきましょう。

sudo apt-get install pip -y
インストール中
pip -V で python3.9用のパッケージがインストールされていることを確認

6. tmuxのインストール

tmux はターミナルマルチプレクサ(Terminal Multiplexer) の略で、Linux 系のターミナル画面を複数のセッション、ウィンドウ、ペインに分割して利用することができるソフトです。
SSHのセッションを切ってもバックグラウンドで動作するので、ターミナル操作のために接続したPCを切っていても目的のソフトを稼働し続けることが出来るので、連続撮影のような長時間の運用時には使用することをお勧めします。

tmuxのもとで稼働させていない場合には何らかのトラブルでネットが切断しただけで、そのターミナルで稼働しているソフトは停止してしまいます。

インストールは apt-get を利用して、

sudo apt-get install tmux -y

でインストールしてください。
tmuxの使い方は…いろいろネットに説明がありますのでググってみてください。

tmuxのインストール

7. GPhoto2のインストール

今回使用するカメラコントロールライブラリ GPhoto2 をインストールします。

こちらで公開されているスクリプトを使用して、下記のコマンド1行でインストールが完了します。

wget https://raw.githubusercontent.com/gonzalo/gphoto2-updater/master/gphoto2-updater.sh && wget https://raw.githubusercontent.com/gonzalo/gphoto2-updater/master/.env && chmod +x gphoto2-updater.sh && sudo ./gphoto2-updater.sh

途中でインストールするバージョンを聞かれますので、「Install last stable release」を選びます。

Install last stable release
インストール中、なんかwarning出てるけど無視しておく

しばらく待つと(結構待つと)インストール(コンパイル)が完了します。
私のRaspberry Piの環境だと13分程度かかりました。

それなりにガンガンCPU使ってコンパイルしますので、注意してください。(私は電源供給が不十分なACアダプタを使っていて、undervoltageのエラーが出て途中でRaspberry Piがダウンしました。どうしてコンパイル完了しないのか最初は分かりませんでしたが、コンパイル画面をずっと注視していてやっと電源容量不足だと気づきました。)

インストール完了
This version of gphoto2 is using the following software versions and options:
gphoto2         2.5.28         gcc, popt(m), exif, no cdk, no aa, no jpeg, no readline
libgphoto2      2.5.31         standard camlibs (SKIPPING docupen lumix), gcc, no ltdl, EXIF
libgphoto2_port 0.12.2         iolibs: disk ptpip serial usb1 usbdiskdirect usbscsi, gcc, no ltdl, EXIF, USB, serial without locking

と表示されればインストール完了です。(2024/2/19現在の表示)

カレントフォルダに出来ている gphoto2-updater.sh というスクリプトファイルはもう不要ですので、

rm gphoto2-updater.sh

で削除しておきましょう。

8. カメラとの接続確認

Raspberry PiのUSBポートにサポートされているカメラを接続し、電源を入れます。
サポートされているカメラのリストはこちら。
http://www.gphoto.org/proj/libgphoto2/support.php

接続されると、"/var/log/messages"にログが残りますので、

cat /var/log/messages

コマンドなどで表示して確認してみましょう。

gphoto2 --summary

コマンドでカメラ情報を表示したり、

gphoto2 --capture-image

コマンドで撮影をしてみたりしてテストしてみましょう。

9. 必要なライブラリのインストール

eclipse_shooterを稼働させるにはPythonのpandasライブラリおよびnumpyライブラリなどが必要です。

しかしながら、最新のpandasが要求する最新(1.22.4以降の)numpyはRaspberry Piにインストールする際に問題がある場合があります。
参考:https://numpy.org/devdocs/user/troubleshooting-importerror.html

上記のトラブルシューティングに沿って、まずはRaspberry Piで稼働できるnumpy を下記のコマンドでインストールします。

sudo apt-get install libatlas-base-dev -y
sudo apt-get install python3-numpy

次に、インストールした numpy と互換性のある pandas (ver 1.4.4以前) をインストールします。

pandas のバージョンを指定してインストールしましょう。

pip install pandas==1.4.4

最後に gphoto2ライブラリ、openpyxlライブラリなどをインストールします。

pip install gphoto2 openpyxl
インストール完了

10. eclipse_shooterのダウンロード

SFTPなどの方法を使ってPCからRaspberry Piにアップロードしても結構ですし、wgetを使って、eclipse_shooterのgithubからファイル(Pythonのコードと、設定用エクセルファイル)をダウンロードして来ることも可能です。

wget https://raw.githubusercontent.com/kiy0sh/eclipse_shooter/main/eclipse_shooter.py
wget https://github.com/kiy0sh/eclipse_shooter/raw/main/usa_eclipse.xlsx
ダウンロード

 11. 動作確認

eclipse_shooterを実行する前に、日食の起こる時刻に時計を設定します。
dateコマンドで指定の時刻に設定することが可能ですが、Raspberry Piがインターネットに接続されている状態だと、定期的にネット上のNTPサーバーに接続されて、自動的に時刻が正しい現在時刻に修正されてしまいます。

そのため、まずは自動的に時刻修正することを止める必要がありので、

sudo timedatectl set-ntp false

を実行しましょう。
その後、

sudo date -s "2024/4/8 12:41 CST"

のように現地時間(アメリカ中部標準時 12:41)で指定してみます。
設定結果はシステムのローカルタイム(JST)で表示され03:41になっているのが分かります。

(サンプルのエクセルファイルで指定している)第2接触直前くらいの時間になりました。

では eclipse_shooter.py を実行してみましょう。

python eclipse_shooter.py

動作させると、ちょうどサンプル設定ではダイアモンドリング直前の時間ですので、このような感じで撮影が行われます。

時刻は UTC 基準で計算して動作しますので、システムのタイムゾーンには依存しないようになっています。(dateコマンドで表示される時刻はJSTになっていますが、実行時の画面に表示されるのはUTC時間です)

ソースコード内の下記の部分に撮影後のウェイト設定があります。
機種によって必要なウェイトは異なるようですので、実際にエラー無く撮影できるウェイト時間を調べておくと良いでしょう。

必要なウェイト時間とカメラのお値段は反比例しているようです。
高価なカメラを用意すると皆既中の限られた時間により多くの撮像が出来るかもしれません(笑)

この記事が気に入ったらサポートをしてみませんか?