🛠 Client HTTP : consommer une API depuis la Pico W
Objectifs
Dans l'autre sens : la Pico W devient cliente HTTP. C'est le geste fondateur de tout tableau de bord de capteurs, réveil connecté ou affichage de météo. MicroPython embarque la bibliothèque requests, qui masque les sockets derrière un requests.get / requests.post. Tu verras aussi comment le même geste s'écrit sur les deux autres piles recommandées pour la Pico W : CircuitPython (module wifi + socketpool, port officiel raspberry_pi_pico_w) et Arduino via le core communautaire Philhower arduino-pico (recommandé par Adafruit, WiFi.h cartographié sur le pilote cyw43).
Matériel
- 1 × Raspberry Pi Pico W + firmware MicroPython
_picow - Accès Internet côté point d'accès (2,4 GHz)
- Console série 115200 bauds
- Une URL HTTP simple pour tester (une API JSON publique, ou ton serveur du tuto précédent)
Code complet
# http_client.py — GET + POST JSON depuis la Pico W (MicroPython)
import machine, network, time
wlan = network.WLAN; wlan.active(True)
if not wlan.isconnected:
wlan.connect('my_ssid', 'my_password')
while not wlan.isconnected:
machine.idle
import requests # bundlé dans MicroPython
r = requests.get('http://example.com')
print(r.status_code, r.text[:60]) # 200 + début du corps
# Version CircuitPython (board raspberry_pi_pico_w) — identifiants dans
# CIRCUITPY_WIFI_SSID / CIRCUITPY_WIFI_PASSWORD du fichier settings.toml :
# import wifi, socketpool, requests
# pool = socketpool.SocketPool(wifi.radio)
# r = requests.get('http://example.com', pool=pool)
# >
# wifi.radio.connect non revérifiés sur la doc CircuitPython (404 au fetch).
Vérification attendue
200 suivi des premiers caractères de la page s'affiche sur la console. Avec une API JSON, remplace le troncature par r.json pour obtenir un dictionnaire Python exploitable. En HTTPS (https://), MicroPython vérifie le certificat : une horloge juste et des CA valides sont nécessaires (voir le tuto NTP).
Erreurs fréquentes
- HTTPS sans heure à jour : la validation de certificat X.509 échoue sur une horloge figée en 2000 — synchronise l'heure (NTP) ou teste d'abord en HTTP.
- Oublier le
pool=poolen CircuitPython :requeststombe sur l'interface réseau par défaut et l'appel échoue ; sur Pico W il faut passer leSocketPool(wifi.radio). - Réponse chunked/gzippée mal digérée par
r.text: certaines API envoient du gzip que MicroPython ne décompresse pas — choisis une API en clair ou décode les en-têtes toi-même. - Timeout par défaut trop court sur réseau Wi-Fi encombré : passe
timeout=àrequests.get. - Croire CircuitPython capable de BLE : sur Pico W, le BLE n'est pas supporté par CircuitPython (capacité matérielle seulement) — pour le Bluetooth, passe sur MicroPython (
bluetooth/aioble) ou le C SDK avec BTstack. - Spam d'API sans backoff : la radio consomme beaucoup ; regroupe tes requêtes et dors entre deux (
time.sleep).
Autres tutoriels pour cette carte
- Faire clignoter la LED embarquée (elle est derrière la puce Wi-Fi !)
- Se connecter à un réseau Wi-Fi (station, WPA2/WPA3)
- Bouton et potentiomètre sans marcher sur le sans-fil (GPIO libres & ADC)
- Servir une page web depuis la Pico W (socket TCP + HTTP)
- Heure exacte via NTP : l'horloge temps réel des projets connectés
- Client MQTT : télémétrie IoT légère sur la Pico W
Exemples de code pour cette carte
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython