Continuons notre exploration du nouveau Raspberry Pi Pico W. Maintenant que nous savons comment afficher la mesure d'un capteur dans une page web, nous allons contrôler, à partir d'une page web, 3 LEDs branchées au Raspberry Pi Pico W. Ce sera facile de modifier le script pour qu'il réponse à vos besoins spécifiques: plutôt que contrôler des LEDs, la page web pourra servir à contrôler des relais, des moteurs, etc.
Comme d'habitude, le Pico W sera programmé en micropython; si vous avez besoin d'informations sur la façon de programmer un Raspberry Pi Pico (W ou non) en micropython avec Thonny, c'est par ici.
Circuit
J'ai branché une LED à chacune de ces broches du Raspberry Pi Pico W: GP13, GP14 et GP15. La résistance de protection de chaque LED devrait être d'au moins 100 Ω, mais la valeur exacte n'est pas importante.
Page web
À mon avis, la façon la plus conviviale d'allumer et d'éteindre des LEDs à partir d'une page web consiste à offrir à l'utilisateur un bouton à cocher pour chacune des LEDs: on coche la case pour que la LED s'allume, on la décoche pour qu'elle s'éteigne, et les changements sont appliqués lorsqu'on clique sur le bouton "Appliquer".
Notre page web comportera donc un formulaire html.
Script micropython
Voici le script en micropython; il a été inspiré d'un exemple fourni dans le guide officiel Connecting to the internet with Raspberry Pi Pico W.
Avec ce programme, le pico se branche à un réseau wifi (il faut écrire le nom du réseau et le mot de passe avant d'exécuter le script), puis il construit la page web contenant le formulaire et modifie l'état des 3 LEDs en fonction des cases qui ont été cochées.
Le contenu de la page web est presque entièrement statique. Le seul élément qui peut changer est la mention "checked" qui peut apparaître ou non dans les paramètres de chaque case à cocher, pour indiquer si la case est cochée ou non: c'est la raison des variables bouton1Str, bouton2Str et bouton3Str qui sont insérées aux endroits appropriés du code html lors de la construction de la page.
-
''' | |
On contrôle 3 LEDs branchées au Raspberry Pi Pico W | |
au moyen des cases à cocher d'une page web. | |
Pour plus d'information, voir le blog; | |
https://electroniqueamateur.blogspot.com/2022/07/raspberry-pi-pico-w-controler-des-leds.html | |
''' | |
# importation des bibliothèques pertinentes | |
import machine | |
import socket | |
import network | |
import time | |
#écrivez le nom du réseau wifi et le mot de passe | |
ssid = 'nom-du-reseau-wifi' | |
password = 'mot-de-passe-du-wifi' | |
# Les LEDs sont branchées aux broches 13, 14 et 15 | |
LED1 = machine.Pin(13, machine.Pin.OUT) | |
LED2 = machine.Pin(14, machine.Pin.OUT) | |
LED3 = machine.Pin(15, machine.Pin.OUT) | |
# au départ, les boutons ne sont pas cochés | |
bouton1Str = '' | |
bouton2Str = '' | |
bouton3Str = '' | |
# contenu de la page web; les accolades seront remplacées | |
# par les strings bouton1Str , bouton2Str et bouton3Str | |
html = """<!DOCTYPE html> | |
<html> | |
<head> <title>Raspberry Pi Pico W</title> </head> | |
<body> <h1>Controle de LEDs:</h1> | |
<form action='/' method='POST'> | |
<p> <INPUT type='checkbox' name='LED1' value='1' {}>LED 1 </p> | |
<p> <INPUT type='checkbox' name='LED2' value='1' {}>LED 2 </p> | |
<p> <INPUT type='checkbox' name='LED3' value='1' {}>LED 3 </p> | |
<INPUT type='submit' value='Appliquer'><br><br> | |
</form> | |
</body> | |
</html> | |
""" | |
# connexion au réseau wifi | |
wlan = network.WLAN(network.STA_IF) | |
wlan.active(True) | |
wlan.connect(ssid, password) | |
max_wait = 10 | |
print('attente de la connection a ' + ssid, end='') | |
while max_wait > 0: | |
if wlan.status() < 0 or wlan.status() >= 3: | |
break | |
max_wait -= 1 | |
print('.', end='') | |
time.sleep(1) | |
print ('') | |
if wlan.status() != 3: | |
raise RuntimeError('echec de la connexion a ' + ssid) | |
else: | |
print('connexion reussie') | |
status = wlan.ifconfig() | |
print( 'adresse ip = ' + status[0] ) | |
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] | |
s = socket.socket() | |
s.bind(addr) | |
s.listen(1) | |
while True: | |
cl, addr = s.accept() | |
request = cl.recv(1024) | |
request = str(request) | |
# si on a reçu notre réponse de formulaire: | |
if (not request.find('POST') == -1): | |
# si le bouton LED1 est coché: | |
if (not request.find('LED1=1') == -1): | |
bouton1Str = 'checked' | |
LED1.value(1) | |
print("LED 1 allumee") | |
# si le bouton LED1 n'est pas coché: | |
else: | |
bouton1Str = '' | |
LED1.value(0) | |
print("LED 1 eteinte") | |
# si le bouton LED2 est coché: | |
if (not request.find('LED2=1') == -1): | |
bouton2Str = 'checked' | |
LED2.value(1) | |
print("LED 2 allumee") | |
# si le bouton LED2 n'est pas coché: | |
else: | |
bouton2Str = '' | |
LED2.value(0) | |
print("LED 2 eteinte") | |
# si le bouton LED3 est coché: | |
if (not request.find('LED3=1') == -1): | |
bouton3Str = 'checked' | |
LED3.value(1) | |
print("LED 3 allumee") | |
# si le bouton LED3 n'est pas coché: | |
else: | |
bouton3Str = '' | |
LED3.value(0) | |
print("LED 3 eteinte") | |
# construction de la page web | |
reponse = html.format(bouton1Str,bouton2Str,bouton3Str) | |
cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n') | |
cl.send(reponse) | |
cl.close() | |
-
Après la réussite de la connexion au réseau wifi, l'adresse IP du Raspberry Pi Pico est affichée. Cette adresse vous permet d'accéder à la page web à partir de n'importe quel navigateur web.
Le programme affiche également l'état des LEDs chaque fois qu'on clique sur le bouton"Appliquer", ce qui vous permet de tester le script même si aucune LED n'est réellement connectée à votre Raspberry Pi Pico W.
Aucun commentaire:
Enregistrer un commentaire