ESP32 y Arduino

ESP32 vs Raspberry Pi Pico W para IoT: Wi-Fi, MicroPython, Arduino y TLS comparados

Una comparación práctica del ESP32 y la Raspberry Pi Pico W para proyectos conectados: hardware, Wi-Fi y Bluetooth, opciones de programación, rendimiento TLS, modos de bajo consumo y código MQTT en ambas.

Placas ESP32 y Raspberry Pi Pico W una junto a otra, ambas publicando datos de sensores en un broker MQTT
Pruébalo en tu propio broker MQTTConsigue un broker MQTT privado y gestionado con el plan Free y empieza con ejemplos de código listos para usar.
Pruébalo gratis Ejemplos de código Sin tarjeta

ESP32 vs Raspberry Pi Pico W es una de las dudas más habituales al empezar un proyecto IoT con Wi-Fi, y ambas placas pueden publicar datos de sensores en un broker MQTT con unas pocas líneas de código. Esta comparación se centra en lo que de verdad importa en los dispositivos conectados: la pila inalámbrica, los entornos de programación, el rendimiento TLS, el ahorro de energía y el ecosistema, y termina con una recomendación clara para cada tipo de proyecto.

La respuesta corta

Elige el ESP32 cuando el dispositivo sea ante todo un dispositivo de red: necesita TLS, Bluetooth, funcionamiento a batería con deep sleep o librerías maduras de Arduino y ESP-IDF. Elige la Pico W cuando valores la excelente documentación de Raspberry Pi, la E/S programable (PIO) del RP2040 o una curva de aprendizaje suave con MicroPython, y el dispositivo esté alimentado principalmente desde la red. Ambas son clientes MQTT perfectamente capaces.

El hardware de un vistazo

ESP32 (clásico, p. ej. ESP32-WROOM-32) Raspberry Pi Pico W
CPU Xtensa LX6 de doble núcleo, hasta 240 MHz Arm Cortex-M0+ de doble núcleo (RP2040), 133 MHz
SRAM 520 KB 264 KB
Flash Normalmente 4 MB en los módulos 2 MB
Wi-Fi 802.11 b/g/n, 2,4 GHz, integrado 802.11n, 2,4 GHz, Infineon CYW43439 por SPI
Bluetooth Clásico y BLE A través del CYW43439: BLE en MicroPython, BLE y Clásico en el SDK de C (añadido tras el lanzamiento)
Aceleración criptográfica Hardware para AES, SHA y RSA/aritmética de números grandes Ninguna
E/S especial Sensores táctiles, DAC en el ESP32 clásico, muchos periféricos Máquinas de estado PIO para protocolos a medida
Bajo consumo Deep sleep con memoria RTC, despertar por temporizador y GPIO Modos sleep y dormant, menos inmediatos para dispositivos Wi-Fi
Variedad de placas Cientos de placas de muchos fabricantes Placa oficial más placas compatibles de terceros

La familia ESP32 tiene muchos miembros: el S3 añade instrucciones vectoriales para IA y USB, el C3 y el C6 son chips RISC-V de bajo coste, y el C6 añade Wi-Fi 6 y Thread. Raspberry Pi también ha lanzado la Pico 2 W, basada en el RP2350, con núcleos Cortex-M33 más rápidos, más SRAM y funciones de seguridad. Si vas a decidir hoy, compara también los chips más nuevos; la mayoría de las ventajas e inconvenientes que siguen siguen siendo válidos.

Pila Wi-Fi y redes

En el ESP32, el Wi-Fi forma parte del chip y la pila de red (lwIP más los drivers de Espressif) se ha usado en una enorme cantidad de productos comerciales. Las reconexiones, los múltiples sockets, TLS y funciones como el aprovisionamiento Wi-Fi están más que probados. El propio componente ESP-MQTT de Espressif admite MQTT 3.1.1 y MQTT 5 de serie cuando usas ESP-IDF.

La Pico W conecta su radio CYW43439 mediante un bus similar a SPI y ejecuta lwIP en el RP2040. Funciona de forma fiable en proyectos típicos de sensores y control, y tanto el SDK de Raspberry Pi como el port de MicroPython están bien mantenidos. El driver de la radio sí consume parte de los recursos del RP2040, y tienes menos opciones de librerías de red maduras en C que en el ESP32.

Ambas placas son solo de 2,4 GHz, así que ninguna se unirá a una red exclusivamente de 5 GHz.

Opciones de programación

