🛠 Client HTTP : consommer une API depuis la Pico W
Objetivos
En el sentido inverso: la Pico W se convierte en cliente HTTP. Este es el gesto fundacional de cualquier panel de sensores, despertador conectado o visualización de meteorología. MicroPython incluye la biblioteca requests, que oculta los sockets detrás de un requests.get / requests.post. También verás cómo el mismo gesto se escribe en las otras dos pilas recomendadas para la Pico W: CircuitPython (módulo wifi + socketpool, puerto oficial raspberry_pi_pico_w) y Arduino a través del core comunitario Philhower arduino-pico (recomendado por Adafruit, WiFi.h mapeado sobre el controlador cyw43).
Material
- 1 × Raspberry Pi Pico W + firmware MicroPython
_picow - Acceso a Internet desde el punto de acceso (2,4 GHz)
- Consola serie a 115200 baudios
- Una URL HTTP simple para probar (una API JSON pública, o tu servidor del tutorial anterior)
Código completo
# 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).
Verificación esperada
Se muestra 200 seguido de los primeros caracteres de la página en la consola. Con una API JSON, reemplaza la truncación por r.json para obtener un diccionario Python utilizable. En HTTPS (https://), MicroPython verifica el certificado: se necesita un reloj preciso y CA válidas (ver el tutorial de NTP).
Errores frecuentes
- HTTPS sin hora actualizada: la validación del certificado X.509 falla con un reloj congelado en el año 2000 — sincroniza la hora (NTP) o prueba primero en HTTP.
- Olvidar
pool=poolen CircuitPython:requestsutiliza la interfaz de red predeterminada y la llamada falla; en la Pico W debes pasarSocketPool(wifi.radio). - Respuesta en trozos (chunked) o comprimida con gzip mal procesada por
r.text: algunas APIs envían gzip que MicroPython no descomprime — elige una API sin comprimir o decodifica las cabeceras tú mismo. - Tiempo de espera (timeout) predeterminado demasiado corto en una red Wi-Fi congestionada: pasa
timeout=arequests.get. - Creer que CircuitPython es compatible con BLE: en la Pico W, CircuitPython no soporta BLE (solo capacidad de hardware) — para Bluetooth, usa MicroPython (
bluetooth/aioble) o el SDK C con BTstack. - Saturar la API sin backoff: la radio consume mucha energía; agrupa tus solicitudes y duerme entre ellas (
time.sleep).
Otros tutoriales para esta placa
- 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
Ejemplos de código para esta placa
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython