.. 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!
.. _2.2.4_py_pi5:
2.2.4 Reed-Schalter-Modul
========================================
Einführung
-------------------
In diesem Projekt lernen wir den Reed-Schalter kennen, einen elektrischen Schalter, der durch ein angelegtes Magnetfeld betätigt wird.
Benötigte Komponenten
------------------------------
Für dieses Projekt benötigen wir folgende Komponenten.
.. image:: ../python_pi5/img/2.2.4_reed_switch_list.png
:width: 700
:align: center
Es ist definitiv praktisch, ein ganzes 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_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_reed_switch`
- |link_reed_switch_buy|
Schaltplan
-----------------------
============ ======== ======== ===
T-Board Name physisch wiringPi BCM
GPIO17 Pin 11 0 17
GPIO27 Pin 13 2 27
GPIO22 Pin 15 3 22
============ ======== ======== ===
.. image:: ../python_pi5/img/2.2.4_reed_switch_schematic_1.png
:width: 400
:align: center
.. image:: ../python_pi5/img/2.2.4_reed_switch_schematic_2.png
:width: 400
:align: center
Experimentelle Verfahren
-------------------------------
**Schritt 1:** Baue die Schaltung.
.. image:: ../python_pi5/img/2.2.4_reed_switch_circuit.png
:width: 700
:align: center
**Schritt 2:** Wechsle das Verzeichnis.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python-pi5
**Schritt 3:** Ausführen.
.. raw:: html
.. code-block::
sudo python3 2.2.4_ReedSwitch_zero.py
Die grüne LED leuchtet, wenn der Code ausgeführt wird. Wenn ein Magnet nahe an das Reed-Schalter-Modul gebracht wird, leuchtet die rote LED auf; entfernt man den Magnet, leuchtet wieder die grüne LED.
.. warning::
Wenn die Fehlermeldung ``RuntimeError: Cannot determine SOC peripheral base address`` angezeigt wird, lesen Sie bitte :ref:`faq_soc`
**Code**
.. note::
Sie können den untenstehenden Code **modifizieren/zurücksetzen/kopieren/ausführen/stoppen**. Bevor Sie das tun, müssen Sie jedoch zum Quellcodepfad wie ``raphael-kit/python-pi5`` wechseln. Nachdem Sie den Code modifiziert haben, können Sie ihn direkt ausführen, um den Effekt zu sehen.
.. raw:: html
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import LED, Button
# Initialize the reed switch and LEDs using GPIO Zero
reed_switch = Button(17, pull_up=True) # Reed switch on GPIO 17, using an internal pull-up resistor
green_led = LED(27) # Green LED connected to GPIO pin 27
red_led = LED(22) # Red LED connected to GPIO pin 22
def update_leds():
"""
Update the state of the LEDs based on the reed switch.
Turns the red LED on and green LED off when the reed switch is pressed, and vice versa.
"""
if reed_switch.is_pressed:
green_led.off() # Turn off the green LED
red_led.on() # Turn on the red LED
else:
green_led.on() # Turn on the green LED
red_led.off() # Turn off the red LED
try:
green_led.on() # Turn on the green LED at the start
while True:
# Set the callback functions for reed switch state changes
reed_switch.when_pressed = update_leds # Callback when the switch is pressed
reed_switch.when_released = update_leds # Callback when the switch is released
except KeyboardInterrupt:
# Clean up resources and exit on Ctrl+C
green_led.off()
red_led.off()
pass
**Code-Erklärung**
#. Diese Zeile gibt an, dass das Skript mit Python 3 ausgeführt werden soll. Es werden ``LED`` und ``Button`` (für den Reed-Schalter) aus der gpiozero-Bibliothek importiert.
.. code-block:: python
#!/usr/bin/env python3
from gpiozero import LED, Button
#. Initialisiert den Reed-Schalter an GPIO-Pin 17 mit einem internen Pull-up-Widerstand. Initialisiert außerdem zwei LEDs, die mit den GPIO-Pins 27 und 22 verbunden sind.
.. code-block:: python
# Initialize the reed switch and LEDs using GPIO Zero
reed_switch = Button(17, pull_up=True) # Reed switch on GPIO 17, using an internal pull-up resistor
green_led = LED(27) # Green LED connected to GPIO pin 27
red_led = LED(22) # Red LED connected to GPIO pin 22
#. Definiert die Funktion ``update_leds``, die den Zustand der LEDs basierend auf dem Zustand des Reed-Schalters aktualisiert. Die rote LED wird eingeschaltet und die grüne LED wird ausgeschaltet, wenn der Schalter gedrückt wird, und umgekehrt, wenn er losgelassen wird.
.. code-block:: python
def update_leds():
if reed_switch.is_pressed:
green_led.off() # Turn off the green LED
red_led.on() # Turn on the red LED
else:
green_led.on() # Turn on the green LED
red_led.off() # Turn off the red LED
#. Setzt den anfänglichen Zustand der grünen LED auf Ein. Die Hauptschleife weist der Funktion ``update_leds`` als Callbacks für die Ereignisse ``when_pressed`` und ``when_released`` des Reed-Schalters zu. Beinhaltet die Behandlung von Ausnahmen für KeyboardInterrupt, um die Ressourcen aufzuräumen und das Programm sanft zu beenden.
.. code-block:: python
try:
green_led.on() # Turn on the green LED at the start
while True:
# Set the callback functions for reed switch state changes
reed_switch.when_pressed = update_leds # Callback when the switch is pressed
reed_switch.when_released = update_leds # Callback when the switch is released
except KeyboardInterrupt:
# Clean up resources and exit on Ctrl+C
green_led.off()
red_led.off()
pass