Proyecto para aprender a utilizar el Devkit de desarrollo de NXTIoT, el cual trae un módulo Wisol de conectividad Sigfox y un microprocesador ATmega 328P, por lo que puede programarse mediante el IDE de Arduino (https://www.arduino.cc/en/Main/Software). El Devkit cuenta con 6 GPIOs y 6 entradas analógicas, que también pueden configurarse como entradas digitales, un botón y un led que pueden programarse. A lo largo de este proyecto, se presentarán algunos ejemplos para demostrar lo fácil que es incluir la conectividad Sigfox a cualquier proyecto. Además, los ejemplos permitirán asociar las terminales de la tarjeta con las utilizadas en Arduino de manera que cualquier sketch utilizado en Arduino Uno puede ser cargado en el Devkit, únicamente cambiando los puertos utilizados a los disponibles en la tarjeta.
La tarjeta ya trae un programa precargado, con el que se obtiene el ID y el PAC del modulo Wisol al presionar el boton, ademas, de mandar un mensaje por Sigfox.
Adicionalmente, se mostraran ejemplos de callback hacia diferentes plataformas para IoT (Microsoft Azure, AWS, IBM Watson, Losant, etc) enviando los datos recibidos en el backend hacia estas plataformas, para posteriormente procesar los datos y mostrar la información en un dashboard.
En la siguiente imagen se muestra el pinout del Devkit, de manera que se puedan asociar las terminales de la tarjeta con las utilizadas en Arduino Uno.
Para cargar un programa a la tarjeta, primero se deben quitar los jumpers (o jumper, sea el caso) tal como se muestra en la imagen. TENER CUIDADO AL QUITAR LOS JUMPERS.
El Devkit 2.0 es una mejora de la versión 1.0. Los cambios significativos son los siguientes:
- Sustituye los pines y jumpers de programación por un switch.
- Se cambiaron los botones de Reset (rojo) y el botón programable (azul) para su facil identificación.
- Se movió el módulo de comunicación Sigfox, de manera que las I/O quedan del lado izquierdo.
Los cambios anteriores no afectan nada en cuanto a programación, por lo que los programas para el Devkit 1.0 funcionan en la versión 2.0.
Para cargar un programa en el Devkit 2.0, poner el switch a la izquierda para programar el microcontrolador y hacia la derecha, para restablecer la comunicación entre el microcontrolador y el módulo de comunicación Sigfox.
Una vez conectada la tarjeta, deberemos selecccionar la "Placa" y el "Puerto" en la pestaña de HERRAMIENTAS. Seleccionamos "Arduino/Genuino uno" como nuestra placa y deberemos seleccionar el puerto.
En Windows seleccionamos el puerto COM que nos habilitó nuestra tarjeta. En ocaciones, puede tardar un momento en habilitar el puerto la primera vez
en Mac, hacemos lo mismo
En caso de tener varios puertos habilitados, probar hasta que nos permita cargar el programa. Una vez que se cargó el codigo, se vuelven a colocar los jumpers. Este procedimiento debe realizarse cada vez que se desee cargar un programa al Devkit.
En sistemas operativos Windows 8 y Windows 10, puede que no reconozca el Devkit. Para la resolución de este problema, seguir los pasos descritos en el siguiente repositorio
https://github.com/NXTIoT/Drivers-para-DEVkit
El modulo Wisol de conectividad Sigfox es un "pequeño" modem mediante el cual enviaremos nuestra información, por lo que para comunicarnos con el modulo utilizaremos comandos AT. Los principales comandos del modulo son:
- AT : Comando de "Attention". El modulo regresa un "OK" como respuesta.
- AT$I=10 : Obtener el ID
- AT$I=11 : Obtener el PAC
- AT$RC : Reset del módulo. Este comando debe utilizarse antes de mandar cualquier informacion por Sigfox.
- AT$SF= : Comando para enviar datos (hasta 12 bytes en hexadecimal)
Para simplificar el codigo, se creó la libreria "NXTIoT_dev.h". A continuación se mostrará el proceso de intalacion y un codigo base (code) que puede ser usado para cualquier proyecto que se quiera realizar con el Devkit
Abrir en otra ventana el siguiente link
https://github.com/NXTIoT/Libreria_Devkit_NXTIoT
Dar click en Clone or download -> Download ZIP
Una vez descargada, descomprimimos el archivo .ZIP y copiamos la carpeta "NXTIoT_dev"
nos dirigimos a la carpeta donde se encuentran las librerías de Arduino y pegamos la carpeta. Comúnmente es Documentos -> Arduino -> libraries.
Abrimos el IDE de Arduino. Si damos click en la pestaña "Programa -> Incluir Libreria", veremos que ya aparece en la lista de librerías.
-
initpayload(): inicializa nuestro Payload con el comando "AT$SF=". (No recibe ningún argumento.)
-
addint(int var): función para agregar un entero representado a un byte (recibe un entero de 0 a 255 ó -127 a 127 como argumento.)
-
addfloat(float var): función para agregar un flotante representado a 4 bytes en formato little-endian. (Recibe un flotante como argumento.)
-
sendmessage(): Envia la información a traves de Sigfox. Maximo 12 bytes. (No recibe argumento.)
Antes de comenzar con la tarjeta de desarrollo y los ejemplos, es necesario conocer un poco sobre el backend de Sigfox.
El backend de Sigfox es un Gateway por donde pasan los mensajes antes de ser enviados hacia su destino (base de datos, un servidor, etc), por lo que todos los mensajes enviados por dispositivos con comunicación Sigfox primero llegaran al backend. Por medio de los Device Types, podemos configurar hacia donde redirigimos la información de nuestros dispositivos, permitiéndonos enviar la información hacia una o varias URLs al mismo tiempo.
Una vez que se tiene una cuenta en el backend, ir al siguiente link:
https://backend.sigfox.com/auth/login
Ingresamos con nuestras credenciales. Nos aparecerá la pagina principal del backend, en donde se muestran las actualizaciones que se van liberando. Para ver los dispositivos en nuestra cuenta, damos click en la pestaña "DEVICE"
entonces nos aparecerán los dispositivos asociados a nuestra cuenta. Un circulo Negro en la columna de "Communication Status" significa que a nuestro dispositivo se le terminó el año de conectividad, de lo contrario unicamente aparecera un circulo gris. Cuando tenemos varios dispositivos, podemos buscar un dispositivo en específico dentro de nuestra lista de dispositivos, unicamente ingresando el ID que nos interesa en el recuadro y presionar "Enter". Damos click en el ID del dispositivo
enseguida nos desplegará la información del dispositivo. En la parte izquierda, damos click en "MESSAGES"
ahora nos mostrará todos los mensajes que ha enviado nuestro dispositivo, en caso de ya haber mandado, de lo contrario no mostrará nada hasta que enviemos mensajes con nuestro Devkit.
A continuación, se presentan varios ejemplos donde se utilizan las entradas analógicas y digitales, además de los dispositivos integrados en el Devkit. Se presentan programas de ejemplo utilizando la libreria "NXTIoT_dev" y sin la libreria.
En este ejemplo se utilizará el sketch devkit_info.ino (Code) para leer el ID y el PAC de nuestro Devkit, los cuales son necesarios para registrar el dispositivo en la plataforma de Sigfox y poder ver los mensajes enviados en el backend. Una vez descargado el sketch, procedemos a cargarlo en nuestra tarjeta siguiendo el procedimiento descrito anteriormente. Abrimos el Monitor Serie
Presionamos el botón más cercano al Led que se encuentra encendido y en el monitor serial nos aparecerá la información sobre el ID y el PAC de nuestro Devkit.
Una vez registrado, podemos enviar nuestro primer mensaje, lo cual podemos hacer con el mismo programa. Presionamos nuevamente el botón y nos desplegara la misma información que antes. Notar que los leds de status del módulo Wisol parpadearan 3 veces, lo que indica que se están enviando los mensajes. Si nos vamos al backend, veremos el mensaje que acabamos de enviar.
Este ejemplo nos permitirá conocer cuáles son los puertos a los que están conectados el botón y el led para poder utilizarlos en otros programas. Se utilizará el sketch boton_led.ino (Code). Una vez cargado el programa, al presionar el botón, el Led 6 se encenderá por 2 segundos para después apagarse.
En este ejemplo se mostrará como conectar un sensor de distancia al Devkit y mandar por medio de Sigfox, la distancia medida entre el sensor y un objeto, de manera que pueda visualizarse en el backend. El sensor que se utilizará es el HC-SRQ4. Conectamos el sensor de acuerdo al siguiente diagrama
Descargamos el sketch (sin usar librerías Code) - (con librerías Code)) y lo cargamos en la tarjeta siguiendo el procedimiento descrito anteriormente. El programa manda la información de la distancia hacia el backend cada vez que se presione el boton mas cercano al led que se encuentra encendido.
Ponemos un objeto frente al sensor
y abrimos el monitor serial de Arduino. Presionamos el boton e inmediatamente nos mostrara la distancia medida entre el sensor y el objeto
Si revisamos el backend, veremos que cada mensaje nos mostrara la misma información de la distancia que la mostrada en el monitor serie
En este ejemplo se mostrará como leer un sensor analógico además de realizar la codificación del dato antes de ser enviado y ya en el backend, se realizará la decodificación para poder visualizar la información en forma decimal.
Descargar el sketch (sin usar librerías Code) - (con librerías Code). El sensor utilizado en este ejemplo es el LM35
el cual debe ser conectado siguiendo el siguiente diagrama
Una vez cargado el programa, abrimos el monitor serial, presionamos el botón mas cercano al Led encendido y nos desplegara la información de la temperatura
Ahora para decodificar el dato enviado, se debe realizar el parsing del payload. Ir al “Device type” donde se encuentra el dispositivo y dar click en el botón “Edit” en la esquina superior derecha y en la sección “Payload display” seleccionamos “Custom grammar” y en “Custom configuration” escribimos temp::float:32:little-endian
Revisando los mensajes del dispositivo, veremos que ahora debajo del dato enviado aparecerá la información de la temperatura tal como nos aparece en el monitor serie de Arduino
En el siguiente ejemplo, se mostrará como realizar un downlink, en el que se configurará la información que recibirá el Devkit directamente en el backend y, a través de esta información, realizará cierta acción, En este ejemplo, al recibir la información del backend, prenderá y apagará el led programable un número determinado de veces.
El comando utilizado para realizar un downlink, es el mismo que para enviar un mensaje (AT$SF=XXXXXX) pero se le agrega ",1" al final del comando, quedando de la siguiente manera (AT$SF=XXXXXX,1).
En este caso, el dispositivo es el que comienza con el proceso del downlink. El proceso se puede resumir en los siguientes pasos:
1.- El dispositivo debe mandar un mensaje con la petición para la nube de un downlink (AT$SF=XXXXXX,1).
2.- La nube al recibir la petición, procesa la información que tiene que mandar y busca la antena mas cerca al dispositivo que pueda atender a la peticion.
3.- El dispositivo entrará en modo escucha por alrededor de 20 segundos, para captar la información que se le envie.
4.- En dado caso que exista una antena que pueda realizar la petición de downlink, el estatus de downlink en el backend cambiará a verde.
5.- Finalmente, en dado caso que la petición haya sido exitosa, el dispositivo recibirá la informacion y pasará a modo reposo nuevamente.
Descargar y subir al Devkit el siguiente programa (code).
Ahora, debemos configurar la información que recibirá nuestro Devkit. Buscamos nuestro dispositivo en el backend
y damos click en el "Device Type". En la esquina superior izquierda seleccionamos "Edit"
nos dirigimos hacia la parte de "Dwnlink data". Por default tendrá la configuración DIRECT en "Downlink mode" y {time}0000{rssi} como la información que será enviada en caso de que el dispositivo realice una petición de downlink. Esta informacion es la que deberemos modificar.
modificamos la informacion de {time}0000{rssi} a {time}0400{rssi}, de esta manera, con el 4 que hemos agregado le indicaremos al Devkit el número de veces que queremos que encienda el led (El valor debe de ser del 1 al 9). Hacemos click en "OK"
Ahora que ya tenemos configurada la información que recibirá el Devkit, nos vamos a los mensajes del dispositivo. Abrimos el "Monitor Serie" de Arduino y presionamos el boton programable (Azul). Enseguida nos apareceran los comandos de RESET y el de enviar mensaje con petición de downlink
si observamos el backend, veremos que el mensaje presenta dos indicadores.
-
"Flecha hacia arriba": estatus del callback en caso de tener alguno configurado.
-
"Flecha hacia abajo": estats del Downlink, es decir, disponibilidad de la red para atender la petición del dispositivo.
una vez que el dispositivo hace una petición de downlink, abrirá una ventana de tiempo (alrededor de 20 segundos), durante la cual esperará la respuesta de la red. Despues de un tiempo, el estatus del Downlink aparecerá en verde, indicando que la red puede atender satisfactoriamente la petición del dispositivo.
Y en el serial de arduino, se desplegará la informacion que recibió el dispositivo, en caso de que se realizara de forma exitosa. Aparecerà un "OK" de que se envió el mensje con la petición de downlink y en la siguiente linea, la información recibida y por ultimo, el numero de veces que se encenderá el led..
En el siguiente link se muestra un ejemplo de como enviar multiples variables dentro de un mensaje con el devkit
https://github.com/NXTIoT/Multiples_variables
A continuación se muestran varios links para configurar los callbacks hacia diferentes plataformas.
https://github.com/NXTIoT/Callbacks-hacia-plataformas
https://github.com/NXTIoT/Callback_Losant
https://github.com/NXTIoT/Sigfox_y_google_sheets
https://github.com/NXTIoT/Callback_IBM_Watson
https://github.com/NXTIoT/Callback-Firebase
https://github.com/NXTIoT/Callback-Amazon-AWS
En esta parte del repositorio se presenta el uso del Devkit con el modulo Dual de Wisol para zona 2 y 4. Se presenta un codigo de ejemplo que realiza el cambio de zona de RCZ2 a RCZ4 y viceversa utilizando el botón programable (Azul) que trae incluido el Devkit.
Para establecer la zona de transmisión de RC2->RC4, es necesario la siguiente secuencia de comandos:
y de RC4->RC2
El siguiente codigo de ejemplo (code), permite realizar el cambio de zona (de zona 2 a 4 y viceversa) por medio del boton programable. Las acciones son:
-
1 click: obtener ID, PAC y enviar un mensaje por Sigfox.
-
click largo por 3 segundos: cambio de zona.
Ademas cuando el Devkit este configurado en zona 4, el led programable (led verde) estara encendido y al abrir la terminal de arduino, nos desplegara la informacion de la configuracion de la zona
y apagado cuando se encuentre en zona 2