Bemerkung

Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauchen Sie mit anderen Enthusiasten tiefer in Raspberry Pi, Arduino und ESP32 ein.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Probleme nach dem Kauf und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Tutorials aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und Sneak Peeks.

  • Sonderrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Bereit, mit uns zu entdecken und zu gestalten? Klicken Sie auf [here] und treten Sie noch heute bei!

3.1 Fotomodul

Einführung

Dieses Projekt führt Sie in die Verwendung des Raspberry-Pi-Kameramoduls zum Aufnehmen eines Fotos ein. Das Kameramodul kann hochauflösende Standbilder und Videos aufnehmen und ist damit ein vielseitiges Werkzeug für Projekte – von Fotografie bis hin zu Computer-Vision-Anwendungen.


Was Sie benötigen

Nachfolgend sind die für dieses Projekt erforderlichen Komponenten aufgeführt:

KOMPONENTENBESCHREIBUNG

KAUFLINK

Kameramodul

BUY

Fusion HAT+

-

Raspberry Pi

-


Versuchsablauf

  1. Um das Kameramodul bequem zu verwenden, wird Pan-Tilt montieren (für die Kamera) empfohlen.

    Bemerkung

    Das Zusammenbauen der Pan-Tilt-Halterung kann einige Pins verdecken. Daher wird empfohlen, sie nur bei Verwendung der Kamera zu montieren oder sie nach der Montage außen zu platzieren.

    ../_images/gimbal_assemble.png
  2. Greifen Sie auf den Raspberry-Pi-Desktop zu:

    • Remote Desktop: Verwenden Sie VNC für eine vollständige Desktop-Umgebung.

    • Raspberry Pi Connect: Verwenden Sie Raspberry Pi Connect, um sicher über einen Browser auf Ihren Pi zuzugreifen.

  3. Öffnen Sie ein Terminal und wechseln Sie in den Code-Ordner:

    cd ~/ai-lab-kit/python
    
  4. Starten Sie das Skript, um die Kamera zu aktivieren:

    sudo python3 3.1_Photograph.py
    
  5. Nachdem das Skript gestartet wurde, drücken Sie die Fusion HAT+ USR-Taste, um Fotos aufzunehmen.

    ../_images/3.1_user_button1.png
    • Jeder Tastendruck nimmt ein Bild auf.

    • Die Fotos werden unter ~/user/Pictures als my_photo.jpg gespeichert.

    • Drücken Sie Ctrl+C, um das Skript zu beenden.

    ../_images/3.1_take_photo.jpg

Bemerkung

Die QT-Vorschau erfordert eine Desktop-Umgebung. Wenn die Vorschau nicht gestartet werden kann (z. B. bei Zugriff über SSH), kann die Kamera dennoch Fotos aufnehmen und diese normal speichern.


Code

Nachfolgend ist der in diesem Projekt verwendete Python-Code aufgeführt:

#!/usr/bin/env python3
import os, time, pwd
from picamera2 import Picamera2, Preview
from fusion_hat.user_button import UserButton

u = os.getenv("SUDO_USER")
home = pwd.getpwnam(u).pw_dir if u else os.path.expanduser("~")
os.makedirs(f"{home}/Pictures", exist_ok=True)
photo = f"{home}/Pictures/my_photo.jpg"

camera = Picamera2()
camera.configure(camera.create_preview_configuration())

def shot():
   camera.capture_file(photo)
   print(f"Saved: {photo}")

UserButton().set_on_click(shot)

# Start preview only when a GUI display is available
preview_started = False
if os.getenv("DISPLAY"):
   try:
      camera.start_preview(Preview.QT)
      preview_started = True
   except Exception as e:
      print(f"Preview disabled: {e}")

camera.start()
print("Press USR to take photo. Ctrl+C to exit.")
try:
   while True: time.sleep(0.1)
except KeyboardInterrupt:
   pass
finally:
   try: camera.stop()
   except: pass
   if preview_started:
      try: camera.stop_preview()
      except: pass
   try: camera.close()
   except: pass

