Este tutorial es una guía de inicio para las peticiones HTTP GET con la Raspberry Pi Pico W. Las peticiones HTTP son fundamentales para interactuar con servicios web para recuperar datos de fuentes externas, integrarse con APIs web para acceder a servicios de terceros y mucho más.
En esta guía, aprenderás los conceptos básicos de las peticiones HTTP GET y probarás algunos ejemplos sencillos para obtener datos de internet.

Cuando se trata de proyectos de IoT (Internet de las Cosas), las peticiones HTTP son fundamentales para interactuar con servicios web con el fin de recuperar datos de fuentes externas, integrarse con APIs Web para acceder a servicios en línea, o incluso controlar remotamente tu Pico utilizando plataformas externas de terceros.
Requisitos previos
Antes de continuar, asegúrate de verificar los siguientes requisitos previos:
Firmware de MicroPython
Para seguir este tutorial, necesitas tener instalado el firmware de MicroPython en tu placa Raspberry Pi Pico. También necesitas un IDE para escribir y cargar el código en tu placa.

¿Qué son las peticiones HTTP?
La forma más común de intercambiar datos con otra computadora (servidor) en internet es utilizando el protocolo HTTP.
HTTP (Hypertext Transfer Protocol o Protocolo de Transferencia de Hipertexto) funciona a través de un modelo cliente-servidor.

