Los protocolos más utilizados en IoT
Sin dudas los dos protocolos más utilizados en el mundo IoT son HTTP y MQTT, cada uno con sus características, ventajas y desventajas. Ambos protocolos están disponibles para su uso mediante librerías en todos los lenguajes que se utilizan para el desarrollo de dispositivos IoT.
En las secciones siguientes describo las características de cada uno de ellos y al final una comparación entre ambos.
NOTA: si necesitas ayuda para comunicar tu dispositivo con la red WiFi, tal vez te sirva este artículo.
HTTP
HTTP es el histórico protocolo utilizado para transferir datos en la World Wide Web y por lo tanto es natural que también sea utilizado para aplicaciones IoT. Su modo de funcionamiento es del tipo request/response – cliente/servidor.
Las plataformas de gestión de IoT que lo utilizan poseen una interfaz de aplicación (API) basada en HTTP. A esta interfaz se la denomina RESTful API (REST por Representational State Transfer).
Una interfaz RESTful utiliza los ya conocidos métodos de HTTP: GET para obtener datos, PUT para enviar datos (objeto, archivo o bloque), POST para crear un recurso y DELETE para eliminarlo.
HTTP en sus versiones 1 y 2 utiliza el protocolo de transporte TCP, mientras que la versión 3 admite el uso de UDP. En general, es recomendable utilizar TCP para garantizar la entrega de los mensajes, aunque en redes muy confiables y robustas puede ser una ventaja utilizar UDP para establecer comunicaciones más cortas y rápidas. Esto último impacta positivamente no solo en el uso de la red, sino también en el consumo de energía de los nodos IoT, sobre todo aquellos que son alimentados por baterías. Sin embargo, las mayoría de las plataformas utilizan las versiones 1 y 2.
Una de las ventajas de utilizar HTTP es su capacidad para enviar o recibir grandes cantidades de datos de manera eficiente. Si el nodo o el gateway IoT envía imágenes, flujos de video o archivos, es recomendable utilizar HTTP.
Para brindar seguridad se puede utilizar HTTPS y TLS para encriptar la transferencia de datos.
MQTT
MQTT nació como protocolo de comunicación entre máquinas (M2M – machine to machine), por lo que posee características pensadas exclusivamente para este tipo de aplicaciones. Su modo de funcionamiento es a través de publicación/suscripción a un tópico, en el que publica o lee.
A propósito, aquí tienes un artículo sobre cómo instalar un servidor MQTT en una Raspberry Pi. Y en este otro explico cómo agregar encriptación.
Sus mensajes son cortos, por lo que las transmisiones de datos también lo son y esto impacta en el consumo de energía de los nodos, algo crucial en dispositivos alimentados a baterías.
MQTT solo permite comunicación a través de TCP y tiene tres modos de funcionamiento en cuanto a entrega de mensajes (QoS – calidad de servicio):
- A lo sumo una vez: Es la política del mejor esfuerzo, no se garantiza la entrega del mensaje.
- Por lo menos una vez: Se garantiza la entrega, pero el mismo mensaje puede ser entregado más de una vez.
- Exactamente una vez: Se garantiza que cada mensaje es recibido solo una vez por el receptor.
MQTT permite realizar identificación mediante usuario y contraseña o token y encriptación utilizando SSL/TLS. ¿Te gustaría instalar tu propio servidor MQTT de manera gratuita en un servidor en la nube?. Aquí te dejo un videotutorial y un crédito de USD 100 para usar en Digital Ocean.
Conclusiones
La elección de uno de estos dos protocolos para la comunicación de los dispositivos dependerá de varios factores
- El tipo de información a enviar. Para pequeños mensajes es mejor MQTT, mientras que para bloques de datos conviene HTTP.
- MQTT es recomendable en nodos alimentados a baterías ya que mejora el uso de la energía.
- Para comunicación entre dispositivos siempre es conveniente utilizar MQTT, de hecho para eso se pensó en principio el protocolo.
- HTTP es útil en gateways para transferir toda la información de una sola vez, en lugar de enviar muchos mensajes.
- MQTT puede adaptarse a redes poco confiables mediante la configuración de la calidad de servicio QoS.
Si te gustó este artículo y te resultó útil te agradeceré que comentes o lo compartas en tus redes.
7 comentarios
José Luis Fernández · 6 julio, 2019 a las 8:20 PM
Me resultó útil y es claro
IoT Consulting · 8 julio, 2019 a las 2:25 PM
Muchas gracias José. Saludos!
Miguel A. Calveiro · 11 noviembre, 2020 a las 11:42 AM
Muchas gracias. Muy concisas las conclusiones.
Saludos,
IoT Consulting · 11 noviembre, 2020 a las 12:26 PM
Muchas gracias Miguel. Me alegro que te haya servido.
Saludos.
Rodrigo.
Cómo instalar un servidor de MQTT en Raspberry Pi - IoT Consulting · 25 marzo, 2020 a las 10:28 AM
[…] dejes de mirar este artículo, donde hablo de las diferencias entre MQTT y HTTP y cuál es la mejor opción en cada caso. Y si […]
Cómo instalar tu propio servidor MQTT en la nube - Tu fuente experta en IoT · 19 julio, 2020 a las 10:28 AM
[…] todavía no sabes qué protocolo utilizar en tu proyecto IoT, aquí te dejo un artículo donde hablo de las diferencias entre HTTP y […]
Cómo realizar la gestión de dispositivos IoT de manera segura - Tu fuente experta en IoT · 9 febrero, 2021 a las 10:29 AM
[…] MQTT vs HTTP – Qué elegir para tu proyecto IoT […]