.. 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! .. _4.1.1_py_pi5: 4.1.1 Kamera ====================== Einführung ----------------- Hier werden wir eine Kamera mit einem Auslöser bauen, bei deren Betätigung die Kamera ein Foto macht, während die LED blinkt. Benötigte Komponenten ------------------------------ Für dieses Projekt benötigen wir folgende Komponenten. .. image:: ../python_pi5/img/4.1.1_camera_list.png :width: 800 :align: center Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Name - ARTIKEL IN DIESEM KIT - LINK * - Raphael Kit - 337 - |link_Raphael_kit| Sie können diese auch separat über die untenstehenden Links kaufen. .. list-table:: :widths: 30 20 :header-rows: 1 * - KOMPONENTENVORSTELLUNG - KAUF-LINK * - :ref:`cpn_gpio_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_resistor` - |link_resistor_buy| * - :ref:`cpn_led` - |link_led_buy| * - :ref:`cpn_button` - |link_button_buy| * - :ref:`cpn_camera_module` - |link_camera_buy| Schaltplan ----------------------- ============ ======== ======== === T-Board Name physical wiringPi BCM GPIO17 Pin 11 0 17 GPIO18 Pin 12 1 18 ============ ======== ======== === .. image:: ../python_pi5/img/4.1.1_camera_schematic.png :align: center Experimentelle Verfahren ------------------------------ **Schritt 1:** Bauen Sie den Schaltkreis. .. image:: ../python_pi5/img/4.1.1_camera_circuit.png :width: 800 :align: center **Schritt 2:** Gehen Sie zum Raspberry Pi Desktop. Für ein besseres Erlebnis benötigen Sie möglicherweise einen Bildschirm, siehe: `Verbinden Sie Ihren Raspberry Pi `_. Oder greifen Sie remote auf den Raspberry Pi Desktop zu, für eine detaillierte Anleitung siehe :ref:`remote_desktop`. **Schritt 3:** Öffnen Sie ein Terminal und wechseln Sie in den Ordner des Codes. .. raw:: html .. code-block:: cd ~/raphael-kit/python-pi5 **Schritt 4:** Ausführen. .. raw:: html .. code-block:: sudo python3 4.1.1_Camera_zero.py Nachdem der Code ausgeführt wurde, drücken Sie den Knopf, der Raspberry Pi wird die LED blinken lassen und ein Foto machen. Das Foto wird ``my_photo.jpg`` genannt und im Verzeichnis ``~`` gespeichert. .. note:: Sie können auch ``4.1.1_Camera_zero.py`` im Pfad ``~/raphael-kit/python/`` mit einer Python-IDE öffnen, den Ausführen-Button klicken, um es zu starten, und den Code mit dem Stop-Button beenden. 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 von picamera2 import Picamera2, Preview von gpiozero import LED, Button import time import os # Den Login-Namen und das Home-Verzeichnis des aktuellen Benutzers abrufen user = os.getlogin() user_home = os.path.expanduser(f'~{user}') # Die Kamera initialisieren camera = Picamera2() camera.start() # Eine Variable initialisieren, um den Status der Kamera zu verfolgen global status status = False # LED und Knopf mit ihren GPIO-Pinnummern einrichten led = LED(17) button = Button(18) def takePhotos(pin): """Funktion, um den Kamerastatus auf True zu setzen, wenn der Knopf gedrückt wird.""" global status status = True try: # Die Funktion zuweisen, die aufgerufen werden soll, wenn der Knopf gedrückt wird button.when_pressed = takePhotos # Hauptschleife while True: # Überprüfen, ob der Knopf gedrückt wurde if status: # Die LED fünfmal blinken lassen for i in range(5): led.on() time.sleep(0.1) led.off() time.sleep(0.1) # Ein Foto aufnehmen und speichern camera.capture_file(f'{user_home}/my_photo.jpg') print('Foto aufgenommen!') # Den Status zurücksetzen status = False else: # Die LED ausschalten, wenn nicht aufgenommen wird led.off() # Kurz warten, bevor der Knopfstatus erneut überprüft wird time.sleep(1) except KeyboardInterrupt: # Die Kamera stoppen und die LED ausschalten, wenn ein KeyboardInterrupt auftritt camera.stop_preview() led.off() pass **Code-Erklärung** #. Importiert die notwendigen Bibliotheken für Zeitsteuerung, Kamerasteuerung und GPIO-Komponentensteuerung. .. code-block:: python #!/usr/bin/env python3 von picamera2 import Picamera2, Preview von gpiozero import LED, Button import time import os #. Ruft den Login-Namen und das Home-Verzeichnis des aktuellen Benutzers ab, um Fotos zu speichern. .. code-block:: python # Get the current user's login name and home directory user = os.getlogin() user_home = os.path.expanduser(f'~{user}') #. Initialisiert die Kamera und startet sie. .. code-block:: python # Initialize the camera camera = Picamera2() camera.start() #. Deklariert ``status`` als globale Variable und initialisiert sie mit ``False``. .. code-block:: python # Initialize a variable to track the camera's status global status status = False #. Initialisiert eine LED, die mit dem GPIO-Pin 17 verbunden ist, und einen Knopf, der mit dem GPIO-Pin 18 verbunden ist. .. code-block:: python # Set up LED and button with their GPIO pin numbers led = LED(17) button = Button(18) #. Definiert eine Funktion ``takePhotos``, die die globale Variable ``status`` auf ``True`` setzt, wenn der Knopf gedrückt wird. .. code-block:: python def takePhotos(pin): """Function to set the camera's status to True when the button is pressed.""" global status status = True #. Weist die Funktion ``takePhotos`` zu, die aufgerufen werden soll, wenn der Knopf gedrückt wird. .. code-block:: python try: # Assign the function to be called when the button is pressed button.when_pressed = takePhotos ... #. Überprüft kontinuierlich, ob der ``status`` ``True`` ist. Wenn ja, lässt es die LED fünfmal blinken, macht ein Foto und setzt ``status`` zurück. Wenn nicht, bleibt die LED aus. Es gibt eine 1-Sekunden-Verzögerung zwischen den Iterationen der Schleife. .. code-block:: python try: ... # Main loop while True: # Check if the button has been pressed if status: # Blink the LED five times for i in range(5): led.on() time.sleep(0.1) led.off() time.sleep(0.1) # Capture and save a photo camera.capture_file(f'{user_home}/my_photo.jpg') print('Take a photo!') # Reset the status status = False else: # Turn off the LED if not capturing led.off() # Wait for a short period before checking the button status again time.sleep(1) #. Fängt ein KeyboardInterrupt (wie Ctrl+C) ab und stoppt die Kameravorschau und schaltet die LED aus, bevor das Programm beendet wird. .. code-block:: python except KeyboardInterrupt: # Stop the camera and turn off the LED if a KeyboardInterrupt occurs camera.stop_preview() led.off() pass