Cliente: inicia la comunicación a través de una petición. Servidor: recibe y procesa la petición y envía una respuesta a cambio.
La Raspberry Pi Pico puede ser tanto un cliente como un servidor. Cuando es un cliente, envía peticiones a los servidores. Cuando es un servidor, gestiona las peticiones de los clientes.
En este tutorial, daremos un vistazo a la Raspberry Pi Pico como un cliente HTTP.
Aquí tienes algunos ejemplos de lo que puedes hacer usando peticiones HTTP con la Pico:
-
Obtener datos de internet: por ejemplo, la hora, el clima actual, precios de acciones, actualizaciones de tráfico y mucho más…
-
Registro de datos (Datalogging): enviar datos a la nube para guardarlos en línea.
-
Control remoto de tu Raspberry Pi Pico: al interactuar con plataformas de IoT como Adafruit IO, Node-RED y otras, puedes interactuar con tu placa de forma remota intercambiando datos a través de peticiones HTTP.
-
Interactuar con servicios de terceros para enviar notificaciones: SMS, correos electrónicos, notificaciones y mucho más…
Descripción Técnica de las Peticiones HTTP
Echemos un vistazo rápido a los aspectos técnicos de las peticiones HTTP. Si esta es la primera vez que tratas con peticiones HTTP de manera técnica y te parece confuso, es perfectamente normal.
Pero no te preocupes, existen módulos de MicroPython que abstraen toda la parte técnica, haciendo que sea muy sencillo realizar y gestionar peticiones HTTP. Además, para obtener más información sobre los aspectos técnicos de las peticiones HTTP, recomendamos los siguientes recursos:
Peticiones HTTP
Una petición HTTP consta de varias partes. Los elementos principales son: la línea de petición (request line), las cabeceras (headers) y el cuerpo (body).
Línea de Petición (Request Line)
La línea de petición especifica el método HTTP, el recurso que se solicita (la URL) y la versión del protocolo HTTP que se está utilizando. Los métodos HTTP comunes incluyen GET, POST, PUT y DELETE. Por ejemplo:
GET /path/to/resource HTTP/1.1Cabeceras (Headers)
Las cabeceras proporcionan información sobre la petición. Pueden incluir el host al que el cliente envía la petición, el tipo de contenido que se envía o acepta, el user‑agent (identifica al cliente que realiza la petición) y más. Por ejemplo:
Host: example.com
User-Agent: RaspberryPiPico
Accept: application/jsonCuerpo (Body)
El cuerpo es un contenido opcional y contiene los datos o la información que queremos enviar al servidor. Esto se utiliza en peticiones POST y PUT. Por ejemplo:
POST /submit-form HTTP/1.1
Content-Type: application/x-www-form-urlencoded
username=johndoe&password=secretpasswordMétodos de Petición HTTP
La elección del método HTTP en una petición indica la acción que se pretende realizar en el servidor. Algunos métodos utilizados comúnmente incluyen:
-
GET: recuperar datos del servidor.
-
POST: enviar datos para ser procesados a un recurso especificado.
-
PUT: actualizar un recurso en el servidor.
-
DELETE: eliminar un recurso del servidor.
En este tutorial, nos centraremos en el uso de peticiones GET con la Raspberry Pi Pico.
Códigos de Estado HTTP
Tras recibir una petición HTTP, el servidor responde con un código de estado HTTP que indica el resultado de la petición. Los códigos de estado se dividen en categorías como 2xx (exitoso), 3xx (redirección), 4xx (error del cliente) y 5xx (error del servidor). Algunos de los más comunes son:
-
200 OK: la petición fue exitosa.
-
404 Not Found: no se pudo encontrar el recurso solicitado.
Peticiones HTTP con la Raspberry Pi Pico
La forma más sencilla de realizar peticiones HTTP con la Raspberry Pi Pico es utilizando la librería requests, la cual utiliza un enfoque de alto nivel. Esta es muy similar a la librería requests de Python, pero es más limitada.
También puedes usar el módulo socket, pero es un enfoque de más bajo nivel y no es tan amigable para principiantes.
El siguiente código es un ejemplo básico de cómo puedes realizar una petición HTTP sencilla al sitio web de Google utilizando la librería requests.
# Rui Santos & Sara Santos - Random Nerd Tutorials
# Detalles completos del proyecto: https://RandomNerdTutorials.com/raspberry-pi-pico-w-http-requests-micropython/
import network
import urequests as requests # En algunas versiones de firmware se usa 'urequests'
# Credenciales Wi-Fi
ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'
# Conectar a la red
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# Conectar a tu red
wlan.connect(ssid, password)
# Realizar petición GET
response = requests.get("http://www.google.com")
# Obtener código de respuesta
response_code = response.status_code
# Obtener contenido de la respuesta
response_content = response.content
# Imprimir resultados
print('Código de respuesta: ', response_code)
print('Contenido de la respuesta:', response_content)Cómo funciona el código
Comienza incluyendo las librerías network y requests.
import network
import requestsReemplaza 'REPLACE_WITH_YOUR_SSID' y 'REPLACE_WITH_YOUR_PASSWORD' con el nombre de tu red Wi-Fi (SSID) y la contraseña.
ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'Luego, inicializa la interfaz Wi-Fi, actívala y conéctate a tu red utilizando el SSID y la contraseña definidos anteriormente.
# Conectar a la red
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# Conectar a tu red
wlan.connect(ssid, password)requests y el método get(), el código envía una petición GET al sitio web de Google. La respuesta del servidor se almacena en la variable response.
response = requests.get("http://www.google.com")La variable response es un objeto de tipo Response. Este objeto tiene varios atributos a los que puedes acceder y que pueden ser útiles. Por ejemplo:
-
response.status_code: devuelve un valor entero que representa el estado de la respuesta (ej. 200). -
response.content: devuelve el contenido real en bytes. -
response.text: devuelve el contenido convertido a una cadena de texto (string), utilizando una codificación de caracteres como UTF-8. -
response.json(): devuelve la respuesta como un objeto JSON (diccionario de Python). -
response.headers(): permite acceder a la información sobre las cabeceras de la respuesta.
Después de obtener la respuesta, obtenemos el estado de la misma utilizando el atributo status_code.
response_code = response.status_codeGuardamos el contenido de la respuesta en la variable response_content utilizando el atributo content.
response_content = response.contentFinalmente, imprimimos el código de estado y el contenido de la petición en la Terminal (Shell).
print('Response code: ', response_code)
print('Response content:', response_content)Probando el código
Después de introducir tus credenciales de red, puedes ejecutar el código anterior en tu Raspberry Pi Pico.
Si todo sale como se espera, el código de respuesta debería ser 200, y se imprimirá el contenido de la página web de Google.

Obtención de datos de la web mediante peticiones HTTP GET
Ahora que ya sabes cómo realizar una petición HTTP GET básica, te mostraremos diferentes ejemplos para obtener datos de internet. Construiremos dos ejemplos diferentes:
Ejemplo 1: Pronosticador del tiempoEn este ejemplo, utilizaremos la Weather API para crear un pronosticador del tiempo. Esta API es gratuita y proporciona información útil sobre el clima en casi cualquier lugar del mundo.

Obtendremos los datos meteorológicos para tu ubicación y los mostraremos en la terminal (shell).
Obtención de tu clave API (API Key)
- Ve al sitio web de Weather API:
https://www.weatherapi.com/ - Regístrate para crear una cuenta.
- Después de verificar tu cuenta, inicia sesión.
- En tu panel de control (dashboard) en
, encontrarás tu clave API (aunque diga que la prueba terminará, puedes seguir usando tu clave API gratuitamente).https://www.weatherapi.com/my/

