.. note::

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

    **Warum beitreten?**

    - **Expertenunterstützung**: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
    - **Lernen & Teilen**: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
    - **Exklusive Vorschauen**: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
    - **Spezialrabatte**: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
    - **Festliche Aktionen und Gewinnspiele**: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

    👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [|link_sf_facebook|] und treten Sie heute bei!

.. _3.1.1_py_pi5:

3.1.1 Fotografiemodul
==========================

Einführung
-----------------

In diesem Kit, ausgestattet mit einem Kameramodul, versuchen wir, mit dem Raspberry Pi ein Foto zu machen.

Benötigte Komponenten
------------------------------

Für dieses Projekt benötigen wir folgende Komponenten.

.. image:: ../python_pi5/img/3.3.1_photograph_list.png
  :width: 800

Es ist definitiv praktisch, ein komplettes Set zu kaufen, hier ist der Link:

.. list-table::
    :widths: 20 20 20
    :header-rows: 1

    *   - Name	
        - ARTIKEL IN DIESEM SET
        - LINK
    *   - Raphael Kit
        - 337
        - |link_Raphael_kit|

Sie können diese auch einzeln über die untenstehenden Links kaufen.

.. list-table::
    :widths: 30 20
    :header-rows: 1

    *   - KOMPONENTENVORSTELLUNG
        - KAUF-LINK

    *   - :ref:`cpn_camera_module`
        - |link_camera_buy|

Experimentelle Verfahren
------------------------------

**Schritt 1:** Gehe zum Raspberry Pi Desktop. Für ein besseres Erlebnis benötigen Sie möglicherweise einen Bildschirm, siehe: `Verbinden Sie Ihren Raspberry Pi <https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up/3>`_. Oder greifen Sie remote auf den Raspberry Pi Desktop zu, für eine detaillierte Anleitung siehe :ref:`remote_desktop`.

**Schritt 2:** Öffnen Sie ein Terminal und wechseln Sie in den Ordner des Codes.

.. code-block::

    cd ~/raphael-kit/python-pi5

**Schritt 3:** Führen Sie aus.

.. code-block::

    sudo python3 3.1.1_PhotographModule_zero.py

Nachdem der Code ausgeführt wurde, wird die Kamera ein Foto machen. Jetzt können Sie das Foto mit dem Namen „my_photo.jpg“ im Verzeichnis „~“ sehen.

.. note::

    Sie können auch „3.1.1_PhotographModule.py“ im Pfad „~/raphael-kit/python-pi5/“ mit einer Python-IDE öffnen, den Ausführen-Knopf klicken, um es auszuführen, und den Code mit dem Stopp-Knopf stoppen.


Wenn Sie das Foto auf Ihren PC herunterladen möchten, siehe :ref:`filezilla`.


.. warning::

    Wenn die Fehlermeldung ``RuntimeError: Cannot determine SOC peripheral base address`` angezeigt wird, lesen Sie bitte :ref:`faq_soc`

**Code**

.. code-block:: python

   #!/usr/bin/env python3    
   from picamera2 import Picamera2, Preview
   import os

   # Get the current user's login name
   user = os.getlogin()
   # Get the path to the user's home directory
   user_home = os.path.expanduser(f'~{user}')

   # Create a Picamera2 instance
   camera = Picamera2()
   # Retrieve the default preview configuration
   preview_config = camera.preview_configuration

   try:
       # Set preview size and format
       preview_config.size = (800, 600)
       preview_config.format = 'XRGB8888'  
       # Start the camera preview in QTGL mode
       camera.start_preview(Preview.QTGL)
       # Start the camera
       camera.start()
       # Capture and save a photo to the user's home directory
       camera.capture_file(f'{user_home}/my_photo.jpg')

   except KeyboardInterrupt:
       # Stop the camera preview if a KeyboardInterrupt (e.g., Ctrl+C) occurs
       camera.stop_preview()
       pass

**Code-Erklärung**

#. Importiert die Klassen ``Picamera2`` und ``Preview`` aus der picamera2-Bibliothek sowie das Modul ``os`` für Betriebssysteminteraktionen.

   .. code-block:: python

       #!/usr/bin/env python3    
       from picamera2 import Picamera2, Preview
       import os

#. Ruft den Login-Namen des aktuellen Benutzers und den Pfad zu dessen Home-Verzeichnis ab.

   .. code-block:: python

       # Get the current user's login name
       user = os.getlogin()
       # Get the path to the user's home directory
       user_home = os.path.expanduser(f'~{user}')

#. Erstellt eine Instanz der Klasse ``Picamera2`` und ruft die Standard-Vorschaukonfiguration ab.

   .. code-block:: python

       # Create a Picamera2 instance
       camera = Picamera2()
       # Retrieve the default preview configuration
       preview_config = camera.preview_configuration

#. Legt die Größe und das Format der Kameravorschau fest. Die Größe wird auf 800x600 Pixel festgelegt, und das Format auf ``XRGB8888``.

   .. code-block:: python

       try:
           # Set preview size and format
           preview_config.size = (800, 600)
           preview_config.format = 'XRGB8888'

           ...

#. Startet die Kameravorschau im QTGL-Modus, einer Methode zur Anzeige der Vorschau, und startet dann die Kamera selbst.

   .. code-block:: python

       try:
           ...
           
           # Start the camera preview in QTGL mode
           camera.start_preview(Preview.QTGL)
           # Start the camera
           camera.start()

           ...

#. Macht ein Bild mit der Kamera und speichert es in ``~/``.

   .. code-block:: python

       try:
           ...           
           
           # Capture and save a photo to the user's home directory
           camera.capture_file(f'{user_home}/my_photo.jpg')

   .. note::
       You can use ``camera.capture()`` function and ``for`` loop together to achieve continuous shooting. And use the ``delay`` function to adjust the time interval for taking pictures.

       .. code-block:: python

           for i in 5:
               camera.capture(f'{user_home}/my_photo%s.jpg' % i)

#. Dieser Codeblock behandelt ein KeyboardInterrupt (z.B. Strg+C), indem die Kameravorschau gestoppt wird. Die Anweisung ``pass`` wird verwendet, um die Ausnahme zu behandeln, ohne sonst etwas zu tun.

   .. code-block:: python

       except KeyboardInterrupt:
           # Stop the camera preview if a KeyboardInterrupt (e.g., Ctrl+C) occurs
           camera.stop_preview()
           pass








