
Raspberry Pi Zero WH で定点撮影を実行する
(ヘッダー画像は Gemini で加工して,RPi Zero WH を宇宙に飛ばしています)
用途は置いといて,手元にある Raspberry Pi Zero WH を使って定点観測したいと思い重い腰を上げてみました.なお実際に重い腰はそんなにあがっておらず,ほぼ9割 ChatGPT です.ChatGPT バンザイ.
実際には何をやりたいかを整理してから ChatGPT に相談し,提案された内容を手元で試し,エラーがでたらその都度検索したり ChatGPT に聞いたりした作業を行っています.
最終的に動作したあと,「このサービスの概要や環境などのサービス全体を README.md にまとめてください」と伝え,整理してもらったものが下記の内容になります.
md 形式で出してくれているので,ChatGPT 内のプレビュー画面でも見やすく表示してくれますし,プレビューの内容をコピーしたら note にそのまま見出しなどの情報も維持したままコピーできるので,お手軽です.
昔から言われていると思いますが,これから記事を書くという行為も考えることがメインになり,実際の執筆はAIですね.
※以下 ChartGPT o1 の出力
TeitenKansoku Service
TeitenKansoku は、Raspberry Pi Zero WH と Raspberry Pi OS Lite を使用して様子を定期的に撮影し、指定したディレクトリに保存するサービスです。本サービスは systemd によって管理され、バックグラウンドで動作します。
機能
定期撮影: 1時間おきに写真を撮影。
保存ディレクトリ: 撮影した画像は /home/pi/TeitenKansoku/images に保存されます。
自動再起動: サービスが停止しても systemd により自動再起動されます。
必要な環境
ハードウェア:
Raspberry Pi Zero WH
Raspberry Pi Camera Module
ソフトウェア:
Raspberry Pi OS Lite
Python 3
libcamera と picamera2 のインストール済み
セットアップ手順
1. 必要なパッケージのインストール
以下のコマンドでパッケージをインストールします:
sudo apt update
sudo apt install -y python3-picamera2 python3-libcamera libcamera-apps
2. スクリプトの配置
Python スクリプト camera_capture.py を /home/pi/TeitenKansoku/ ディレクトリに配置してください。
camera_capture.py の内容例
import os
import subprocess
from datetime import datetime
import time
# 保存ディレクトリ
save_directory = "/home/pi/TeitenKansoku/images"
# ディレクトリの存在確認と作成
if not os.path.exists(save_directory):
os.makedirs(save_directory)
# 写真撮影関数
def capture_image():
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
file_path = os.path.join(save_directory, f"{timestamp}.jpg")
command = ["libcamera-still", "-o", file_path, "--timeout", "1000"]
try:
subprocess.run(command, check=True)
print(f"Image captured: {file_path}")
except subprocess.CalledProcessError as e:
print(f"Error capturing image: {e}")
# 定期撮影
def periodic_capture(interval=3600): # デフォルトで1時間おき
while True:
capture_image()
time.sleep(interval)
if __name__ == "__main__":
try:
periodic_capture(interval=3600) # 1時間おきに撮影
except KeyboardInterrupt:
print("サービスを停止します...")
3. サービスファイルの作成
以下の内容を /etc/systemd/system/teiten_kansoku.service として作成します:
[Unit]
Description=TeitenKansoku Camera Service
After=network.target
[Service]
ExecStart=/usr/bin/python3 /home/pi/TeitenKansoku/camera_capture.py
WorkingDirectory=/home/pi/TeitenKansoku
Restart=always
User=pi
Group=pi
[Install]
WantedBy=multi-user.target
4. サービスの有効化
サービスを有効化し、起動します:
sudo systemctl enable teiten_kansoku.service
sudo systemctl start teiten_kansoku.service
サービスの操作方法
サービスの起動
sudo systemctl start teiten_kansoku.service
サービスの停止
sudo systemctl stop teiten_kansoku.service
サービスの再起動
sudo systemctl restart teiten_kansoku.service
サービスの状態確認
sudo systemctl status teiten_kansoku.service
ログの確認
サービスのログは以下のコマンドで確認できます:
journalctl -u teiten_kansoku.service
ディレクトリ構成
/home/pi/TeitenKansoku/
├── camera_capture.py # 撮影スクリプト
├── images/ # 撮影画像の保存先
├── README.md # サービス概要
注意事項
サービスの動作中は、定期的にディスク容量を確認してください。
必要に応じて camera_capture.py 内の撮影間隔や保存先を変更してください。