Copia la clave API en un lugar seguro porque la necesitarás más tarde.
Para extraer información sobre el clima en la ubicación que elijas, ingresa la siguiente URL en tu navegador web, pero insertando tu ubicación y tu clave API en los lugares correctos:
https://api.weatherapi.com/v1/current.json?q=TU_UBICACION+&key=TU_CLAVE_API
Por ejemplo, en mi caso: https://api.weatherapi.com/v1/current.json?q=Oporto+&key=d1578a064b07453c917164350240106
Copia tu URL y pégala en tu navegador; la API devolverá información correspondiente a tu clima local. Por ejemplo:
{
"location": {
"name": "Oporto",
"region": "Porto",
"country": "Portugal",
"lat": 41.15,
"lon": -8.62,
"tz_id": "Europe/Lisbon",
"localtime_epoch": 1719843562,
"localtime": "2024-07-01 15:19"
},
"current": {
"last_updated_epoch": 1719843300,
"last_updated": "2024-07-01 15:15",
"temp_c": 22.3,
"temp_f": 72.1,
"is_day": 1,
"condition": {
"text": "Sunny",
"icon": "//cdn.weatherapi.com/weather/64x64/day/113.png",
"code": 1000
},
"wind_mph": 10.5,
"wind_kph": 16.9,
"wind_degree": 310,
"wind_dir": "NW",
"pressure_mb": 1021,
"pressure_in": 30.15,
"precip_mm": 0,
"precip_in": 0,
"humidity": 69,
"cloud": 0,
"feelslike_c": 24.7,
"feelslike_f": 76.4,
"windchill_c": 21.9,
"windchill_f": 71.5,
"heatindex_c": 24.6,
"heatindex_f": 76.2,
"dewpoint_c": 15,
"dewpoint_f": 58.9,
"vis_km": 10,
"vis_miles": 6,
"uv": 6,
"gust_mph": 15.4,
"gust_kph": 24.7
}
}Código – Petición HTTP GET: Weather API
El siguiente código realiza una petición a la Weather API para obtener datos meteorológicos de tu ubicación. Después, mostramos los datos en la terminal (shell). Mostraremos información sobre el clima actual, la temperatura, la humedad y la lluvia.
# Rui Santos & Sara Santos - Random Nerd Tutorials
# Detalles completos del proyecto: https://RandomNerdTutorials.com/raspberry-pi-pico-w-http-requests-micropython/
import network
import time
import urequests as requests # Usamos urequests para MicroPython
# Credenciales Wi-Fi
ssid = 'REEMPLAZA_CON_TU_SSID'
password = 'REEMPLAZA_CON_TU_CONTRASEÑA'
api_key = 'REEMPLAZA_CON_TU_API_KEY'
location ='Oporto'
# URL de la petición
url = f'https://api.weatherapi.com/v1/current.json?q={location}+&key={api_key}'
def init_wifi(ssid, password):
# Inicializar interfaz Wi-Fi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# Conectar a tu red
wlan.connect(ssid, password)
# Esperar la conexión Wi-Fi
connection_timeout = 10
while connection_timeout > 0:
if wlan.status() >= 3:
break
connection_timeout -= 1
print('Esperando conexión Wi-Fi...')
time.sleep(1)
# Verificar si la conexión fue exitosa
if wlan.status() != 3:
return False
else:
print('¡Conexión exitosa!')
network_info = wlan.ifconfig()
print('Dirección IP:', network_info[0])
return True
if init_wifi(ssid, password):
try:
# Realizar la petición
response = requests.get(url)
# Imprimir el código de respuesta
print('Código de respuesta: ', response.status_code)
# Obtener el contenido de la respuesta en formato JSON
weather = response.json()
# Cerrar la petición
response.close()
# Imprimir todos los datos del clima (bruto)
print('JSON del clima: ', weather)
# Obtener datos meteorológicos específicos
weather_description = weather['current']['condition']['text']
print('Clima actual: ', weather_description)
# Temperatura y humedad
temperature_c = weather['current']['temp_c']
temperature_f = weather['current']['temp_f']
humidity = weather['current']['humidity']
print(f'Temperatura en Celsius: {temperature_c:.2f}')
print(f'Temperatura en Fahrenheit: {temperature_f:.2f}')
print(f'Humedad (%): {humidity:.2f}')
# Precipitación
precipitation = weather['current']['precip_mm']
print(f'Precipitación en mm: {precipitation}')
# Viento
wind_speed = weather['current']['wind_kph']
print('Velocidad del viento en kph:', wind_speed)
except Exception as e:
# Manejar cualquier excepción durante la petición
print('Error durante la petición:', e)Cómo funciona el código
Echemos un vistazo rápido a cómo funciona este código.
Para que el código funcione, primero debes introducir tus credenciales de red para conectar tu Raspberry Pi Pico a internet.
# Credenciales Wi-Fi
ssid = 'REEMPLAZA_CON_TU_SSID'
password = 'REEMPLAZA_CON_TU_CONTRASEÑALuego, introduce tu clave API de Weather API y la ciudad de la cual quieres obtener los datos.api_key = 'REEMPLAZA_CON_TU_CLAVE_API'
location = 'REEMPLAZA_CON_TU_CIUDAD'Guardamos la URL de la petición en la variable url. Esta es una f-string (cadena literal formateada) con marcadores de posición para que la URL se actualice con tus detalles específicos en tiempo de ejecución.
url = f'https://api.weatherapi.com/v1/current.json?q={location}+&key={api_key}'Creamos una función llamada init_wifi() que se conecta a tu red local. Esta función devuelve True si la conexión al Wi-Fi fue exitosa o False si no lo fue.
def init_wifi(ssid, password):
# Inicializa la interfaz Wi-Fi en modo estación (STA)
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# Inicia el intento de conexión con el SSID y la contraseña
wlan.connect(ssid, password)
# Tiempo de espera para la conexión (10 segundos)
connection_timeout = 10
while connection_timeout > 0:
# El estado 3 indica que la placa ha obtenido una dirección IP correctamente
if wlan.status() >= 3:
break
connection_timeout -= 1
print('Esperando conexión Wi-Fi...')
time.sleep(1)
# Verifica si la conexión falló tras el tiempo de espera
if wlan.status() != 3:
return False
else:
print('¡Conexión exitosa!')
# Obtiene la configuración de red (IP, máscara, puerta de enlace, DNS)
network_info = wlan.ifconfig()
print('Dirección IP:', network_info[0])
return TrueLuego, nos conectamos al Wi-Fi y comprobamos si la conexión fue exitosa antes de realizar la petición.
if init_wifi(ssid, password):Realizar la petición es tan sencillo como utilizar el método get() del módulo requests y pasar la URL como argumento.
response = requests.get(url)Esto devolverá un objeto JSON. Por lo tanto, podemos convertir el resultado en un diccionario de Python utilizando el método json().
weather = response.json()Luego, cerramos la conexión para liberar cualquier recurso.
# Cerrar la peticiónresponse.close()Ahora, tenemos todos los datos que viste en tu navegador web en los pasos anteriores guardados en la variable weather.
Accedes a información específica utilizando las claves de los datos que quieres obtener. Obtenemos la descripción del clima, la temperatura, la humedad, la precipitación y la velocidad del viento. También puedes obtener otras propiedades accediendo a las claves correspondientes en el objeto JSON.
# Obtener datos meteorológicos específicos
weather_description = weather['current']['condition']['text']
print('Clima actual: ', weather_description)
# Temperatura y humedad
temperature_c = weather['current']['temp_c']
temperature_f = weather['current']['temp_f']
humidity = weather['current']['humidity']
print(f'Temperatura en Celsius: {temperature_c:.2f}')
print(f'Temperatura en Fahrenheit: {temperature_f:.2f}')
print(f'Humedad (%): {humidity:.2f}')
# Precipitación
precipitation = weather['current']['precip_mm']
print(f'Precipitación en mm: {precipitation}')
# Viento
wind_speed = weather['current']['wind_kph']
print('Velocidad del viento en kph:', wind_speed)Probando el código
Después de introducir tus credenciales de red, la clave API y la ciudad, puedes ejecutar el código en tu Raspberry Pi Pico.
Deberías obtener algo similar a lo que se muestra en la captura de pantalla de abajo, pero con la información de la ubicación que hayas elegido.

