見出し画像

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 内の撮影間隔や保存先を変更してください。


いいなと思ったら応援しよう!