DEV Community

Cover image for ESP-NOW, Wi-Fi, Bluetooth o MQTT: cómo comunicar tus dispositivos ESP32
Steven Carvajal
Steven Carvajal

Posted on Originally published at iot.gripe

ESP-NOW, Wi-Fi, Bluetooth o MQTT: cómo comunicar tus dispositivos ESP32

Publicado originalmente en iot.gripe.

Una de las primeras decisiones de un proyecto con varios ESP32 es cómo van a hablar entre ellos y con el mundo. Cada uno a internet por Wi-Fi, todos a un servidor por MQTT, entre ellos por ESP-NOW o por Bluetooth con el celular. La elección cambia el costo, el consumo, la fiabilidad y la complejidad de todo lo demás.

En esta guía te explico las opciones, qué es cada una y cuándo conviene, con ejemplos de cómo se combinan en un proyecto de domótica.

Dos preguntas distintas

Antes de comparar, separa dos cosas que suelen mezclarse:

  1. El medio: cómo viajan los bits por el aire. Wi-Fi, ESP-NOW, Bluetooth LE, Thread.
  2. El protocolo de mensajes: cómo se organizan los mensajes encima de ese medio. MQTT, HTTP, WebSocket o un formato propio.

MQTT no compite con ESP-NOW: MQTT funciona encima de una conexión de red (TCP/IP), normalmente por Wi-Fi. ESP-NOW es un medio con su propio formato de paquetes, sin TCP/IP. Por eso se pueden combinar, como verás más abajo.

Wi-Fi: para llegar a internet

El ESP32 se conecta a tu router como cualquier dispositivo. A partir de ahí puede hacer peticiones HTTP, abrir conexiones MQTT o WebSocket y hablar con cualquier servicio en la nube.

  • A favor: llega a internet; usa protocolos estándar; el alcance es el de tu red.
  • En contra: cada dispositivo necesita la contraseña de la red y ocupa un lugar en el router; conectar y mantener la conexión consume bastante energía; si usas TLS, cada conexión consume memoria.

ESP-NOW: de ESP32 a ESP32, sin router

ESP-NOW es un protocolo de Espressif para enviar mensajes cortos directamente entre ESP32, usando la radio Wi-Fi pero sin conectarse a ninguna red. Cada dispositivo se identifica por su dirección MAC.

  • A favor: no necesita router ni contraseña; latencia de milisegundos; consumo bajo porque no hay conexión que mantener; funciona aunque se caiga el Wi-Fi de la casa.
  • En contra: mensajes pequeños (250 bytes en la versión clásica); no garantiza la entrega, así que tienes que construir la confirmación; solo entre chips de Espressif; todos tienen que estar en el mismo canal de radio; máximo 20 dispositivos emparejados por cada ESP32 (menos si usas cifrado).

El detalle del canal es el que más problemas da: si un ESP32 está conectado al router, su canal es el del router, y los demás tienen que usar el mismo. Lo más simple es fijar el canal del router y usarlo en todos los nodos. Las opciones y el código completo, con confirmaciones, están en la parte 4 de la serie de domótica.

Bluetooth LE: para el celular y los sensores cercanos

Bluetooth Low Energy está pensado para intercambiar datos pequeños con muy bajo consumo a corta distancia.

  • A favor: habla directamente con el celular, sin apps de red ni router; ideal para configurar un dispositivo o leer sensores con batería.
  • En contra: alcance corto; para llegar a internet necesitas un intermediario (el celular o una pasarela); programar servicios y características BLE lleva su trabajo.

MQTT: mensajes por tópicos a través de un broker

MQTT es un protocolo de mensajería ligero que funciona sobre TCP/IP. En lugar de hablarse directamente, los dispositivos se conectan a un broker (un servidor intermediario) y:

  • publican mensajes en un tópico, por ejemplo casa/sala/luz;
  • se suscriben a los tópicos que les interesan y reciben lo que otros publican.