Entorno ESP32 Pico W
Arduino Core oficial de Espressif, ecosistema de librerías muy amplio (PubSubClient, AsyncMqttClient, ArduinoJson) Core comunitario arduino-pico de Earle Philhower; PubSubClient funciona
MicroPython Soportado, umqtt.simple disponible Soportado y documentado oficialmente por Raspberry Pi
CircuitPython Soportado en muchas placas Soportado
SDK nativo ESP-IDF con FreeRTOS, cliente MQTT integrado Pico SDK con lwIP, cliente MQTT de las apps de lwIP

Para quienes empiezan con MicroPython, la documentación de la Pico W es una ventaja real: las guías de Raspberry Pi explican el flasheo, el Wi-Fi y los primeros programas con muy pocas sorpresas. Para los usuarios de Arduino, el ESP32 tiene el ecosistema de librerías más profundo. Si te inclinas por MicroPython en el ESP32, la guía de MicroPython umqtt en ESP32 muestra la configuración equivalente.

MQTT en la Pico W con MicroPython

Este script conecta una Pico W al área de pruebas pública de broker.connectmq.com y publica el sensor de temperatura interno del chip cada diez segundos. El mismo código funciona en un ESP32 con MicroPython si eliminas las líneas del sensor de temperatura.

import time
import network
import machine
from umqtt.simple import MQTTClient   # instalar con: import mip; mip.install("umqtt.simple")

SSID = "YOUR_WIFI"
PASSWORD = "YOUR_WIFI_PASSWORD"
BROKER = "broker.connectmq.com"
CLIENT_ID = b"picow-5b2e"                      # no puede estar vacío y debe ser único
TOPIC = b"connectmq/demo/picow-5b2e/telemetry"

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(SSID, PASSWORD)
for _ in range(30):
    if wlan.isconnected():
        break
    time.sleep(1)
if not wlan.isconnected():
    machine.reset()
print("Wi-Fi OK:", wlan.ifconfig()[0])

sensor = machine.ADC(4)                        # sensor de temperatura interno del RP2040


def read_temp_c():
    volts = sensor.read_u16() * 3.3 / 65535
    return 27 - (volts - 0.706) / 0.001721


client = MQTTClient(CLIENT_ID, BROKER, port=1883, keepalive=60)
client.set_last_will(b"connectmq/demo/picow-5b2e/status", b"offline", retain=True, qos=1)
client.connect()
client.publish(b"connectmq/demo/picow-5b2e/status", b"online", retain=True, qos=1)

while True:
    try:
        payload = '{"temp_c":%.2f,"rssi":%d}' % (read_temp_c(), wlan.status("rssi"))
        client.publish(TOPIC, payload.encode())
        print("sent", payload)
    except OSError as e:
        print("MQTT error, reconnecting:", e)
        time.sleep(5)
        client.connect()
    time.sleep(10)

Verifícalo desde cualquier ordenador:

mosquitto_sub -h broker.connectmq.com -p 1883 -i picow-5b2e-viewer -t "connectmq/demo/picow-5b2e/#" -v

El equivalente en Arduino para el ESP32 con PubSubClient se explica paso a paso en el tutorial de IoT con ESP32.

Rendimiento TLS: donde más se diferencian las placas

MQTT en producción debería ir sobre TLS en el puerto 8883, y aquí es donde se nota la diferencia de hardware. Un handshake TLS implica operaciones de clave pública (RSA o curva elíptica) y la verificación de certificados, que son costosas para un microcontrolador.

  • El ESP32 ejecuta mbedTLS con aceleración por hardware para AES, SHA y aritmética de números grandes. Los handshakes se completan lo bastante rápido como para que reconectar tras una caída del Wi-Fi apenas se note, y hay RAM suficiente para los búferes TLS junto a tu aplicación.
  • La Pico W realiza las mismas operaciones por software en núcleos Cortex-M0+ a 133 MHz, que carecen de algunas de las instrucciones que aceleran esta aritmética. TLS funciona, pero los handshakes tardan notablemente más y la RAM va más justa con 264 KB para repartir.

En la práctica, esto importa sobre todo en dispositivos a batería que despiertan, conectan, publican y vuelven a dormir: cada despertar paga un handshake completo, así que un handshake más lento cuesta directamente autonomía. En dispositivos siempre encendidos, una primera conexión más lenta rara vez es un problema.