Code verstehen

  1. Importe und Zweck

    import os, time, pwd
    from picamera2 import Picamera2, Preview
    from fusion_hat.user_button import UserButton
    

    Diese Module stellen Folgendes bereit:

    • os und pwd: werden verwendet, um das tatsächliche Home-Verzeichnis des Benutzers korrekt zu ermitteln, selbst wenn das Programm mit sudo ausgeführt wird.

    • time: sorgt dafür, dass das Programm in einer Schleife weiterläuft.

    • Picamera2 und Preview: steuern die Raspberry-Pi-Kamera sowie die Vorschau-Modi.

    • UserButton: liest den USR-Button des Fusion HAT+.

  2. Bestimmen des Speicherpfads

    u = os.getenv("SUDO_USER")
    home = pwd.getpwnam(u).pw_dir if u else os.path.expanduser("~")
    os.makedirs(f"{home}/Pictures", exist_ok=True)
    photo = f"{home}/Pictures/my_photo.jpg"
    

    Dieser Abschnitt bestimmt, wo die Fotos gespeichert werden:

    • Wenn das Skript mit sudo ausgeführt wird, wird SUDO_USER verwendet, um das ursprüngliche Home-Verzeichnis des Benutzers zu ermitteln.

    • Andernfalls wird das Home-Verzeichnis des aktuellen Benutzers verwendet.

    • Ein Ordner Pictures wird erstellt, falls er noch nicht existiert.

    • Alle Fotos werden als my_photo.jpg gespeichert (jedes neue Foto überschreibt das vorherige).

  3. Initialisierung der Kamera

    camera = Picamera2()
    camera.configure(camera.create_preview_configuration())
    

    Das Kameraobjekt wird erstellt und mit einer Standard-Vorschaukonfiguration eingerichtet. Diese Konfiguration funktioniert sowohl mit als auch ohne sichtbares Vorschaufenster.

  4. Funktion zum Aufnehmen eines Fotos

    def shot():
        camera.capture_file(photo)
        print(f"Saved: {photo}")
    

    Diese Funktion wird aufgerufen, wenn der USR-Button gedrückt wird. Sie nimmt ein Foto auf, speichert es im festgelegten Pfad und gibt anschließend den Speicherort aus.

  5. Verknüpfung mit dem USR-Button

    UserButton().set_on_click(shot)
    

    Der USR-Button des Fusion HAT+ wird mit der Funktion shot verknüpft. Jeder Tastendruck löst eine Fotoaufnahme aus.

  6. Bedingtes Starten der Vorschau

    preview_started = False
    if os.getenv("DISPLAY"):
        try:
            camera.start_preview(Preview.QT)
            preview_started = True
        except Exception as e:
            print(f"Preview disabled: {e}")
    
    • Das Programm prüft, ob eine grafische Anzeige verfügbar ist.

    • Wenn eine Anzeige vorhanden ist, wird versucht, ein QT-Vorschaufenster zu starten.

    • Wenn keine Anzeige verfügbar ist (z. B. bei Ausführung über SSH), wird die Vorschau übersprungen, ohne das Programm zu beenden.

  7. Start der Kamera und Hauptschleife

    camera.start()
    print("Press USR to take photo. Ctrl+C to exit.")
    
    try:
        while True:
            time.sleep(0.1)
    

    Die Kamera wird gestartet, und das Programm tritt in eine Endlosschleife ein, um weiterzulaufen und auf Tastendrücke zu reagieren.

  8. Sauberes Beenden und Freigeben von Ressourcen

    except KeyboardInterrupt:
        pass
    finally:
        try: camera.stop()
        except: pass
        if preview_started:
            try: camera.stop_preview()
            except: pass
        try: camera.close()
        except: pass
    

    Wenn Ctrl+C gedrückt wird:

    • Die Kamera wird gestoppt.

    • Die Vorschau wird nur gestoppt, wenn sie zuvor erfolgreich gestartet wurde.

    • Die Kameraressourcen werden sauber freigegeben.

    Dadurch wird sichergestellt, dass das Programm ohne Fehlermeldungen beendet wird, unabhängig davon, ob ein Vorschaufenster verwendet wurde.


Fehlerbehebung

  1. Kein Vorschaufenster

    • Ursache: Kamera nicht aktiviert, keine Anzeige verfügbar oder Picamera2 nicht installiert.

    • Lösung: Führen Sie das Skript auf einem System mit grafischer Oberfläche aus (nicht nur über SSH) und testen Sie Picamera2 mit einem einfachen Beispielskript.

  2. USR-Button funktioniert nicht

    • Ursache: Fusion HAT+ nicht korrekt aufgesteckt, Button wird nicht erkannt oder falscher Fotoordner überprüft.

    • Lösung: Stecken Sie das HAT erneut auf, führen Sie das Skript mit sudo aus und prüfen Sie die Fotos im Ordner ~/Pictures.

  3. Fotos werden am falschen Ort gespeichert

    • Ursache: Die Ausführung mit sudo kann zu Verwechslungen der Home-Verzeichnisse führen.

    • Lösung: Das Skript berücksichtigt dies bereits; geben Sie bei Unsicherheit REAL_USER oder PICTURES_DIR aus, um den tatsächlichen Speicherort zu prüfen.

  4. Vorschau friert ein

    • Ursache: Die Kamera wird bereits von einer anderen Anwendung verwendet oder die Systemressourcen sind zu gering.

    • Lösung: Schließen Sie andere Anwendungen, aktualisieren Sie das System oder starten Sie den Raspberry Pi neu.


Fazit

Mit diesem Skript können Sie Fotos über den USR-Button des Fusion HAT+ aufnehmen und automatisch im Ordner ~/Pictures speichern. Diese Einrichtung eignet sich ideal für einfache Kameraprojekte und kann beispielsweise für Zeitrafferaufnahmen, DIY-Kameraprojekte oder Demonstrationen im Unterricht erweitert werden.