Tres conceptos que conviene conocer:

  • QoS (calidad de servicio): 0 envía una vez sin confirmar; 1 garantiza que llega al menos una vez; 2, exactamente una vez.
  • Mensaje retenido: el broker guarda el último mensaje de un tópico y se lo entrega a quien se suscriba después.
  • Última voluntad (LWT): un mensaje que el broker publica si el dispositivo se desconecta sin avisar.

Como broker puedes usar uno propio (por ejemplo, Mosquitto en un Raspberry Pi) o uno administrado en la nube. Un ejemplo administrado es AWS IoT Core, que además guarda el estado de cada dispositivo en un documento llamado Device Shadow. Lo explico en la parte 3 y en la guía de AWS IoT Core de este blog.

Comparación rápida

Wi-Fi + HTTP/MQTT ESP-NOW Bluetooth LE MQTT
Qué es Medio + protocolos de internet Medio con protocolo propio Medio + protocolo Protocolo de mensajes
¿Necesita router? Sí No No Necesita red y un broker
¿Llega a internet? Sí No Solo con intermediario Si el broker está en internet
Latencia Decenas de ms Pocos ms Decenas de ms Depende de la red y del broker
Tamaño de mensaje Grande Pequeño Pequeño Grande
Consumo Alto Bajo Muy bajo El de la red debajo
Entrega garantizada Con TCP No: hay que construirla Según el modo Con QoS 1 o 2

Un patrón muy usado: la pasarela

En una casa con muchas luces, conectar cada ESP32 al Wi-Fi y a la nube es caro y frágil: cada uno necesita su certificado, su conexión TLS permanente y su lugar en el router. La alternativa es una pasarela (gateway):

  • Un solo ESP32 (por ejemplo, un ESP32-S3) se conecta al Wi-Fi y a la nube por MQTT sobre TLS.
  • El resto (ESP32-C3) hablan con él por ESP-NOW, sin Wi-Fi ni certificados.
  • La pasarela traduce: recibe el estado deseado por MQTT y reparte órdenes cortas por ESP-NOW; recoge las confirmaciones y las publica.

Las ventajas son grandes: una sola conexión con la nube por casa, un solo certificado, costo en la nube que no crece con cada luz y nodos que siguen funcionando entre ellos si se cae internet. Las dos arquitecturas están comparadas en la parte 1 de la serie.

Cómo elegir

  • Un solo dispositivo que habla con la nube: Wi-Fi + MQTT (o HTTP si solo envía datos de vez en cuando).
  • Muchos dispositivos en un mismo lugar: pasarela con Wi-Fi + MQTT, y ESP-NOW para el resto.
  • Dispositivos con batería que envían poco: ESP-NOW o BLE hacia una pasarela; evita mantener Wi-Fi activo.
  • Configuración desde el celular: BLE, o un punto de acceso Wi-Fi temporal con un formulario web (lo explico en la parte 16).
  • Compatibilidad con ecosistemas de domótica: Thread y Matter, con un ESP32-C6 o H2.

Preguntas frecuentes

¿Puedo usar ESP-NOW y Wi-Fi al mismo tiempo?

Sí, en el mismo ESP32, siempre que los demás dispositivos de ESP-NOW estén en el canal del router. Es lo que hace una pasarela típica.

¿MQTT o HTTP?

MQTT si el dispositivo tiene que recibir órdenes en tiempo real o envía datos con frecuencia: la conexión queda abierta y los mensajes son ligeros. HTTP si solo envía algo de vez en cuando y no necesita escuchar.

¿ESP-NOW es seguro?

Admite cifrado con una clave compartida entre los dispositivos emparejados. Sin cifrado, cualquiera cerca podría escuchar los mensajes, así que valida siempre de quién viene cada mensaje (por su MAC) y no envíes datos sensibles sin cifrar.

¿Qué alcance tiene ESP-NOW?

El mismo orden que el Wi-Fi de las placas, porque usa la misma radio: varias habitaciones en una casa normal. Las paredes gruesas, la antena de cada placa y las interferencias lo reducen.

Todos los artículos sobre ESP-NOW y MQTT

Top comments (0)