[Tuto] Raspberry Pi Pico 2 W : mise en route, Wi-Fi et première application
Jour, nuit, jour…
Cette semaine, la fondation Raspberry Pi a annoncé le Pico 2 W, un micro-ordinateur avec du Bluetooth et du Wi-Fi pour seulement 8 euros. Nous en avons commandé un exemplaire afin de vous proposer une première prise en main. Dans ce tuto, nous allons contrôler à distance la LED intégrée.
Le 29 novembre à 16h38
7 min
Hardware
Hardware
Première étape : préparer le Pico 2 W avec un fichier UF2
Avant de se lancer dans la moindre ligne de code, la première chose à faire est de préparer notre Pico 2 W. La manipulation est la même qu’avec le Pico premier du nom. Sur cette page, la fondation Raspberry Pi propose tout le nécessaire… qui se résume à un fichier « UF2 » à télécharger. Dans notre cas, on clique sur le lien pour le Pico 2 W.
L’installation n’est pas plus compliquée et consiste simplement à copier le fichier téléchargé – mp_firmware_unofficial_latest.uf2 dans le cas présent – sur le stockage interne du Pico 2 W. Pour cela, connectez-le à votre ordinateur avec un câble micro-USB.
Si c’est la première utilisation du micro-contrôleur, l’espace de stockage devrait directement apparaitre. Dans le cas contraire, débranchez le Pico 2 W, appuyez et maintenez enfoncé le bouton Bootsel puis branchez le port USB jusqu’à ce que l’ordinateur détecte le Pico 2 W et son espace de stockage. Vous pouvez alors relâcher le bouton.
On installe Thonny, un IDE MicroPython multiplateforme
Pour programmer notre Pico 2 W, nous installons Thonny, un IDE multiplateforme (Windows, Linux et macOS) dont la dernière mouture est la 4.1.6. Il existe aussi une version portable si besoin. Dans les deux cas, la procédure est classique, sans surprise.
Lancez Thonny. Sur l’interface graphique, vérifiez en bas à droite que vous êtes bien connecté au micro-contrôleur et pas en « local ». Il suffit sinon de cliquer dessus pour changer et passer sur le Raspberry Pi Pico (le 2 W n’est pas mentionné, mais cela n’a aucune importance).
Tuto Disco : on allume et on éteint la LED… Amazing !
Pour nos premières expériences, on va utiliser la LED intégrée au PCB. Trois lignes de codes suffisent (remplacez le 1 par un 0 et relancez le programme pour éteindre la LED) :
from machine import Pin
led_int = Pin("LED", Pin.OUT)
led_int.value(1)
On ajoute un peu de dynamisme avec un clignotement asymétrique… Super Amazing ! Dans les lignes de code ci-dessous, nous avons importé la bibliothèque « time » et utilisé la fonction « while » pour faire tourner en boucle notre programme (« while true » tourne tout le temps, puisque true est toujours vrai).
from machine import Pin
from time import *
led_int = Pin("LED", Pin.OUT)
while True:
led_int.value(1)
sleep_ms(1000)
led_int.value(0)
sleep_ms(250)
Vous l’aurez compris ou deviné, ce programme allume la LED, attend une seconde, éteint la LED, attend 250 ms, allume la LED, etc.
On passe la seconde : Wi-Fi et mini serveur web
Nous souhaitons maintenant connecter notre Pico 2 W à un point d’accès Wi-Fi.
On demande à Claude.ai comment se connecter au Pico sans fil à l’aide de Thonny et l’IA générative nous donne la bonne solution du premier coup, avec des explications et des messages dans la console pour vérifier le bon fonctionnement de la connexion. Pensez à adapter ssid et password à votre réseau Wi-Fi.
import network
import time
# Activer le WiFi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
ssid ='MonSSID'
password ='MonMDP'
wlan.connect(ssid, password)
max_wait = 10
while max_wait > 0:
if wlan.status() < 0 or wlan.status() >= 3:
break
max_wait -= 1
print('En attente de connexion...')
time.sleep(1)
# Gérer l'erreur de connexion
if wlan.status() != 3:
raise RuntimeError('Échec de la connexion au réseau')
else:
print('Connecté !')
status = wlan.ifconfig()
print('Adresse IP:', status[0])+
C’est bien beau, mais à quoi ça sert ? En l’état, pas à grand-chose, alors on va commander l’allumage et l’extinction de la LED depuis un autre ordinateur, avec un navigateur.
Nous avons repris le code de ce dépôt GitHub avec quelques ajustements pour que l’ensemble du code soit dans un seul fichier, plus pratique dans notre cas. Pensez à modifier les lignes 20 et 21 avec les paramètres de votre Wi-Fi (SSID et mot de passe).
import rp2
import network
import ubinascii
import machine
import urequests as requests
import time
import socket
# Set country to avoid possible errors
rp2.country('DE')
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# If you need to disable powersaving mode
# wlan.config(pm = 0xa11140)
# See the MAC address in the wireless chip OTP
mac = ubinascii.hexlify(network.WLAN().config('mac'),':').decode()
print('mac ='+ mac)
ssid ='MonSSID'
pw ='MonMDP'
wlan.connect(ssid, pw)
# Wait for connection with 10 second timeout
timeout = 10
while timeout > 0:
if wlan.status() < 0 or wlan.status() >= 3:
break
timeout -= 1
print('Waiting for connection...')
time.sleep(1)
# Define blinking function for onboard LED to indicate error codes
def blink_onboard_led(num_blinks):
led = machine.Pin('LED', machine.Pin.OUT)
for i in range(num_blinks):
led.on()
time.sleep(.2)
led.off()
time.sleep(.2)
# Handle connection error
# Error meanings
# 0 Link Down
# 1 Link Join
# 2 Link NoIp
# 3 Link Up
#- 1 Link Fail
#- 2 Link NoNet
#- 3 Link BadAuth
wlan_status = wlan.status()
blink_onboard_led(wlan_status)
if wlan_status != 3:
raise RuntimeError('Wi-Fi connection failed')
else:
print('Connected')
status = wlan.ifconfig()
print('ip ='+ status[0])
# Function to load in html page
def get_html(html_name):
with open(html_name, 'r') as file:
html = file.read()
return html
# HTTP server with socket
addr = socket.getaddrinfo('0.0.0.0', 80)[0][- 1]
s = socket.socket()
s.bind(addr)
s.listen(1)
print('Listening on', addr)
led = machine.Pin('LED', machine.Pin.OUT)
# Listen for connections
while True:
try:
cl, addr = s.accept()
print('Client connected from', addr)
r = cl.recv(1024)
# print(r)
r = str(r)
led_on = r.find('?led=on')
led_off = r.find('?led=off')
print('led_on =', led_on)
print('led_off =', led_off)
if led_on >- 1:
print('LED ON')
led.value(1)
if led_off >- 1:
print('LED OFF')
led.value(0)
cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
cl.send("""<!DOCTYPE html>
<html>
<head>
<title>Pico W</title>
</head>
<body>
<h1>Pico W</h1>
<p>Controler la LED intégrée </p>
<a href=\"?led=on\"><button>ON</button></a>
<a href=\"?led=off\"><button>OFF</button></a>
</body>
</html>
""")
cl.close()
except OSError as e:
cl.close()
print('Connection closed')
On enregistre tout sur le Pico 2 W
Thonny permet de sauvegarder le code directement dans le stockage du Raspberry Pi Pico 2 W. Pour que notre programme s’exécute automatiquement au démarrage, il faut l’enregistrer sous le nom le « main.py ».
Si on branche le Raspberry Pi sur une prise électrique, il devrait clignoter trois fois au bout de quelques secondes pour indiquer que la connexion au Wi-Fi est en place.
Il suffit ensuite de saisir l’adresse IP du Pico 2 W dans un navigateur pour accéder à la page (très) épurée permettant d’allumer ou éteindre la LED. Libre à vous de modifier le code pour la rendre plus joyeuse, ajouter d’autres fonctions, etc.
C’est un exemple élémentaire, mais on peut imaginer bien plus de possibilités en jouant avec les ports GPIO par exemple. Le Wi-Fi permet alors de dialoguer directement avec le Pico 2 W pour envoyer et/ou recevoir des données.
N’hésitez pas à nous faire part de vos projets passés ou à venir.
[Tuto] Raspberry Pi Pico 2 W : mise en route, Wi-Fi et première application
-
Première étape : préparer le Pico 2 W avec un fichier UF2
-
On installe Thonny, un IDE MicroPython multiplateforme
-
Tuto Disco : on allume et on éteint la LED… Amazing !
-
On passe la seconde : Wi-Fi et mini serveur web
-
On enregistre tout sur le Pico 2 W
Commentaires (16)
Vous devez être abonné pour pouvoir commenter.
Déjà abonné ? Se connecter
Abonnez-vousLe 29/11/2024 à 21h39
Désolé.
Le 29/11/2024 à 21h57
Le 29/11/2024 à 22h24
Le 29/11/2024 à 22h30
Le 01/12/2024 à 13h50
En parlant de coloration syntaxique, il est prévu d'avoir des numéros de lignes quand on utilise la balise "code" ?
Parce ce que dans certains cas, ce serait quand même pratique :
Le 02/12/2024 à 11h58
Le 02/12/2024 à 13h19
Quand j'ai copié le programme dans vi, j'ai pu accéder immédiatement aux lignes citées dans l'article. Sinon un CTRL-F ssid sur la page de l'article permet de retrouver les lignes en question rapidement.
Mettre les numéros de ligne dans l'article rendrait compliqué le copier/coller : il faudrait ensuite supprimer les numéros de ligne qui ne seraient pas interprétées correctement par l'interpréteur python.
Par contre, oui, utiliser un dépôt en ligne est probablement une bonne idée sauf si vous préférez héberger les fichiers contenant les programmes chez vous. Comme ce sont de simples fichiers texte, ça serait simple aussi, mais peut-être moins organisé.
Modifié le 02/12/2024 à 19h56
Tu cliques sur le bouton bleu "Run code snippet" et t'as un code qui s'affiche à l'écran, avec des numéros de lignes et quand tu sélectionnes le code, tu ne sélectionnes pas les numéros de lignes.
@SébastienGavois :
Après il est évident que s'il y a trois exemple de code dans l'année, c'est peut-être pas le plus pertinent d'ajouter cette fonctionnalité
Mais ça peut être un truc assez sympa, et pas forcément que pour le site mais aussi pour les commentaires, pour discuter d'un code sans pour autant dire que "c'est à coté du second if()", là juste indiquer le numéro de ligne suffit.
Et si on prend un plugin, il y a possiblement la coloration syntaxique qui va avec.
'fin bref, à voir.
Le 02/12/2024 à 09h08
Le 30/11/2024 à 17h15
Pas d'accès à un système Linux complet donc plus simple ?
J'ai toujours apprécié les déploiements de hobbyiste avec Balena par exemple sur RPi.
Le 30/11/2024 à 19h33
Le 02/12/2024 à 11h37
Le 02/12/2024 à 12h32
Le 02/12/2024 à 12h40
Le 02/12/2024 à 09h47
Mais c'est déjà possible avec un ESP32...
Le 03/12/2024 à 08h50