Empezando con Aquila 2.0 en Altair

En este tutorial veremos cómo empezar a utilizar Aquila 2.0 con la placa Altair.

Si no lo has hecho, te recomiendo primero leer El post introductorio a Aquila 2.0, ya que utilizaremos varios de los términos y conceptos presentados ahí.

Componentes requeridos:

Al menos dos de lo siguiente:

  • Altair o Altair Pro
  • USB-Serial para Altair o cable micro USB para Altair Pro

Altair

Altair Pro

Conocimientos requeridos:

  • Alguna experiencia con alguna terminal UNIX (Bash)
  • Alguna experiencia con Arduino
  • Conocimientos básicos de redes
  • Git, JavaScript y node.js sería un plus

Este tutorial estará dividido en dos partes:

  1. Parte Embebida: Preparando el hardware y el firmware, así como las herramientas necesarias para programarlo.

  2. Parte de Software: Preparando el software que correrá en la PC o servidor.

Parte Embebida

Preparando el hardware:

Lo primero que vamos a hacer es subir el firmware tanto del "Bridge", que nos permitirá interfacear los Altair clientes con nuestra PC, como uno de los "Clientes" MQTT-SN.

Primero, programemos el firmware del "Bridge":

  1. Instala PlatformIO IDE.
  2. Descarga el firmware del Bridge de: https://github.com/Rodmg/altair-mqtt-sn-bridge (Clone or download > Download Zip).
  3. Descomprime el archivo descargado y abre la carpeta resultante con Atom (Instalado con PlatformIO IDE).
  4. Conecta el Altair que será el "Bridge" a la PC y sube el firmware desde PlatformIO IDE (ícono de la flecha en la barra lateral izquierda en Atom).

Con esto nuestro "Bridge" está listo. Desconéctalo de la PC, vamos a dejarlo de lado por ahora.

Atom con PlatformIO mostrando el botón de subida de firmware.Atom con PlatformIO mostrando el botón de subida de firmware.

Ahora, prosigamos con la programación de uno de los clientes con un programa de ejemplo:

  1. Descarga el firmware ejemplo del cliente desde la terminal usando git:

    git clone --recursive https://github.com/Rodmg/altair-mqtt-sn-client-example.git

  2. Abre la carpeta descargada con Atom.

  3. Conecta el Altair que será el cliente a la PC y sube el firmware desde PlatformIO IDE.

Nuestro cliente está listo. El firmware de ejemplo incluye todas la bibliotecas requeridas para controlar el transceptor 802.15.4 integrado en el Altair, junto con la biblioteca MQTT-SN. El código de ejemplo se encuentra en src/main.ino, explicaremos en detalle su funcionamiento en un post futuro, pero por ahora todo lo que necesitamos es saber qué es lo que hace:

Cuando el Altair se enciende, primero trata de establecer una sesión MQTT-SN con el "Bridge" (Antes se debió haber realizado una secuencia de "pareo" en la que se le asignó una dirección). Cuando esto se logra, se subscribe al topic client/subscribe y registra el topicclient/publish (al cual publicará más adelante). También registra un topic de last-will, lastwill.

Después de esta inicialización, inicia un ciclo que se encarga de publicar un mensaje "Hello world" cada 5 segundos al topic client/publish.

También, cuando se hace alguna publicación al topic client/subscribe, los datos recibidos se imprimen por medio del puerto serial (visibles desde una terminal serial conectada al Altair).

Ahora, preparemos el software que nos permitirá probar esta funcionalidad.

Parte de software

Necesitamos instalar un broker MQTT (mosca), el aquila-gateway para conectar la red MQTT-SN al broker a través del Altair programado como "Bridge", y una herramienta para facilitar el desarrollo y debugueo de la comunicación (node-red y node-red-dashboard).

