Le projet
GPIO zéro, la nouvelle bibliothèque GPIO de la Raspberry Pi Foundation, devient ma méthode de prédilection pour faire des choses simples avec les broches GPIO du Pi. Ces dernières semaines, je me suis amusé à préparer l’exposition Bett, et plus particulièrement la Raspberry Jam qui s’y tient le 23 janvier.
Une partie de mon exposition est un Raspberry Pi Zero avec un Scroll pHAT attaché. Faire fonctionner cela était une histoire en soi, mais je veux me concentrer aujourd’hui sur les 4 LED que j’ai soudées sur une carte de prototypage qui est attachée au Zero. Vous pouvez les voir dans l’image ci-dessus.
Retour à GPIO Zero. Il contient une classe appelée PWMLED qui vous permet de faire du logiciel PWM avec LED. Cela signifie qu’au lieu de simplement les faire clignoter, vous pouvez les faire disparaître. Cela prend un peu de temps (sauf si j’ai manqué quelque chose), alors j’ai pensé partager avec vous ma méthode. Une chose à comprendre est que je l’ai fait dans un « fil », ce qui signifie que pendant que le Scroll pHAT fait son travail d’affichage des messages, je peux faire en sorte que les LED fassent quelque chose de déconnecté de ce processus. Cependant, les fonctions individuelles peuvent être supprimées de l’intérieur de l ‘«objet» de filetage si vous n’avez rien d’autre à faire que d’impulser les LED.
Voici une vidéo pour prouver que cela fonctionne!

Le code
Anyhoo. Voici le code. (J’ai supprimé tout ce qui concerne le Scroll pHAT) (Vous pouvez ignorer ce bit et aller directement à la audacieux peu à télécharger le code depuis Github.
Tout d’abord, importons les bibliothèques:
import time, threading, random from gpiozero import LED, PWMLED
Maintenant, définissons les LED:
# Set-up LEDs led_red = PWMLED(17) led_yellow = PWMLED(27) led_green = PWMLED(22) led_blue = PWMLED(10)
Maintenant, afin d’obtenir une action de fondu en douceur, nous allons vouloir faire une boucle de 0 à 1 en utilisant une valeur ‘float’ (décimale). (0,1… 0,2… 0,3… 0,4… etc.). Nous ne pouvons pas faire cela sans une fonction d’assistance. Notez que Python ne semble pas très bien faire la soustraction de flotteurs, donc j’ai trouvé que je devais arrondir les flotteurs à une décimale juste pour que le jeu soit agréable! S’il me manque quelque chose, laissez un commentaire!
# Helper function to iterate over a float
def frange(start, stop, step):
i = start
if (start < stop):
while i <= stop:
yield i
i += step
# For some reason, += doesn't always add an exact decimal, so we have to round the value
i = round(i, 1)
else:
while i >= stop:
yield i
i += step
# For some reason, += doesn't always add an exact decimal, so we have to round the value
i = round(i, 1)
Définissons maintenant une classe que nous pouvons démarrer dans le cadre d’un nouveau thread:
class RandomLEDs(threading.Thread):
def __init__(self, threadID, name):
threading.Thread.__init__(self)
self.threadID = threadID
self.name = name
def run(self):
while True:
led_list = [led_blue,led_yellow,led_green,led_red]
the_led = random.choice(led_list)
self.fade_in_led(the_led, 0.03)
time.sleep(0.3)
self.fade_out_led(the_led, 0.02)
time.sleep(0.3)
# PWM the LED value from 0 to 1 (or from 1 to 0) with a 0.1 step
def fade_in_led(self, led, speed):
for i in frange(0.0, 1.0, 0.1):
led.value = i
time.sleep(speed)
def fade_out_led(self, led, speed):
for i in frange(1.0, 0.0, -0.1):
led.value = i
time.sleep(speed)
Maintenant, commençons le tout:
# Start independent threads # This one lights up random LEDs thread1 = RandomLEDs(1, "Thread-1") thread1.start()
J’espère que tous les retraits se sont bien déroulés (je viens de passer les 10 dernières minutes à mettre des espaces, alors j’espère que oui).
TL; DR
Si vous souhaitez télécharger le code, procédez comme suit:
git clone https://github.com/recantha/scroller
Et le fichier que vous voulez est pwm_leds.py
Vous pouvez l’exécuter en faisant:
python3 pwm_leds.py
Retour d’information
Je serais très heureux de recevoir vos commentaires sur mon code et mon approche. je attendre qu’il existe un moyen beaucoup plus simple de le faire – la boucle flottante mérite un peu d’attention, par exemple – mais c’est ce que j’ai commencé à travailler! En tout cas, j’espère que vous avez trouvé le post intéressant! ?
-
Freenove Breakout Board for Raspberry Pi 5 / 4B / 3B+ / 3B / 3A+ / 2B / 1B+ / 1A+ / Zero 2 W/Zero W/Zero, Terminal Block Shield Hat with Pin Header, GPIO Status LED
-
Geekworm Raspberry Pi 5 GPIO Extender G469 avec autocollants de définition des broches, Plug & Play, sans soudure, compatible avec Pi 4B/3B+/2B/Zero et plus encore