Puedes llevar este proyecto un paso más allá mostrando los datos en una pantalla, como un display LCD u OLED. También puedes crear un bucle while o una interrupción por temporizador (timer interrupt) para solicitar datos de forma periódica, o incluso consultar la información de múltiples ubicaciones simplemente cambiando el valor de la variable city.
Ejemplo 2: Solicitar el precio de Bitcoin
En este ejemplo, solicitaremos y mostraremos el precio actual de Bitcoin. CoinGecko tiene un endpoint (punto de acceso) que puedes utilizar para realizar peticiones que devuelven el precio actual de Bitcoin en dólares (USD):
https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd
Si abres esa URL en tu navegador web, deberías obtener algo como lo siguiente:
{"bitcoin":{"usd":62748}}
Ahora, utilizando esa URL, podemos obtener fácilmente el precio de Bitcoin con nuestra Raspberry Pi Pico.
# Rui Santos & Sara Santos - Random Nerd Tutorials
# Complete project details: https://RandomNerdTutorials.com/raspberry-pi-pico-w-http-requests-micropython/
import network
import requests
from time import sleep
# Wi-Fi credentials
ssid = 'REPLACE_WITH_YOUR_SSID'
password = 'REPLACE_WITH_YOUR_PASSWORD'
# Request URL
url = 'https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd'
def init_wifi(ssid, password):# Init Wi-Fi Interface
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
# Connect to your network
wlan.connect(ssid, password)
# Wait for Wi-Fi connection
connection_timeout = 10
while connection_timeout > 0:
if wlan.status() >= 3:
break
connection_timeout -= 1
print('Waiting for Wi-Fi connection...')
sleep(1)
# Check if connection is successful
if wlan.status() != 3:
return False
else:
print('Connection successful!')
network_info = wlan.ifconfig()
print('IP address:', network_info[0])
return True
if init_wifi(ssid, password):
try:
# Make the request
response = requests.get(url)
#Print the response code
print('Response code: ', response.status_code)
# Get response content
bitcoin = response.json()
# Close the request
response.close()
# Print bitcoin price
bitcoin_price = bitcoin['bitcoin']['usd']
print('Bitcoin price (USD): ', bitcoin_price)
except Exception as e:
# Handle any exceptions during the request
print('Error during request:', e)Este código funciona de manera similar al del ejemplo anterior.

