El protocolo MQTT, por el momento, ha ganado popularidad y se ha convertido en el estándar de facto en proyectos destinados a crear soluciones para Internet de las cosas (IoT). Por supuesto, Internet de las cosas es una cierta abstracción o, más correctamente, el concepto de construir redes distribuidas de dispositivos o máquinas. Al mismo tiempo, los problemas particulares de interacción entre máquinas de máquina a máquina (M2M) ya se están resolviendo de manera efectiva, incluido el nivel de conexión de estos sistemas a Internet, tanto para crear sistemas de automatización industrial, por ejemplo, como para construir sistemas inteligentes para el hogar. Obviamente, los sistemas críticos requieren un árbitro o corredor local y dispositivos para encontrar una solución a la situación, independientemente de la calidad de la conexión a Internet, así como en el caso de una desconexión completa.
Al mismo tiempo, los microprocesadores eficientes energéticamente, pero no menos productivos, basados en la arquitectura ARM han demostrado ser una plataforma de hardware para el lanzamiento de dicho corredor MQTT. Esta interconexión de la plataforma de hardware, los protocolos de mensajería y su implementación de software se ha convertido en el punto de partida en el rápido progreso del desarrollo de los sistemas de automatización modernos. A continuación, consideramos con más detalle las soluciones de hardware y los componentes de software para implementar uno de los protocolos de mensajería más exitosos en los sistemas técnicos.
Revisión de ClusterHAT: kit de computadora de clúster Raspberry Pi. Foto: revista MagPiLa arquitectura de los microprocesadores ARM (Advanced RISC Machine) está firmemente arraigada en nuestras vidas. Casi todos los teléfonos inteligentes ahora funcionan sobre la base de esta arquitectura. Vale la pena señalar que el concepto de una máquina RISC es bastante vago hoy en día, porque su opuesto, la moderna plataforma x86-64, ha tomado mucho del mundo de los sistemas RISC. Pero no se trata de eso, sino del hecho de que hoy se ha convertido en sinónimo o una característica distintiva de una plataforma móvil productiva y, al mismo tiempo, eficiente en energía, así como la base para varios dispositivos de bricolaje o "hágalo usted mismo" de bajo costo. En este contexto, por supuesto, uno no puede dejar de mencionar las diversas opciones de Raspberry Pi, hasta la decisión de un clúster basado en la placa ClusterHAT, etc. Linux ha demostrado ser el principal sistema operativo para esta plataforma. Pero aquí, ¿cómo no recordar, por ejemplo, un sistema como Microsoft Windows 10 IoT Core?
Es bueno cuando hay una opción, pero no todo es tan simple como nos gustaría. Microsoft Windows 10 IoT Core es un excelente sistema operativo, pero está diseñado principalmente para desarrollar y ejecutar programas, por ejemplo, escritos en C # en Microsoft Visual Studio. Tal enfoque no puede llamarse universal. Por lo tanto, si bien la opción clásica para la mayoría de las tareas sigue siendo ARM y Linux, así como Android, ¿cómo podría ser sin ella? Tenga en cuenta que para la creación rápida de prototipos, además de las placas Raspberry Pi, hay compañías Orange Pi más baratas de Xunlong Software o, por el contrario, ODROIDs más caros de Hardkernel, pero al mismo tiempo están justificados en precio. Todo depende del problema que se resuelva. Y tal, para el proyecto actual, fue el lanzamiento del servidor / corredor MQTT. Al mismo tiempo, uno no debe centrarse en el hecho de que el proyecto está dedicado a la "casa inteligente" o soluciones para la robótica. Esto no es importante, ya que el protocolo MQTT en sí mismo es una solución muy universal.
CPU-351-13. Bajo consumo de energía, robusto i.MX6 SBC. Foto: EurotechHablando de ARM, vale la pena pensar no solo en los teléfonos inteligentes modernos, muchas aplicaciones como enrutadores domésticos o herramientas de creación de prototipos. Los procesadores con tal arquitectura pueden funcionar en condiciones bastante difíciles de los sistemas de automatización industrial. Por ejemplo, una computadora de placa única CPU-351-13 de Eurotech. La placa de esta computadora industrial se basa en el procesador iMX.6 ARM (1.2GHz) y es un sistema eficaz con un consumo de energía reducido (aproximadamente 4 W para cuatro núcleos), que se utiliza en aplicaciones IoT / M2M, soportando la operación en el rango de temperatura: -40 ° a + 85 ° C. La placa contiene una salida de video, un cargador de batería, un módem celular (celular), WiFi, Bluetooth LE y es compatible con la tecnología ZigBee. La placa también es ideal para resolver problemas en el transporte, ya que admite el bus CAN, tiene un sensor de aceleración incorporado (acelerómetro) y un sistema de recepción de señal GPS.
Además de las soluciones industriales, la arquitectura ARM penetra en el mercado de soluciones de servidor. La experiencia de Scaleway, que implementa y arrienda no máquinas virtuales comunes, sino servidores físicos basados en ARMv8, es interesante aquí. Esta solución es interesante por su eficiencia energética, desde la perspectiva de un proveedor, y la falta de un hipervisor o entorno de virtualización, como tal, para el usuario del servicio. Por lo tanto, un excelente entorno para lanzar contenedores Docker se convierte en realidad. Se parece a algo así como ClusterHAT a escala industrial, y el rendimiento es una excelente opción para la virtualización de contenedores en la nube. En general, uno no puede dejar de estar de acuerdo en que esta es una solución empresarial audaz e innovadora en la dirección de servicios de alojamiento, que ha existido en el mercado durante bastante tiempo. Resulta que si no compra su Raspberry Pi o equivalente, siempre puede experimentar con un servidor basado en ARM alquilándolo.
CloudMQTT es una solución perfecta para mensajes de "Internet de las cosas"Al finalizar la elección de la plataforma de hardware y el elogio de la arquitectura ARM, puede poner fin a esto, pero no debe olvidar que siempre puede encontrar una solución alternativa, y esto solo empuja a entusiastas, geeks, hackers éticos a nuevas investigaciones y experimentos con plataformas de hardware abiertas. Por lo tanto, tenemos una tarea basada en Linux para instalar el agente MQTT y experimentar un poco con él.
Era posible no considerar la plataforma de hardware en absoluto, sino comenzar a trabajar de inmediato en el servicio en la nube CloudMQTT. Pero el problema se considera sobre la base de la estructura de tres niveles de Internet de las cosas, donde en el nivel inferior hay sensores inteligentes y sistemas de control. El medio es el lugar del agente MQTT, y debe ubicarse localmente para que los problemas con el acceso a Internet puedan resolverse parcialmente mediante equipos internos. Y el nivel superior es una nube con Node-Red o AWS IoT, Azure IoT Hub, etc. En este concepto, es difícil imaginar al mejor candidato para un micro servidor de bajo consumo y bajo consumo de energía, algo diferente de ARM.
Pero así es como funciona el mundo, no se puede decir que todo está bien o, por el contrario, que todo está mal. En todas partes tiene sus propios matices. El hecho es que el sistema de tres niveles en consideración no es exactamente el Internet de las cosas, sino que es una especie de versión intermedia del camino hacia tal concepto. Solo no debería existir un IoT sin conexión a Internet, es decir No en vano, esperamos la aparición de redes inalámbricas de quinta generación, la mejora de las comunicaciones existentes, etc. En el concepto de Internet de las cosas no hay lugar para la capa de la capa intermedia, los sensores y los sistemas ejecutivos deben ir directamente a la nube, donde interactuarán.
Una introducción breve pero práctica al protocolo MQTT y su aplicación a IoT. Imagen: Laboratorios ZoetropeEl protocolo MQTT (Transporte de telemetría de colas de mensajes) es un protocolo asincrónico para transmitir mensajes telemétricos según el principio de un editor / suscriptor que utiliza un intermediario. Este protocolo fue desarrollado por IBM y transferido a la categoría de proyectos abiertos de la organización Eclipse Foundation. Una característica del protocolo es su compacidad, ya que El tamaño del encabezado del paquete de datos es de solo unos pocos bytes. Se ejecuta sobre el protocolo TCP estándar y, por razones de seguridad, implica el uso de mecanismos de autenticación a nivel de nombre de usuario / contraseña y el uso del cifrado del protocolo de transporte TLS / SSL. Actualmente, el protocolo MQTT se ha convertido en el estándar de facto para construir soluciones de IoT.
Dado que MQTT está diseñado para su uso en un entorno de conexión a Internet, que por definición no se considera confiable, el protocolo proporciona tres niveles de garantía de calidad del servicio de entrega. QoS 0: a lo más una vez, "no más de uno". El editor publica el mensaje al corredor, luego el corredor lo publica al suscriptor. En este nivel, no se garantiza la transferencia obligatoria de datos al suscriptor. QoS 1: al menos una vez, "al menos uno". El suscriptor debe recibir este mensaje al menos una vez. Sin embargo, los mensajes pueden duplicarse y el suscriptor debe proporcionarlos en la lógica de su trabajo. QoS 2: Exactamente uno - "garantizado uno". Proporciona garantía de entrega suprema y no duplicación de mensajes.
Para escalar sus decisiones, puede usar la configuración de "puente" entre los corredores, y así reducir la carga en cada corredor individualmente. El protocolo MQTT también permite a los suscriptores recibir datos en varios canales a la vez. Para hacer esto, los símbolos comodín “+” y “#” se usan para marcar todas las entradas en una suscripción particular, o solo un bloque de mensajes. Por ejemplo, suscribiéndose a varios sensores de temperatura diferentes: "sensores / + / temperatura / +" o suscribiéndose inmediatamente a todos los canales: "#". Puede discutir las características del protocolo durante mucho tiempo, pero es más fácil intentarlo con un ejemplo real. Se pueden elegir muchas soluciones como corredor, pero uno de los corredores más populares y ligeros es
Mosquitto .
Para implementar el agente Mosquitto, elegiremos una versión simple de una computadora de placa única, por ejemplo, una de las primeras versiones de la RAM Raspberry Pi Modelo B de 512 MB. Esta elección está dictada literalmente por lo que estaba a la mano. Por supuesto, para un proyecto real, debe estudiar por separado el problema de la confiabilidad y el rendimiento de la placa y, además de elegir las soluciones óptimas de hardware, también debe estudiar los problemas de confiabilidad del caso, calidad de la fuente de alimentación, seguridad del sistema en general, etc. Todavía era interesante tomar la placa Raspberry Pi para disipar finalmente el mito de las dificultades de comenzar un proyecto basado en soluciones de hardware abiertas y el sistema operativo Linux. Por supuesto, el desarrollador necesita conocimientos básicos, pero las plataformas modernas se han vuelto extremadamente amigables desde el punto de vista de la interfaz del software y al mismo tiempo están bien documentadas.
Foto: Raspberry Pi Modelo B 512MB RAMComo sistema operativo, puede elegir el Raspbian Stretch oficial con escritorio o el firmware Raspbian Stretch Lite. Estos son dos sistemas operativos idénticos basados en la conocida distribución Debian Stretch, que modificaron para funcionar con Raspberry Pi. Las diferencias solo están en la presencia de un escritorio gráfico, que está justificado para comenzar el conocimiento, pero para el servidor, por supuesto, no hay nada para el shell gráfico. Para instalar, aún elegimos la opción con un escritorio gráfico e instalamos todo esto en una tarjeta SD económica de 8GB. De hecho, queda por
cargar la imagen del sistema operativo y usar la muy conveniente utilidad multiplataforma
Etcher para transferir la imagen a una unidad física.
Captura de pantalla: Etcher en Windows 10Ahora queda colocar la unidad flash en la placa Raspberry Pi y aplicar energía. Hay una función de oda, si necesita obtener acceso remoto a la línea de comando Raspbian Stretch usando el protocolo ssh, mientras que no hay un teclado conectado físicamente a la placa, puede escribir un archivo vacío con el nombre ssh en la sección de inicio de la unidad flash, que activará el acceso correspondiente. Después de encender la Raspberry Pi, se permite el acceso al sistema operativo al usuario "pi" con la contraseña "raspberry". El usuario predeterminado "pi" puede obtener privilegios de root ejecutando el comando sudo. Dado que todo está preparado en Raspbian para el trabajo cómodo de un usuario no preparado, el primer comando en el nuevo sistema puede ser llamar al menú de configuración del sistema:
$ sudo raspi-config
Captura de pantalla: Conexión remota a Raspberry Pi por SSH y ejecutar raspi-configLa utilidad raspi-config le permite establecer una nueva contraseña para el usuario y, por ejemplo, en el menú "Opciones de interfaz" puede configurar el comportamiento de las interfaces del sistema, habilitar el escritorio remoto a través del protocolo VNC, etc. También en el menú: “Opciones de arranque”, puede establecer los parámetros predeterminados para arrancar el sistema, por ejemplo, seleccione solo el modo de línea de comando, y en el submenú “Resolución” del menú “Opciones avanzadas” configure la resolución deseada de la pantalla gráfica, por ejemplo, seleccionando el tamaño requerido "DMT" - para la interfaz digital del monitor o "CEA" - entrada analógica, etc.
Ahora puede actualizar los paquetes del sistema:
$ sudo apt-get update
$ sudo apt-get upgrade
E instale el intermediario Mosquitto y el cliente MQTT, por ejemplo, para probar el sistema:
$ sudo apt-get install mosquitto
$ sudo apt-get sudo mosquitto-clients
Ahora puede consultar el agente MQTT localmente, para lo cual puede suscribirse, por ejemplo, a un evento:
$ mosquitto_sub -h localhost -t "sensor/temperature"
Y publique algunos valores para el canal correspondiente:
$ mosquitto_pub -h localhost -t "sensor/temperature" -m 21.0
Captura de pantalla: sesiones del terminal Raspberry PiPuede ver las suscripciones y hacer publicaciones utilizando el protocolo MQTT, así como probar la capacidad de carga del corredor en el entorno del navegador Chrome y los sistemas operativos: Linux, Mac, Windows gracias a la aplicación multiplataforma
MQTTBox .
De hecho, el protocolo MQTT se ha generalizado tanto que es simplemente imposible no encontrar una solución conveniente para sus tareas. Además, en el marco del proyecto
Eclipse Paho , el desarrollo de soluciones de software y bibliotecas abiertas, en casi todos los lenguajes de programación, se está desarrollando activamente para implementar el protocolo de mensajería MQTT y, por lo tanto, mejorar las soluciones para Internet de las cosas.
Crear soluciones basadas en el agente MQTT ya se está convirtiendo en una tarea trivial. Uno solo tiene que implementar el sistema, conectarse a la nube, por ejemplo, utilizando
Node-RED o una solución especializada, y sigue siendo lo "pequeño": conectar sensores y actuadores inteligentes. Para considerar el nivel inferior de los sistemas IoT, se debe escribir un artículo separado, pero para este ejemplo es bastante posible hacerlo sin considerar un ejemplo basado en el estándar real para Internet de las cosas: placas NodeMCU basadas en SoC ESP8266 de ESPressif.
Captura de pantalla: MQTTBox en Windows 10La junta de NodeMCU se centró inicialmente en el
desarrollo de eLua . Puede utilizar el
servicio en la
nube para construir el firmware, y la placa del proyecto en sí existe como una solución de hardware abierta
NodeMCU DEVKIT V1.0 , para la cual ya se han lanzado muchos análogos. Al mismo tiempo, se debe tener en cuenta una buena documentación del proyecto. Sin embargo, es muy subjetivo, pero cuando se desarrolla un sensor inteligente con el protocolo MQTT basado en firmware con eLua para NodeMCU DEVKIT, uno todavía tiene que enfrentar una serie de dificultades con la implementación del protocolo MQTT. Al mismo tiempo, toda la infraestructura del proyecto parece de alguna manera insuficientemente preparada para su uso como entorno para el desarrollo rápido y de alta calidad de los sistemas de microprocesadores. Siempre aparecen pequeños detalles y matices, pero una vez más vale la pena repetirlo: esta es una evaluación muy subjetiva. Curiosamente, ¿los lectores del blog tienen experiencias exitosas con eLua y MQTT?
Sin embargo, la elección del entorno de desarrollo Arduino IDE para trabajar con NodeMCU DEVKIT, como con otras placas basadas en ESP8266, es una cuestión completamente diferente. Todo se hace casi instantáneamente sobre la base de bibliotecas y muestras de código listas para usar. Para comenzar el desarrollo, debe
descargar el entorno de desarrollo abierto multiplataforma Arduino IDE desde el sitio oficial del proyecto Arduino. Luego, en los parámetros "Archivo" - "Preferencias" - "URL de Addition Boards Manager:", especifique el enlace al núcleo Arduino para el proyecto de chip WiFi
ESP8266 :
arduino.esp8266.com/stable/package_esp8266com_index.json Después de eso, en "Herramientas" - "Boards Manager »Queda por descargar e instalar el soporte para las placas de comunidad ESP8266. Por cierto, no debemos olvidar que para trabajar con la placa NodeMCU, deberá instalar el controlador del convertidor de interfaz CP210x o, también llamado puente
UART a USB .
Foto: Trabajando con la Junta NodeMCUPara trabajar con el protocolo MQTT, puede instalar la Biblioteca PubNub Arduino. Para hacer esto, en el menú "Boceto" - "Incluir biblioteca" - "Administrar bibliotecas" seleccione la biblioteca apropiada e instálela. Puede familiarizarse con las capacidades de la plataforma de software basándose en un código de ejemplo, por ejemplo, el ejemplo básico ESP8266 MQTT, donde el corredor publica el canal "outTopic", y también se suscribe a "inTopic", y cuando se trata de "inTopic" el valor es "1", luego La placa enciende el LED incorporado. Todo es simple, rápido y funciona de forma inmediata.
Captura de pantalla: Arduino IDE con soporte ESP8266En conclusión, quiero señalar que esta publicación no exige el uso exclusivo de la arquitectura de los procesadores ARM para construir sistemas IoT y solo se refirió a las características de presentar el agente MQTT como un enlace para soluciones de automatización. Pero al mismo tiempo, el lector puede formarse la opinión de que hoy las soluciones para IoT son la gran cantidad de geeks, experimentadores y fanáticos, por ejemplo, las placas Raspberry Pi. Esto es cierto, el progreso se basa en esto, pero el futuro ya está con nosotros.
Un ejemplo es obvio: la solución comercial de la plataforma de sensores inalámbricos Wzzard para IoT y Advantech B + B SmartWorx Specter Network Gateway. Aquí, como en muchas implementaciones en los ciclos de producción actuales, se propone la arquitectura de sensores industriales protegidos con el medio ambiente, que se combinan mediante una red inalámbrica basada en los estándares 6LoWPAN e IEEE 802.15.4e. Para el procesamiento de datos a nivel de la nube, se ofrece una puerta de enlace con soporte para el protocolo MQTT y la transmisión de datos a través de comunicaciones de una red inalámbrica 3G o Ethernet 10/100 con cable.
Recursos y enlaces relacionados:
Procesadores ARM: características de arquitectura, diferencias y perspectivas - ITC.uaOrange Pi PC: una mini PC completa por $ 15 en Linux - revista GeekODROID-C1: revisión y comparación con RPi - blog diario de TI, noticias, revistas, tecnologíasPrimer vistazo a Scaleway: blog diario de TI, noticias, revistas, tecnologíasIBM mueve el protocolo MQTT a la categoría de proyectos abiertos - OpenNETProtocolo MQTT - iot.ruProtocolo MQTT. Características, aplicaciones, procedimientos básicos - Tecnologías y comunicaciones.Documentación de Raspberry Pi. Acceso remoto - Fundación Raspberry PiConfiguración inicial de Raspberry Pi - DomoticzComenzando con MQTT Mosquitto Broker en Raspberry Pi, Windows, MacOS y Linux - Proyectos de bricolajeLas siete mejores herramientas de cliente MQTT - HiveMQCarga de temperatura a través de MQTT usando NodeMCU y sensor DHT11 - The ThingsBoard AuthorsTutorial MQTT para Raspberry Pi, Arduino y ESP8266 - Blog de BaldengineerESP8266 firmware, programación en Arduino IDE - GeektimesWireless Sensor Network Platform – Connect2 Systems