Raspberry Pi - LED - Blinken ohne Verzögerung

Stellen wir uns vor, dass Raspberry Pi zwei Aufgaben erfüllen muss: eine LED blinken lassen und den Zustand einer Taste überwachen, die jederzeit gedrückt werden kann. Wenn wir die time.sleep() Funktion verwenden (wie in einem vorherigen Tutorial besprochen), kann Raspberry Pi möglicherweise einige Tastendrücke nicht erkennen. Mit anderen Worten, Raspberry Pi ist nicht in der Lage, die zweite Aufgabe vollständig auszuführen.

Dieses Tutorial zeigt Ihnen, wie Raspberry Pi eine LED blinken lassen und gleichzeitig den Zustand einer Taste überwachen kann, ohne Druckereignisse zu verpassen.

Wir werden drei Beispiele durchgehen und die Unterschiede zwischen ihnen vergleichen:

Diese Methode ist nicht nur auf das Blinken von LEDs und das Überprüfen des Tastenzustands beschränkt. Sie ermöglicht es Raspberry Pi, mehrere Aufgaben gleichzeitig auszuführen, ohne sich gegenseitig zu beeinträchtigen.

Erforderliche Hardware

1×Raspberry Pi 5
1×LED Kit
1×LED (red)
1×LED Module
1×220 Ohm Widerstand
1×Breadboard-montierbare Taste mit Kappe
1×Breadboard-montierbare Tasten-Kit
1×Panel-montierbare Drucktaste
1×Taster-Modul
1×Breadboard (Steckplatine)
1×Jumper-Kabel
1×(Empfohlen) Schraubklemmenblock-Shield für Raspberry Pi
1×(Empfohlen) Raspberry Pi Prototyping-Grundplatte & Breadboard-Kit
1×(Empfohlen) HDMI-Touchscreen-Monitor für Raspberry Pi

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (30 Sensoren/Displays)
1×DIYables Sensor-Kit (18 Sensoren/Displays)
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.

Kaufhinweis: Um den Verdrahtungsprozess zu vereinfachen, empfehlen wir die Verwendung des LED Module, das mit einem eingebauten Widerstand geliefert wird.

Über LED und Taste

Falls Sie mit LED und Taste nicht vertraut sind (einschließlich Pinout, Funktionalität und Programmierung), können die folgenden Tutorials Orientierung bieten:

Schaltplan

Raspberry Pi LED Schaltplan

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.

Um Ihren Verdrahtungsaufbau zu vereinfachen und zu organisieren, empfehlen wir die Verwendung eines Schraubklemmenblock-Shields für Raspberry Pi. Dieses Shield gewährleistet sicherere und besser verwaltbare Verbindungen, wie unten gezeigt:

Raspberry Pi Schraubklemmenblock-Shield

Raspberry Pi Code - Mit Verzögerung

Schnelle Schritte

  • Stellen Sie sicher, dass Sie Raspbian oder ein anderes Raspberry Pi-kompatibles Betriebssystem auf Ihrem Pi installiert haben.
  • Stellen Sie sicher, dass Ihr Raspberry Pi mit demselben lokalen Netzwerk wie Ihr PC verbunden ist.
  • Stellen Sie sicher, dass Ihr Raspberry Pi mit dem Internet verbunden ist, falls Sie einige Bibliotheken installieren müssen.
  • Falls Sie Raspberry Pi zum ersten Mal verwenden, siehe wie Sie Raspberry Pi einrichten
  • Verbinden Sie Ihren PC mit dem Raspberry Pi über SSH mit dem integrierten SSH-Client auf Linux und macOS oder PuTTY auf Windows. Siehe wie Sie Ihren PC mit Raspberry Pi über SSH verbinden.
  • Stellen Sie sicher, dass Sie die RPi.GPIO Bibliothek installiert haben. Falls nicht, installieren Sie sie mit folgendem Befehl:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Erstellen Sie eine Python-Skriptdatei led_blink_with_delay.py und fügen Sie den folgenden Code hinzu:
# Dieser Raspberry Pi Code wurde von newbiely.de entwickelt # Dieser Raspberry Pi Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. # Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: # https://newbiely.de/tutorials/raspberry-pi/raspberry-pi-led-blink-without-delay import RPi.GPIO as GPIO import time # Constants won't change: LED_PIN = 18 # the number of the LED pin BUTTON_PIN = 16 # the number of the button pin BLINK_INTERVAL = 1 # interval at which to blink LED (seconds) # Variables will change: led_state = False # led_state used to set the LED prev_button_state = False # will store last time button was updated GPIO.setmode(GPIO.BCM) GPIO.setup(LED_PIN, GPIO.OUT) GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) try: while True: # if the LED is off turn it on and vice-versa: led_state = not led_state # set the LED with the led_state of the variable: GPIO.output(LED_PIN, led_state) time.sleep(BLINK_INTERVAL) # If button is pressed during this time, Raspberry Pi CANNOT detect button_state = GPIO.input(BUTTON_PIN) if button_state != prev_button_state: # print out the state of the button: print(button_state) # save the last state of the button prev_button_state = button_state # DO OTHER WORKS HERE except KeyboardInterrupt: GPIO.cleanup()
  • Speichern Sie die Datei und führen Sie das Python-Skript aus, indem Sie den folgenden Befehl im Terminal ausführen:
python3 led_blink_with_delay.py
  • Drücken Sie die Taste vier Mal.
  • Schauen Sie sich die LED an; sie wird jede Sekunde zwischen ein und aus wechseln.
  • Schauen Sie sich die Ausgabe im Terminal an.
PuTTY - Raspberry Pi
1 0
  • Im Terminal wurden einige Druckzeiten nicht aufgezeichnet. Das liegt daran, dass Raspberry Pi während der Verzögerungszeit nichts tun kann und daher nicht in der Lage ist, das Druckereignis zu erkennen.

Das Skript läuft in einer Endlosschleife kontinuierlich, bis Sie Strg + C im Terminal drücken.

Raspberry Pi Code - Ohne Verzögerung

Schnelle Schritte

  • Erstellen Sie eine Python-Skriptdatei led_blink_without_delay.py und fügen Sie den folgenden Code hinzu:
# Dieser Raspberry Pi Code wurde von newbiely.de entwickelt # Dieser Raspberry Pi Code wird der Öffentlichkeit ohne jegliche Einschränkung zur Verfügung gestellt. # Für vollständige Anleitungen und Schaltpläne besuchen Sie bitte: # https://newbiely.de/tutorials/raspberry-pi/raspberry-pi-led-blink-without-delay import RPi.GPIO as GPIO import time # Constants won't change LED_PIN = 18 # The GPIO number of the LED pin BUTTON_PIN = 16 # The GPIO number of the button pin BLINK_INTERVAL_MS = 500 # Interval at which to blink LED (milliseconds) - 500 milliseconds # Variables will change led_state = GPIO.LOW # led_state used to set the LED prev_button_state = GPIO.LOW # Will store the last time button was updated # Function to get the current time in milliseconds def millis(): return time.perf_counter_ns() // 1000000 # Get the initial time in milliseconds previousTime = millis() # Setup GPIO GPIO.setmode(GPIO.BCM) GPIO.setup(LED_PIN, GPIO.OUT) GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) try: while True: # Check if it's time to blink the LED currentTime = millis() if currentTime - previousTime >= BLINK_INTERVAL_MS: # If the LED is off, turn it on, and vice-versa led_state = not led_state # Set the LED with the led_state variable GPIO.output(LED_PIN, led_state) # Save the last time you blinked the LED previousTime = currentTime # Check button state's change button_state = GPIO.input(BUTTON_PIN) if button_state != prev_button_state: # Print out the state of the button print(button_state) # Save the last state of the button prev_button_state = button_state # DO OTHER WORKS HERE (IF NEEDED) except KeyboardInterrupt: # Clean up GPIO on keyboard interrupt GPIO.cleanup()
  • Speichern Sie die Datei und führen Sie das Python-Skript aus, indem Sie den folgenden Befehl im Terminal ausführen:
python3 led_blink_without_delay.py
  • Drücken Sie die Taste 4 Mal.
  • Schauen Sie sich die LED an, die jede Sekunde zwischen EIN und AUS wechselt.
  • Überprüfen Sie die Ausgabe im Terminal.
PuTTY - Raspberry Pi
1 0 1 0 1 0 1 0
  • Alle Druckereignisse wurden erkannt, während die LED blinkte.

Das Skript läuft in einer Endlosschleife kontinuierlich, bis Sie Strg + C im Terminal drücken.

Code-Erklärung

Schauen Sie sich die zeilenweise Erklärung in den Kommentaren des Quellcodes an!

Video Tutorial

Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.

Erweiterbarkeit

Diese Methode ermöglicht es Raspberry Pi, mehrere Aufgaben gleichzeitig auszuführen, ohne sich gegenseitig zu beeinträchtigen. Zum Beispiel eine Anfrage an das Internet zu senden und auf die Antwort zu warten, während gleichzeitig einige LED-Indikatoren blinken und die Abbruchtaste überprüft wird.

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!