Llevándolo más allá
Ahora, puedes llevar este proyecto un paso más allá y mostrar el precio de Bitcoin en una pantalla OLED o LCD y actualizar los datos diariamente. También puedes solicitar datos de diferentes criptomonedas.
Incluso podrías añadir algún tipo de notificación que te envíe un mensaje cuando el precio cruce un determinado valor umbral (por ejemplo, si baja de cierto precio).
Conclusión
En este tutorial, has aprendido qué son las peticiones HTTP GET y por qué son tan útiles en proyectos de IoT. También te hemos mostrado dos ejemplos prácticos para obtener datos del mundo real directamente de internet.
Preguntas frecuentes
¿Qué es una petición HTTP GET?
Es el método HTTP que se usa para pedir datos a un servidor. Es fundamental para interactuar con servicios web, recuperar información de fuentes externas e integrarse con APIs de terceros.
¿Qué partes tiene una petición HTTP?
Tres: la línea de petición, que indica el método y la ruta; las cabeceras, con información adicional sobre la petición; y el cuerpo, que en una petición GET normalmente va vacío.
¿Qué son los códigos de estado HTTP?
Son los números con los que el servidor responde indicando qué pasó con la petición: si tuvo éxito, si el recurso no existe o si hubo un error. Interpretarlos es clave para depurar un proyecto que consume datos de internet.
¿Por qué son importantes las peticiones HTTP en proyectos IoT?
Porque son la vía por la que un dispositivo obtiene datos de internet o los envía a un servicio externo. Sin ellas el proyecto queda aislado de cualquier información o servicio que no esté en la propia placa.
¿Qué necesito para hacer peticiones HTTP con la Pico W?
El firmware de MicroPython instalado y la conexión WiFi funcionando, ya que es la Pico W —y no la Pico estándar— la que tiene conectividad inalámbrica para llegar a internet.
Aprende esto en un curso
Si prefieres verlo en vivo y con alguien que resuelva tus dudas, estos cursos presenciales de MCI Educación cubren el tema de este tutorial:
- uPython y Electrónica Creativa con Raspberry Pi Pico — nivel inicial, 15 horas presenciales en Santiago
- Domina la Raspberry Pi: Sistemas y Conectividad — nivel intermedio, 18 horas presenciales en Santiago