Raspberry Pi - LED - Knipperen Zonder Vertraging

Laten we ons voorstellen dat de Raspberry Pi twee taken moet uitvoeren: een LED laten knipperen en de status van een knop monitoren die op elk moment ingedrukt kan worden. Als we de time.sleep() functie gebruiken (zoals besproken in een vorige tutorial), kan het gebeuren dat Raspberry Pi sommige knopindrukken niet registreert. Met andere woorden, de Raspberry Pi voert de tweede taak niet volledig uit.

Deze handleiding leert u hoe Raspberry Pi een LED kan laten knipperen en tegelijkertijd de status van een knop kan controleren zonder dat er persmomenten worden gemist.

We bespreken drie voorbeelden en vergelijken de verschillen:

Deze methode beperkt zich niet alleen tot het knipperen van een LED en het controleren van een knop. Hiermee kan de Raspberry Pi meerdere taken tegelijkertijd uitvoeren zonder dat deze elkaar verstoren.

Hardware Benodigd

1×Raspberry Pi 5
1×LED Kit
1×LED (red)
1×LED Module
1×220 ohm weerstand
1×Breadboard-montageknop met kap
1×Breadboard-montageknoppen-set
1×Paneelmontage drukknop
1×Drukknopmodule
1×Breadboard (experimenteerprint)
1×Jumper wires
1×(Aanbevolen) Schroefklem Block Shield voor Raspberry Pi
1×(Aanbevolen) Raspberry Pi Prototyping Basisplaat & Breadboard Kit
1×(Aanbevolen) HDMI-Touchscreen-Monitor voor Raspberry Pi

Of u kunt de volgende kits kopen:

1×DIYables Sensorkit (30 sensoren/displays)
1×DIYables Sensorkit (18 sensoren/displays)
Openbaarmaking: Sommige van de links in deze sectie zijn Amazon-affiliate links. We kunnen een commissie ontvangen voor aankopen die via deze links worden gedaan, zonder extra kosten voor u. We waarderen uw steun.

Over LED en Knop

Als u niet vertrouwd bent met LED en knop (inclusief pinout, functionaliteit en programmering), kunnen de volgende tutorials u helpen:

Bedradingsschema

Raspberry Pi LED bedrading schema

This image is created using Fritzing. Click to enlarge image

Om uw bekabelingsopstelling te vereenvoudigen en te organiseren, raden we het gebruik van een Schroevenklemaansluiting-shield voor Raspberry Pi aan. Deze shield zorgt voor veiligere en beter beheerbare verbindingen, zoals hieronder weergegeven:

Raspberry Pi Schroevenklemaansluiting-Shield

Raspberry Pi Code - Met Vertraging

Snelstappen

  • Zorg dat u Raspbian of een ander compatibel besturingssysteem voor Raspberry Pi hebt geïnstalleerd op uw Pi.
  • Zorg dat uw Raspberry Pi verbonden is met hetzelfde lokale netwerk als uw pc.
  • Zorg dat uw Raspberry Pi internettoegang heeft indien u libraries moet installeren.
  • Als u voor het eerst met Raspberry Pi werkt, zie hoe u de Raspberry Pi instelt.
  • Maak verbinding met uw Raspberry Pi via SSH vanaf uw pc met de ingebouwde SSH-client op Linux en macOS of PuTTY op Windows. Zie hoe u verbinding maakt met Raspberry Pi via SSH.
  • Zorg dat u de RPi.GPIO library geïnstalleerd hebt. Zo niet, installeer deze dan met de volgende opdracht:
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Maak een Python script bestand led_blink_with_delay.py aan en voeg de volgende code toe:
# Deze Raspberry Pi code is ontwikkeld door newbiely.nl # Deze Raspberry Pi code wordt zonder enige beperking aan het publiek beschikbaar gesteld. # Voor volledige instructies en schema's, bezoek: # https://newbiely.nl/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()
  • Sla het bestand op en voer het Python-script uit met de volgende opdracht in de terminal:
python3 led_blink_with_delay.py
  • Druk vier keer op de knop.
  • Kijk naar de LED; deze gaat elke seconde aan en uit.
  • Bekijk de output in de Terminal.
PuTTY - Raspberry Pi
1 0
  • Sommige knopindrukken worden niet geregistreerd in de terminal. Dit komt doordat de Raspberry Pi tijdens de vertraging niets kan doen en daardoor het drukgebeuren mist.

Het script loopt in een oneindige lus totdat u Ctrl + C indrukt in de terminal.

Raspberry Pi Code - Zonder Vertraging

Snelstappen

  • Maak een Python script bestand led_blink_without_delay.py aan en voeg de volgende code toe:
# Deze Raspberry Pi code is ontwikkeld door newbiely.nl # Deze Raspberry Pi code wordt zonder enige beperking aan het publiek beschikbaar gesteld. # Voor volledige instructies en schema's, bezoek: # https://newbiely.nl/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()
  • Sla het bestand op en voer het Python-script uit met de volgende opdracht in de terminal:
python3 led_blink_without_delay.py
  • Druk vier keer op de knop.
  • Kijk naar de LED, deze zal elke seconde wisselen tussen AAN en UIT.
  • Bekijk de output in de Terminal.
PuTTY - Raspberry Pi
1 0 1 0 1 0 1 0
  • Alle knopindrukken werden geregistreerd terwijl de LED knipperde.

Het script loopt in een oneindige lus totdat u Ctrl + C indrukt in de terminal.

Code Uitleg

Bekijk de regel-voor-regel uitleg in de commentaarregels van de broncode!

Video Tutorial

We overwegen het maken van videotutorials. Als u videotutorials belangrijk vindt, abonneer u dan op ons YouTube-kanaal om ons te motiveren de video's te maken.

Uitbreidbaarheid

Deze methode stelt de Raspberry Pi in staat om meerdere taken tegelijk uit te voeren zonder dat ze elkaar verstoren. Bijvoorbeeld het versturen van een verzoek naar het internet en wachten op de respons, terwijl tegelijkertijd meerdere LED-indicatoren knipperen en een annuleerknop wordt gecontroleerd.

※ ONZE BERICHTEN

  • U bent welkom om de link naar deze tutorial te delen. Gebruik onze inhoud echter niet op andere websites. We hebben veel moeite en tijd gestoken in het maken van de inhoud, respecteer alstublieft ons werk!