0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Raspberry Pi 5にリボン接続カメラとGPIO物理ボタンをくっつけて写真とるまで。

Last updated at Posted at 2025-10-23

Raspberry Pi 5と公式カメラをつないで、「ボタンを押したら写真が撮れる」──。
やってみると簡単そうに見えるけど、実際は小さな地雷がたくさん転がっていました。

この記事は、私がPermission deniedFileNotFoundErrorGPIO busy、そしてLow voltage warningと戦いながら、ようやく一枚の写真を撮れるようになった過程の記録です。

同じように詰まっている人に、少しでも届けばうれしいにゃ〜🐱


🧩 環境

  • Raspberry Pi 5 Amazon
  • カメラモジュール v3 Amazon
    Raspberry Pi5は以前とリボン形状が変わったので注意。
  • GPIO 17 にタクトスイッチを接続(GNDと直結)
  • Raspberry Pi OS (Bookworm)
    公式HPからゲットだぜ
  • Python 3.11
  • エディタ:Geany
    最初から標準装備。他のテキストエディタでも良い。

🎯 目標

ボタンを押したら写真を撮り、~/Pictures フォルダに保存する。
それだけ。だけど奥が深い。ようこそ地獄の入り口へぇぇぇっ!


⚙️ 1. 準備

まずは必要なライブラリをインストール:

sudo apt update
sudo apt install python3-gpiozero python3-picamera2

raspi-config でカメラを有効化して、GPIOも有効にします。
Raspberry Pi 5はカメラ設定が少し変わっていて、libcameraベースになっているのがポイントにゃ。

そして配線。
写真載っけとくので、見た通りに配線するにゃ。

image.jpeg

GPIO17を使用


💡 最初のスクリプト

from gpiozero import Button
from picamera2 import Picamera2
from datetime import datetime
from pathlib import Path
import time

# Save destination: use ~/Pictures
save_dir = Path.home() / "Pictures"
save_dir.mkdir(parents=True, exist_ok=True)

# Button (GPIO17) connected to GND
button = Button(17, pull_up=True, bounce_time=0.05)  # Debounce to prevent multiple triggers

picam2 = Picamera2()
picam2.start()

print("Press the button to take a photo. Press Ctrl+C to exit.")

def shoot():
    filename = save_dir / f"capture_{datetime.now().strftime('%Y%m%d_%H%M%S')}.jpg"
    picam2.capture_file(str(filename))
    print(f"Photo saved: {filename}")

button.when_pressed = shoot

try:
    while True:
        time.sleep(0.2)
except KeyboardInterrupt:
    picam2.close()

コード的には完璧に見える。でも、実際に実行すると……動かない。笑


💥 最初の壁:「Permission denied」

Geanyで実行したら黒いターミナルにこう出た:

Permission denied
(program exited with code: 126)

画像.jpg

シンプルに、実行権限がなかっただけ。
Pythonスクリプトは「シェルスクリプトじゃない」ので、chmod +xを付ける必要はなかったけど、Geanyが一時スクリプトとして実行しようとしていたにゃ。

解決策はこれ:

python3 camerabutton.py

Geanyの「Build → Set Build Commands」で実行コマンドを python3 "%f" に直したらスッキリ。


💥 次の壁:「FileNotFoundError」

FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/Pictures/…'

原因は単純。ユーザー名をパスに入れ忘れてた。
だから /home/pi/ なんてフォルダは存在しなかったにゃ。

修正:

save_dir = Path.home() / "Pictures"
save_dir.mkdir(parents=True, exist_ok=True)

これでユーザーを問わず動作するようになった。ちょっとしたちっちゃいことだけど地味に嬉しい改善にゃ〜


⚠️ 警告:「Control Rotation is not advertised by libcamera」

次に、カメラ映像を180度回転させようと picam2.set_controls({"Rotation": 180}) を入れたら、怒られた。

RuntimeError: Control Rotation is not advertised by libcamera

Raspberry Pi 5ではドライバがまだ完全対応していなかったにゃ。
撮影後にPillowで画像を回転させる方法もあるけど、結論:回転させない方が早い
動くものに余計なことすんなという名言を思い出す。


💥 AIに騙されるな!最大の壁:「GPIO busy」

最後の難関がこれ。

gpiozero.pins.pigpio.PinFactoryError: GPIO busy

これはGPIO17が他のプロセスに掴まれていることを意味していた。

修正方法がわからず、天下のChatGPT5様にお伺いを立てることに。

子曰く、

Raspberry Pi 5では、pigpiodデーモンが裏で動いていることが多く、それがgpiozeroと衝突する。

解決策はこれ:

sudo killall pigpiod
sudo pkill -f python

さらに、起動時にpigpiodを無効化:

sudo systemctl stop pigpiod
sudo systemctl disable pigpiod

....と君はAIから指示されるだろう!

実際はこんな面倒なことはなく、単に、前GeenyでrunさせてたコードがGPIOを塞いでただけ。
🧞‍♂️←コイツが元凶

なんでもAIの言うことを鵜呑みにせず、目の前のモニターを見ろ!

本当の解決策はGeanyのStopボタンを押すだけだ!

これでGPIOが解放され、ボタンが無事動作した。押すたびにカメラが機能し、写真が保存される。
こんな簡単なことに、いちいち感動できるのがラズパイの醍醐味にゃん


⚡ 「Low voltage warning」

右上に突然出る「⚡ Low voltage warning」。
これは電圧が4.63V以下になった警告で、カメラとGPIOを同時に使うとよく出る。

対策:5V 3A以上の電源アダプタ(できればUSB-C PD対応)を使う

が、

100w対応高性能アダプタでもだめな時はだめ。
警告が目障りなこと以外は、案外なんとでもなるからアキラメロン。
どうしても気になるなら公式の純正アダプターを要検討するにゃー😽
画像 2.jpg


🎉 完成!

ボタンを押すと、ターミナルに:

Photo saved: /home/***/Pictures/capture_20251009_220110.jpg

そしてフォルダにはしっかり保存された写真。
モニターに撮影した画像が写った瞬間、「ここまで来たか…」と感慨もひとしおだったにゃー


🧭 まとめ

問題 原因 解決方法
Permission denied Geanyがスクリプトを直接実行 python3 camerabutton.py で実行
FileNotFoundError /home/pi/Pictures が存在しない Path.home() を使用
Control Rotation ドライバ未対応 回転を削除
GPIO busy pigpiodとの競合 sudo killall pigpiod
Low voltage warning 電源不足 5V 3A以上のPDアダプタ

💬 最後に

たった一枚の写真を撮るまで、何時間もデバッグした。マジでしんどい。
こんな簡単なことをするのにここまで手こずるとは...
でも、その過程でRaspberry Pi 5の挙動やGPIO制御、libcameraの仕様を深く理解できたのでよかったです。
これが誰かのお役に立てれば幸いにゃん。

😽

小さな成功体験の積み重ねが、ハードウェア開発の楽しさにゃ。
もしこの記事があなたのラズパイ工作を救えたなら、ハート置いてってくれるとうれしーにゃ。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?