🛠 Client HTTP : requête GET vers une API
Objetivos
Una vez conectado al Wi-Fi (tutorial de conexión), consultar una API HTTP: construir manualmente una solicitud GET, leer la respuesta, verificar el código de estado y extraer los datos. El CYW43439 está limitado a 2,4 GHz y su velocidad está limitada por el enlace SPI de ~33 MHz hacia el RP2350: mantenga las respuestas ligeras.
Material
- Pico 2 W conectado al Wi-Fi (ver pico2w-connexion-wifi)
- MicroPython >= v1.25.0 (o pico-sdk con lwIP)
- Una API HTTP en texto plano para la prueba (ejemplo: httpbin.org)
Código completo
# main.py - MicroPython : GET HTTP sur le port 80
import network, socket, time
wlan = network.WLAN
wlan.active(True)
if not wlan.isconnected:
wlan.connect('mon_ssid', 'mon_mot_de_passe')
while not wlan.isconnected:
time.sleep_ms(200)
hote = 'httpbin.org'
chemin = '/get'
s = socket.socket
s.connect(socket.getaddrinfo(hote, 80)[0][-1])
s.send(('GET %s HTTP/1.0\r\nHost: %s\r\nConnection: close\r\n\r\n'
% (chemin, hote)).encode)
entete = s.readline # b'HTTP/1.1 200 OK'
print('Statut :', entete.decode.split[1])
while s.readline.strip: # sauter les entetes
pass
print('Corps :', s.read(120).decode)
s.close
En C, el pico-examples oficial pico_w/wifi/http_client (picow_http_client.c) hace lo mismo con tcp_new/tcp_write.
Verificación esperada
La consola muestra Estado: 200 y luego los primeros bytes del cuerpo JSON. Al cortar el Wi-Fi, la conexión falla correctamente con una excepción o un código de error en lugar de bloquear la placa.
Errores frecuentes
- Olvidar la cabecera Host: muchos servidores devuelven 400.
- Leer el cuerpo sin vaciar las líneas de cabecera: el JSON parece corrupto.
- Usar https:// con un socket simple: se necesita TLS (ver pico2w-wifi-tls-certificats).
- En C, olvidar el bloqueo cyw43_arch_lwip_begin/end alrededor de las llamadas tcp_* fuera de los callbacks.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.pyPythonbouton-interruption.pyPythonpwm-servo.pyPythonlecture-adc.pyPythonneopixel.pyPythonoled-i2c.pyPython