Antes que nada necesitas tener instalado lo siguiente:

  1. node.js v6.X.X (https://nodejs.org/en/) (si utilizas macOS o Linux, te recomiendo usar nvm para instalar y manejar versiones de node: https://github.com/creationix/nvm ).
  2. una terminal tipo UNIX (Si utilizas macOS o Linux ya tienes una, si estas en Windows, te recomiendo git-bash, que viene incluida junto con GIT para windows).

Abre una terminal e introduce los siguientes comandos (presionando enter después de cada línea):

npm install -g aquila-gateway node-red  
npm install -g mosca bunyan  
mkdir ~/.node-red  
cd ~/.node-red  
npm install node-red-dashboard  

Nota: en macOS y Linux, dependiendo de cómo hayas instalado node, puede que tengas que escribir sudo antes de los comandos que empiezan con npm install -g. (Si instalaste node con nvm no necesitas hacerlo).

Nota 2: Si tienes problemas a la hora de instalar aquila-gateway, intenta con:

sudo npm install -g aquila-gateway --unsafe-perm

Nota 3: También puede que tengas que instalar git, python 2.7 y algún compilador para poder instalar todo correctamente.

Después de que todo esté instalado, procedamos a iniciar todos los procesos necesarios en la PC:

  1. Asegúrate de tener el Altair que programaste como "Bridge" conectado a la PC por USB.
  2. En una terminal, ejecuta:
    mosca -v | bunyan
  3. En otra terminal, ejecuta:
    aquila-gateway -p <puerto serial del bridge> | bunyan
  4. En otra terminal, ejecuta:
    node-red

Tres ventanas de terminal corriendo los procesos necesarios.Tres ventanas de terminal corriendo los procesos necesarios.

Ahora que todo está listo, iniciemos con la parte divertida:

Primero, configuraremos un flujo de node-red que nos otorgará una interfaz gráfica para monitorear nuestra red MQTT-SN, útil para debuguear y mantener redes de sensores.

  • Desde un navegador web, ve a http://localhost:1880.
  • Verás la interfaz de node-red.
  • Presiona el botón de menú en la esquina superior derecha de la página y selecciona "Import > Clipboard"
  • Copia y pega el siguiente código y presiona "Import":
  • Presiona "Deploy".

La interfaz de node-red y el diálogo de importación.La interfaz de node-red y el diálogo de importación.

  • Ve a http://localhost:1880/ui.
  • Verás una pequeña interfaz gráfica con información del Gateway y de los dispositivos conectados. Esto nos será muy útil a la hora de debuguear nuestra red de sensores.

Interfaz de monitoreo del Gateway MQTT-SN basada en node-red-dashboard.Interfaz de monitoreo del Gateway MQTT-SN basada en node-red-dashboard.

Ahora puedes encender tu Altair cliente, verás que no aparece en la lista de dispositivos debido a que no está pareado.

Para parear el Altair cliente sigue los siguientes pasos:

  1. Presiona el botón "33" del Altair hasta que el led RGB quede encendido en verde (esto significa que el Altair está en modo "Pair").
  2. En la interfaz de monitoreo, presiona "SET PAIR".
  3. Espera un momento, deberás ver que el led verde del Altair cliente se apagará y el modo en la interfaz volverá a normal. Además deberá aparecer un nuevo dispositivo conectado en la lista de la interfaz, junto con sus subscripciones y topics.

Ahora prosigamos a ejemplificar el uso de la red MQTT-SN desde un cliente MQTT.

Comunicando los dispositivos con un cliente MQTT

El principal objetivo de la plataforma Aquila 2.0 es hacer mas fácil la comunicación entre dispositivos embebidos y otras tecnologías. Esto se logra a través de un cliente MQTT estándar, como MQTT-Lens, MQTT-FX o tu biblioteca MQTT favorita en Android, iOS, python, node, etc.

A lo largo de este tutorial hemos estado utilizando node-red, una de las razones por la cual lo hicimos es por que node-red está modelado con base en MQTT, así que tomaremos ventaja de esto usando los nodos MQTT integrados en esta herramienta.

  1. Crea un nuevo flujo presionando el ícono "+" a lado del tab "Flow 1".
  2. Desde la lista de nodos, jala un nodo de entrada mqtt y una salida de debug.
  3. Haz doble click sobre el nodo mqtt y configúralo como sigue:

  4. Conecta el nodo mqtt con el nodo debug.

  5. Presiona "Deploy".
  6. Abre el tab "Debug" en el panel que se encuentra a la derecha de la ventana.

Deberás ver un mensaje "Hello world" siendo publicado cada 5 segundos por el Altair cliente.

De igual forma podrías conectar un nodo de entrada "Inject" a una salida mqtt configurada para publicar en el topic "client/subscribe" y enviar cualquier texto. De esta forma podrás ver este texto apareciendo en el puerto serial del Altair.

Si quieres saber más de cómo utilizar las herramientas de Aquila 2.0 te recomiendo familiarizarte primero con PlatformIO, puedes empezar con los siguientes posts: