En las siguientes líneas se va a explicar lo que es una red MQTT, en qué se basa la norma homie y cómo debe instalarse todo lo necesario para la configuración de ESP8266 mediante Arduino IDE.
MQTT es el protocolo IP más usado en el Internet de las Cosas (IoT). MQTT dispone de un servidor (bróker) y una serie de clientes que se conectarán al bróker para poder intercambiar mensajes. Cuando se habla del bróker, se quiere referir al servidor central al que se conectan los clientes, y que a su vez es el encargado de redirigir los mensajes al cliente adecuado.
MQTT usa el método Publish/Subscribe para el intercambio de mensajes. Un cliente no envía un dato directamente a otro cliente, sino que lo publica en la red MQTT y los clientes interesados en recibir ese mensaje, es decir, los clientes que estén suscritos a ese mensaje, serán notificados automáticamente por el bróker. Por lo tanto, el hecho de enviar un mensaje a la red MQTT es lo que se denomina publicar (publish) un mensaje. Y en cambio, decirle al bróker que se está interesado en un mensaje se denomina suscribirse (subscribe) a un mensaje.
Las estructuras que se utilizan para publicar son los topics y por lo tanto es a los que se tiene que suscribir para poder obtener la información que este contenga.
Para poder entender mejor el funcionamiento de MQTT se hace uso de la aplicación MQTTLens que se encarga de la conexión con el bróker para facilitar la suscripción y la publicación en un topic.
Por otro lado, hay que mencionar que homie es una “norma” para intentar establecer un criterio en los topics que se vayan a usar al crear los sensores que se utilicen en MQTT. Homie está basado en estados, lo que significa que por ejemplo, al utilizar un sensor, no se le ordena que se encienda, sino que se le dice que ponga su estado de on en modo true. Es un método que se complementa perfectamente con MQTT.
A pesar de que homie es una representación teórica, también se ha creado una librería para el microcontrolador ESP8266 que implementa todo lo definido en la norma homie-ESP8266 y que es la que se va a explicar a continuación ya que es necesaria para la utilización de Arduino IDE.
Para poder utilizar homie-ESP8266 es necesario disponer de una placa ESP8266. Por supuesto no hay que olvidarse de obtener el software Arduino IDE, el cual debe ser como mínimo la versión 2.3.0.
|
|
Placa ESP8266
|
Software Arduino IDE
|
A continuación se explicarán los pasos que deben seguirse para la correcta instalación de homie para ESP8266:
Lo primero de todo es descargarse la librería de homie para Arduino IDE desde ‘github’. Es muy importante que sea la versión 1.5, y no la última actualización ya que si es así, no será posible cargar los programas necesarios en el ESP8266.
Por ello, antes de instalar esta librería es recomendable ir a la carpeta en la que están guardadas las librerías de Arduino IDE, la cual se crea al instalar Arduino IDE en el ordenador, para comprobar que no existe ninguna librería de homie que sea de una versión mayor a la 1.5. De lo contrario, debe ser eliminada.
Una vez hecha la comprobación y descargada la librería, debe ser cargada en Arduino IDE desde la pestaña programa/incluir librería/añadir librería .zip.
Además de esa librería, homie-ESP8266 depende de otras cuatro librerías que también hay que cargar: ArduinoJson, Bounce2, ESPAsyncTCP y AsyncMqttClient. Algunas de ellas pueden encontrarse disponibles en Arduino IDE en el apartado programa/incluir librería/gestionar librerías, y por lo tanto solo habrá que buscarlas e instalarlas. Las que no se encuentren en Arduino IDE deben descargarse y cargarse tal y como se ha hecho con la librería de homie. Al descargar alguno de estos zips puede que al guardarse aparezca el término “-master” en el nombre, y debe eliminarse ya que sino Arduino IDE no reconocerá la librería y no podrá cargarla.
Descarga de las librerías de Arduino IDE: eliminar “-master”
Una vez se hayan cargado todas las librerías necesarias, Arduino IDE estará preparado para ejecutar los programas necesarios para poder controlar el ESP8266 desde MQTTLens. Esta última es una aplicación de google chrome y se puede descargar desde el navegador.
En cuanto a los programas necesarios, por un lado se necesitará un programa de configuración que contenga los datos del Wifi y del topic de MQTTLens que se quiera crear. Eso será lo primero que debe subirse al ESP8266 para asegurar la conexión entre el dispositivo y el ordenador. Por otro lado, hay que crear un programa para poder controlarlo y a continuación subirlo. Ambos programas se crearán en Arduino IDE y se subirán desde el mismo.
Para crear el topic de MQTTLens hay que tener varias cosas en cuenta. La primera es que los topics son estructuras que se ordenan de manera jerárquica al igual que las carpetas de Linux. Eso quiere decir que están organizados por niveles y cada uno hace referencia a una categoría diferente.
El primer nivel en cualquier dispositivo estará compuesto por la palabra devices. El segundo nivel hace referencia al nombre que se le haya otorgado al dispositivo homie. El tercer nivel corresponde a los nodos que se hayan definido para el dispositivo seleccionado. Por último, el cuarto nivel es para las propiedades de los nodos mencionados.
En ese último nivel, en el que contiene las propiedades, es donde se publicarán los datos deseados y donde se tendrá que suscribir para poder obtener la información. Pero también hay que tener en cuenta que si se trata de propiedades que son de escritura, como en el caso de un relé, hay que añadirle un quinto nivel con la palabra set, que será a donde se mande el nuevo valor, por ejemplo un true para que se encienda. De esa manera el topic queda definido para poder suscribirse y publicar lo que se requiera mediante MQTTLens.
El siguiente sería un ejemplo de cómo debe estar organizado un topic para controlar por ejemplo el encendido y el apagado de un LED:
En el caso de llamar al dispositivo led_test y el nodo que se vaya a utilizar sea led, siendo su propiedad o estado on, la estructura quedaría: devices/led_test/led/on/set. El último set, tal y como se ha explicado anteriormente, hace referencia al nuevo valor que se le quiera dar. Ese es el directorio al que habría que suscribirse mediante MQTTLens, y en el apartado de publicar se escribiría true o false en función de la acción que se quiera realizar.
Aplicación MQTTLens
Por último, cabe mencionar que sería recomendable aparte de controlar el LED mediante ESP8266, crear un ítem en openHAB y controlarlo desde un sitemap ya que a lo mejor resulta más visual. Y además de esa manera se dispondría de dos formas de controlar el LED.
Alazne Martínez Aguinaga