Hay dos consejos válidos para ambas placas: ajusta el reloj del sistema (NTP) antes de conectar, porque la validación del certificado necesita la fecha actual, y carga solo la CA raíz que necesitas (ISRG Root X1 para brokers basados en Let's Encrypt) para ahorrar memoria. La guía de MQTT con SSL en ESP32 muestra en detalle el lado del ESP32.

Consumo y autonomía de la batería

El deep sleep del ESP32 está diseñado precisamente para el patrón "despertar, medir, publicar, dormir": los núcleos principales se apagan, el dominio RTC mantiene un temporizador y unos pocos bytes de memoria, y el chip despierta por temporizador o GPIO. Es habitual ver sensores a batería funcionando durante meses con una sola celda. Consulta deep sleep del ESP32 con MQTT para un ejemplo completo.

La Pico W puede entrar en modos sleep y dormant, pero el chip Wi-Fi debe gestionarse por separado y las herramientas son menos inmediatas. Muchos proyectos con Pico W a batería optan por cortar la alimentación por completo con un chip temporizador externo. Si tu dispositivo funciona con alimentación de red o USB, la diferencia prácticamente desaparece.

Lista de decisión

  1. ¿Alimentado por batería y publicando sobre TLS? ESP32.
  2. ¿Necesitas Bluetooth Clásico o una pila BLE madura? El ESP32 tiene una trayectoria más larga.
  3. ¿Aprender MicroPython desde cero con tutoriales oficiales? La Pico W es una opción muy amigable.
  4. ¿Protocolos a medida con temporización crítica (tiras LED, formatos serie poco habituales)? La PIO de la Pico W es excelente.
  5. ¿Necesitas muchas librerías Arduino? ESP32.
  6. ¿Quieres el silicio más reciente? Compara ESP32-S3/C6 con la Pico 2 W antes de decidir.

¿Vienes del ESP8266? La comparación ESP32 vs ESP8266 cubre esa ruta de actualización.

El lado del broker es el mismo para ambas

Elijas la placa que elijas, el dispositivo es solo un cliente MQTT. El broker se encarga de la autenticación, del reparto a paneles y backends y del estado retenido. Eso significa que puedes mezclar dispositivos ESP32 y Pico W en los mismos topics sin cambiar nada más. Empieza a probar en el servidor MQTT público gratuito, pensado para pruebas y prototipos, y, cuando el proyecto entre en producción, pasa a un broker MQTT gestionado privado, alojado como broker MQTT en la nube y protegido con TLS, para que tus dispositivos tengan sus propias credenciales. ConnectMQ admite tanto MQTT 3.1.1 (el que usan umqtt.simple y PubSubClient) como MQTT 5.

Empieza con ConnectMQ

Ambas placas funcionan con ConnectMQ desde el primer momento: TCP en el 1883, TLS en el 8883 con un certificado de Let's Encrypt y un cliente MQTT en el navegador para probar tus mensajes. Crea un broker Serverless gratuito en app.connectmq.com sin tarjeta de crédito y conecta tu ESP32 o tu Pico W en minutos.

Preguntas frecuentes

¿Es mejor el ESP32 o la Pico W para principiantes?

Ambas son aptas para principiantes. La Pico W tiene una documentación oficial de MicroPython excelente, mientras que el ESP32 cuenta con más tutoriales y librerías de Arduino.

¿Puede la Raspberry Pi Pico W usar MQTT sobre TLS?

Sí, mediante el módulo ssl de MicroPython o el cliente seguro del core arduino-pico. Cuenta con handshakes más lentos que en el ESP32, porque no hay aceleración criptográfica.

¿Qué placa consume menos?

En dispositivos a batería que duermen entre lecturas, el deep sleep del ESP32 es más fácil de usar y muy eficiente. En dispositivos siempre encendidos, la diferencia es menor que la que marcan la elección de sensores y el intervalo de publicación.

¿Puedo mezclar dispositivos ESP32 y Pico W en un mismo sistema MQTT?

Sí. MQTT es independiente del hardware, así que ambas pueden publicar y suscribirse en el mismo broker y los mismos topics.

Artículos relacionados

Ejemplo de ESP-IDF MQTT: crea un cliente esp-mqtt desde cero

Construye un proyecto ESP-IDF desde una carpeta vacía con el componente esp-mqtt: configuración de Wi-Fi en modo estación, el manejador de eventos MQTT, publicación y suscripción, propiedades de MQTT 5 y TLS con el bundle de certificados.

9 min de lectura

Todos los artículos →

Tu broker MQTT privado, a unos pocos clics

Crea una cuenta, obtén las credenciales de tu broker y conecta tu primer dispositivo, sin servidores que instalar, parchear ni escalar.