Dans cet article, nous transformons le Raspberry Pi Pico W en serveur web, afin d'afficher dans une page web la valeur mesurée par un capteur.
Le Raspberry Pi Pico W sera programmé en Micropython. Il faut donc avoir préalablement installé le firmware Micropython de la façon habituelle: vous pressez le bouton BOOTSEL au moment où vous branchez le Raspberry Pi Pico W à un port USB, puis vous enregistrez le fichier uf2 approprié. Si vous n'êtes pas familier avec la programmation d'un Raspberry Pi Pico en Micropython, cet article d'introduction pourrait vous être utile.
En ce qui concerne le capteur, il s'agira pour l'instant d'un simple potentiomètre branché à la broche GP26 du Raspberry Pi Pico W. Ce sera facile d'adapter le script à d'autres capteurs selon vos besoins.
Voici le script en Micropython: le Raspberry Pi Pico se connecte d'abord à un réseau WiFi (vous devrez écrire le nom du réseau et le mot de passe dans le script pour que ça fonctionne). Ensuite, on créé une page web qui présente la valeur du potentiomètre (puisque j'avais plein d'espace sur la page web, j'ai présenté la valeur brute, le pourcentage et la conversion en volts).
La page web est réglée pour se rafraîchir automatiquement toutes les 2 secondes, vous réglez évidemment cette fréquence selon vos besoins.
-
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
On affiche dans une page web la valeur d'un potentiomètre | |
branché au Raspberry Pi Pico | |
Plus d'informations sur le blog: | |
https://electroniqueamateur.blogspot.com/2022/07/raspberry-pi-pico-w-afficher-les.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' | |
password = 'mot_de_passe' | |
# potentiomètre branché à la broche GP26 | |
pot = machine.ADC(26) | |
# Contenu de la page web, en html | |
# les accolades indiquent la position des valeurs numériques variables | |
html = """<!DOCTYPE html> | |
<html> | |
<head> <title>Raspberry Pi Pico W</title> <meta http-equiv=Refresh content=2></head> | |
<body> <h1>Valeur du potentiomètre:</h1> | |
<h2> {} / 65535 </h2> | |
<h2> {} % </h2> | |
<h2> {} V </h2> | |
</body> | |
</html> | |
""" | |
# connexion au réseau wifi | |
wlan = network.WLAN(network.STA_IF) | |
wlan.active(True) | |
wlan.connect(ssid, password) | |
max_wait = 10 # si pas connecté en 10 secondes, on abandonne | |
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() | |
cl_file = cl.makefile('rwb', 0) | |
while True: | |
line = cl_file.readline() | |
if not line or line == b'\r\n': | |
break | |
# lecture du potentiomètre et conversion en pourcentage et en volts: | |
valeur = pot.read_u16() | |
pourcentage = valeur / 65535 * 100 | |
volts = valeur / 65535 * 3.3 | |
# construction de la page web (on insère les variables) | |
reponse = html.format(str(valeur), str("%.1f" % pourcentage), str("%.2f" % volts)) | |
cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n') | |
cl.send(reponse) | |
cl.close() | |
-
Au démarrage du script, si la connexion au réseau wifi est réussie, le programme affiche l'adresse IP du Raspberry Pi Pico W. Il s'agit de coller cette adresse dans un navigateur web pour accéder à la page web.
Si vous tournez le bouton du potentiomètre, la valeur affichée sera modifiée.
À lire également:
Yves Pelletier (Facebook)
Bonjour,
RépondreSupprimerJ'ai bien compris votre tuto, mais maintenant je bute pour pouvoir lire ces valeurs hors de chez moi. Comment communiquer cette page vers un hébergeur web ?