Introducción Arduino MKRFOX1200 SigFox y redes LPWAN Deja un comentario

La placa Arduino MKRFOX1200 es una de las placas de prototipado más dotadas para el Internet de las Cosas o IoT. Con capacidad para conectarse a la red de SigFox, pone a nuestro alcance el poder de las redes LPWAN para conectarnos a grandes distancias y muy bajo consumo.

Desde hace ya algún tiempo estoy fascinado con los objetos conectados y el IoT. Abre un mundo de posibilidades a la hora de monitorizar o controlar máquinas y dispositivos. Desde las fábricas más complejas, a las zonas mas apartadas.

Las redes LPWAN nos muestran el camino y Arduino MKRFOX1200 nos ayuda a avanzar rápido. Si ya eres lector de mi blog sabrás de mi devoción por las placas Arduino. Y no es que lo diga yo, si sigues el tutorial que aquí te propongo en menos de 1 hora estás transmitiendo datos a SigFox.

Quiero advertir que no se pueden comparar peras con manzanas, me explico. Hay placas más económicas como el ESP8266 o el ESP32. Incluso el Arduino MKR1000 puede ser un gran rival. Sin embargo, utilizan tecnologías diferentes de comunicación.

Y aunque estas placas son muy interesantes, su función no tiene nada que ver con despliegues masivos de dispositivos del IoT. No cumplen las premisas de bajo consumo y un amplio alcance. Sin embargo, placas compatibles con LoRaWan o SigFox, cumplen con creces estas premisas.

En este artículo te voy a contar qué son las redes LPWAN y te hablaré de una de ellas, SigFox. Por último pondremos todo esto en práctica haciendo un ejercicio práctico con Arduino MKRFOX1200. La placa Maker para prototipar objetos conectados.

Ponte cómodo, coge una buena taza de café (o cerveza 🙂 y prepárate a descubrir el universo del Internet de las Cosas.

arduino mkrfox1200 sigfox lpwan

Qué es LPWAN

Ya sabes que a mi no me gusta hablar con tecnicismos que apenas entendemos. Si hay que definir qué es una red LPWAN, lo mejor es hacer una analogía como hacen en el blog IoT For All.

Vamos a ponernos en situación. Estamos en una fiesta donde hay un montón de gente y la música está a tope. Tu has ido con un amigo. De repente ves la hora y ya es muy tarde. Decides que ha llegado el momento de marcharte a casa.

Pero tu amigo está al otro lado de la sala y necesitas hablar con el. No vale utilizar el móvil, en la fiesta hay un inhibidor de señales jejejejeje. ¿Cómo le haces llegar el mensaje?

Tenemos varias alternativas.

#1 Gritas como si estuvieras en una lonja de pescado

Esta es una solución posible. Sin embargo, con todo el ruido que hay en la sala deberás pegar un grito bastante potente y esto significa que vas a utilizar mucha energía para transmitir el mensaje.

Con las máquinas sucede lo mismo. Si quieres enviar información a una distancia muy grande tendrás que utilizar mucha energía. Un ejemplo podría ser la comunicación satélite o móvil.

Pero ¿qué pasa si no tienes esa energía?. Imagínate que estás constipado y no puedes gritar, tus pulmones no dan para más. Una solución es acercarte a tu amigo para transmitir el mensaje.

#2 Reduces la distancia y te acercas a tu amigo

Si te acercas a tu amigo, ya no necesitas tanta energía para hablar. Sin embargo, si hablas más bajo el alcance de tu mensaje es más corto.

Si traducimos esto al mundo de las máquinas significa que cuanta menos energía utilice el mensaje no llegará tan lejos es decir, reducimos el rango. Un ejemplo las tecnologías Bluetooth y WiFi.

Pero ¿qué pasa si no puedes gritar y no puedes acercarte a tu amigo? ¿Hay alguna solución para enviar el mensaje a una larga distancia sin aumentar la energía?

Aquí es donde entran las redes de Baja Potencia y Largo Alcance o LPWAN (siglas en ingles de Low Power Wide Area Network).

Descarga la guía del ESP-01

Tutorial paso a paso para configurar este módulo

El ESP-01 es el módulo más famoso y económico que lleva integrado un ESP8266. Descarga la guía completa paso a paso en PDF.

#3 Haces una señal a tu amigo de que debéis marcharos de la fiesta

Si quieres avisar a tu amigo y no puedes gritar ni acercarte, quizás si le haces una señal con el dedo apuntando a la puerta te entienda. Con esto conseguimos dos cosas: apenas gastar energía ya que no estamos hablando y un alcance grande.

Las redes LPWAN utilizan el mismo sistema para enviar mensajes a un consumo muy bajo y un largo alcance.

Cómo funcionan las redes LPWAN

Las redes LPWAN se basan en dos principios: un ancho de banda pequeño y un consumo reducido.

Lo que hacen este tipo de redes es reducir la tasa de bits que se envían y así reducen el ancho de banda. Estoy hablando que envían datos desde 0,3 Kb/s a 50 Kb/s. Para que te hagas una idea, el estándar WiFi IEEE 802.11 tiene una tasa de bits de 54 Mb/s es decir, 54.000 Kb/s.

Sí, has leído bien, tiene una velocidad 10.000 veces mayor. Esto se traduce en que los dispositivos que utilizan WiFi consumen mucha más energía.

Todo esto explica el segundo principio, el bajo consumo. Gracias a que está transmitiendo menos datos consume menos energía y puede ser aprovechada para transmitirla más lejos. Su alcance varía de 2 Km a 1.000 Km dependiendo de la tecnología que se utilice.

comparativa redes inalambricas

Fuente Waviot

Sin embargo, esto tiene inconvenientes. Imagínate que haces la señal a tu amigo y que en ese momento tu amigo no está mirando. El mensaje ha sido transmitido pero no se recibe.

Lo mismo sucede con la LPWAN ya que en ocasiones puede que se haya transmitido la información pero el receptor no la reciba. La solución es enviar varias veces el mensaje para que lo reciba o tener un mensaje desde el receptor al transmisor de confirmación.

Pero no solo esto. Las redes LPWAN tienen una alta latencia. La latencia no es más que un retardo que se produce en la transmisión de la señal.

Sin embargo, las LPWAN cumplen con las funciones requeridas para los dispositivos del IoT.

Piensa en el escenario que se crea en la Industria 4.0 o Agricultura Inteligente donde centenares o miles de sensores están distribuidos por un amplio área. Si esos sensores consumen mucha energía y tienes que cambiar las pilas o baterías cada poco tiempo no es viable.

Puedes pensar que quizás con la tecnología GSM se solucione. Sin embargo, el coste es muy elevado. Centenares de dispositivos y cada uno con una tarjeta telefónica. Por muy económicas que sean, el coste aumenta considerablemente.

Por todo esto, las redes LPWAN juegan un papel crucial dentro de la implantación del IoT en diferentes sectores. Permiten que miles de sensores puedan transmitir información a un coste menor, un gran alcance y un consumo reducido.

LPWAN no es una tecnología única, sino un grupo de varias tecnologías que utilizan frecuencias con licencia o sin licencia e incluye estándares patentados y abiertos.

¿Qué es SigFox?

SigFox es un operador de red LPWAN francés al igual que cualquier compañía de telefonía móvil. Es una de las redes con mayor despliegue en todo el mundo y opera sobre la banda de frecuencia pública de 868 MHz en Europa y 902 MHz en américa.

Para que te hagas un idea de la cobertura que tiene, puedes entrar en el mapa donde se muestra la implantación de esta tecnología por todo el mundo.

cobertura sigfox

Fuente web de cobertura SigFox

Utiliza la tecnología de modulación de radio Banda Ultra Estrecha o UNB (siglas en inglés de Ultra Narrow Band) lo que implica que sólo se permite un operador sobre esta banda en cada país.

logo sigfox

SigFox ofrece una alternativa para desarrollar proyectos del IoT a muy bajo coste y totalmente escalables. Gracias al acuerdo que llegó con Arduino, tenemos a nuestro alcance la placa Arduino MKRFOX1200 que dota de comunicación con la red SigFox y una suscripción por un periodo de 2 años.

Las características principales que tiene esta suscripción son las siguientes:

  • Se pueden enviar 140 mensajes al día con un tamaño máximo de 12 bytes cada mensaje. Si divides esos 140 mensajes entre 24 horas tienes que puedes enviar 1 mensaje de 12 bytescada 10 minutos lo que hace un total de 1.680 bytes por día.
  • La comunicación puede ser bidireccional. SigFox ofrece 4 mensajes de bajada de 8 bytes cada uno.
  • El rango de alcance dependiendo de la situación del dispositivo
    • Entre 3 y 10 Km en zonas urbanas debido a los obstáculos e interferencias con otras redes.
    • Entre 30 y 50 Km en áreas rurales.
    • Hasta 1.000 Km si se tiene un visión directa entre el receptor y el transmisor.
  • Consigue una velocidad de transmisión de hasta 100 bps.

Y todo esto, como ya te he dicho, está a nuestro alcance gracias a Arduinno MKRFOX1200. Ahora vamos a ver qué nos ofrece esta placa a los Makers.

Especificaciones técnicas de Arduino MKRFOX1200

Vamos a comenzar por el principio, viendo las características técnicas de Arduino MKRFOX1200. MKR significa Maker y es una denominación que han puesto la gente de Arduino a un grupo de placas.

Fuente Arduino

Todas tienen una característica principal que las diferencia del resto de placas de la marca: la capacidad de enviar y recibir datos a través de Internet.

A día de hoy disponemos de 4 modelos.

  • Arduino MKR1000 (WiFi)
  • Arduino MKRFOX1200 (SigFox)
  • Arduino MKRWAN1300 (LoRa)
  • Arduino MKRGSM1400 (GSM)

Aunque cada una de ellas utiliza una tecnología diferente para conectarse a Internet, todas tienen el mismo cerebro: el microcontrolador el SAMD21 Cortex-M0+.

Este microcontrolador no tiene capacidad de conectarse a Internet sin embargo, cada placa incorpora un módulo específico para cada tecnología inalámbrica.

Por ejemplo, en Arduino MKR1000 viene todo integrado en un SoC donde encontramos 3 partes, el SAMD21 (es el microcontrolador principal, nos da acceso a los pines y donde cargamos el programa), el WINC1500 un microcontrolador con conexión WiFi de bajo consumo y el ECC508 que permite encriptación a nivel de hardware.

mkr1000-dimensiones

Con Arduino MKRFOX1200 ocurre algo parecido. Por un lado tenemos el SAMD21 y por otro lado el módulo de SigFox ATA8520.

mkrfox1200 mcu

Fuente Arduino.cc

El microcontrolador SAMD21 gestiona la interfaz de los GPIO y donde cargamos el programa y el módulo ATA850 se encarga de la conexión con SigFox.

Su precio es de unos 35€ y viene con una suscripción a SigFox por 2 años.

Microcontrolador SAMD21

Como siempre me gusta decir, hay que recurrir a las hojas de características técnicas para conocer todas las prestaciones y características que nos ofrece un componente. Tenemos dos versiones, la reducida y la ampliada.

El fabricante es Atmel, y pertenece a la serie de microcontroladores SMART SAM D21. Una gama de bajo consumo como veremos más adelante.

ATSAMD21G

Fuente Microchip

Hay diferentes versiones de este microcontrolador. El que utilizan las placas de la familia MKR es el ATSAMD21G.

Características más importantes de SAMD21

Las características principales son las siguientes.

Característica Valor
Arquitectura 32-bits
Velocidad de reloj 48 MHz
Memoria Flash 256 KB
SRAM 32 KB
EEPROM 0 KB (no)
UART Si
SPI Si
I2C Si
Pines 48 (38 GPIO)
Digitales 28
Analógicos 10
ADC 8-bit, 10-bit y 12-bit (configurable)
DAC 10-bit
Alimentación De 1,62 V a 3,63 V

La Unidad Central de Procesamiento o CPU (siglas en inglés Central Processing Unit) funciona con 32-bit. Esto quiere decir que puede realizar operaciones con números de hasta 32-bit.

Si lo comparamos con el microcontrolador Atmega328 que tiene Arduino UNO que funciona con 8-bit, vemos que hay una gran diferencia.

La velocidad es de 48 MHz lo que significa que en cada segundo puede ejecutar 48.000.000 de instrucciones. Increíble pero cierto. Esto no equivale a 48.000.000 millones de líneas de código, que quede claro.

Cada línea puede traducirse en múltiples instrucciones. Aún así va muy rápido, más del doble que el microcontrolador de Arduino UNO que funciona a 20 MHz.

La memoria Flash, donde se almacenan los programas en código máquina, tiene una capacidad de 256 Kb. Para que te hagas una idea, un programa vacío con sólo la declaración de la función setup y loop compilado para Arduino MKRFOX1200 ocupa unos 9 Kb.

Por lo tanto tenemos espacio suficiente para hacer programas verdaderamente grandes. Aún así, la memoria Flash es una de las partes más críticas a la hora de hacer un proyecto así que optimiza todo lo que puedas.

La memoria SRAM es de 32 Kb. Este valor es muy importante a la hora de declarar variables. Siempre que sea posible debemos ajustar el tipo al rango que vamos a utilizar. Por ejemplo, al crear una variable para almacenar el número de un pin, siempre utilizar el tipo con menor rango el byte (de 0 a 255).

Algo que puede que eches en falta es una memoria EEPROM también llamada no volátil. Es la memoria que no se borra aunque el microcontrolador se quede sin alimentación. Si algún día necesitas guardar información permanente puedes utilizar la librería FlashStorage.

Tiene integrado los protocolos de comunicaciones UART, SPI e I2C. Cuenta con 48 pines 38 de ellos GPIO (pines de entrada y salida de propósito general). De los 38, 28 son digitales y 10 son analógicos.

pines smd21

Fuente hoja de características Atmel SAMD21

Los pines analógicos tienen una resolución que se puede configurar a 8-bit, 10-bit y 12-bit gracias al Conversor Analógico Digital o ADC (siglas en inglés Analog Digital Converter).

Pero también dispone de un Conversor Digital Analógico o DAC de 10-bit (siglas en inglés Digital Analog Converter ). Este componente permite convertir una señal digital en una señal analógica, el camino contrario que el ADC.

Gracias al DAC podemos hacer algo muy interesante, reproducir música o algún sonido en formato .wav a través del pin correspondiente.

El SAMD21 tiene un voltaje de alimentación entre 1,62V y 3,63V. Incluye un regulador de voltaje que puede trabajar en dos modos:

  • Modo normal: se usa cunado la CPU y los periféricos están funcionando.
  • Modo Low Power (bajo consumo): se usa cuando ponemos el microcontrolador en modo de reposo (standby).

Con esta información nos podemos hacer una idea del microcontrolador con el que estamos trabajando. Más adelante veremos como se integra dentro de la placa de Arduino MKRFOX1200 y que características podemos usar.

Microcontrolador ATA8520

Se trata de un Sistema en Chip o SoC (siglas del inglés System on a Chip) donde viene integrado un microcontrolador AVR con un firmware embebido y  un módulo de transmisión con radio frecuencia (RF) con el protocolo de comunicaciones SigFox.

Este SoC tiene integrado el sensor de temperatura AT30TS75A que mide el rango de -55ºC a 125ºC con una precisión de entre ±0,5ºC y ±2,0ºC. Desde la librería que utilizaremos para programar Arduino MKRFOX1200, podremos acceder a sus datos.

ATA8520

Lo más destacado es que opera en el rango de frecuencias de 868.0 MHz y 868.6 MHz y su bajo consumo, 40 mA cuando transmite un mensaje y en modo apagado un máximo de 600 nA.

Esto último es precisamente su fuerte, tenemos conectividad con un consumo muy reducido comparado por ejemplo con otras tecnologías como WiFi o GSM.

Si quieres más información puedes consultar la hoja de características técnicas del componente.

Arduino MKRFOX1200 características técnicas

Arduino MKRFOX1200 no utiliza todas las características del SAMD21. Por ejemplo, parte de sus pines se utilizan para comunicarse con el SoC ATA8520 o para la comunicación serie.

Una de las ventajas del hardware libre es que tenemos a nuestra disposición los esquemáticos de la placa. Esto nos permite dos cosas. La primera es que lo podríamos replicar, sólo tenemos que buscar los componentes y empezar a soldar, así de fácil.

Pero lo más importante, es que podemos obtener mucha información de un esquema eléctrico. Este sería el de Arduino MKRFOX1200.

esquema eléctrico arduino mkrfox1200

Puedes verlo completo en la documentación oficial de Arduino MKRFOX1200

Según este esquema obtenemos el siguiente pineado en la placa Arduino MKRFOX1200.

arduino mkrfox1200 pinout

Vamos a ir viendo cada uno de los pines por bloques.

Pines digitales

Contamos con 15 pines digitales que van numerados del 0 al 14. Son los pines que nos permiten leer o escribir dos estados: HIGH o LOW. Mucho ojo en este aspecto, Arduino MKRFOX1200 trabaja tien un voltaje de operación de 3,3V.

Esto quiere decir que siempre que tengamos un estado HIGH significa que tenemos 3,3V y un estado LOW serán 0V.

De todos ellos se recomienda no utilizar el 13 y el 14 ya que son los que se utilizan para la comunicación con el puerto serie. Esto puede hacer que interfiera a la hora de cargar un programa.

Dentro de la placa tenemos un LED integrado. Muy útil a la hora de probar nuestros programas o cargar el popular “Hola Mundo” de la electrónica. Tenemos acceso a este pin a través de la programación con el pin digital 6.

Si estás acostumbrado a trabajar con placas como Arduino UNO debes llevar mucho cuidado. Estas placas trabajan con niveles lógicos a 5V sin embargo, la familia MKR y entre ellas Arduino MKRFOX1200, trabajan con un voltaje de 3,3V. Si aplicas un voltaje más alto de 3,3V a la entrada de un pin puedes dañar la placa. Sin embargo, es compatible con placas que trabajan a 5V.

Descarga la guía del ESP-01

Tutorial paso a paso para configurar este módulo

El ESP-01 es el módulo más famoso y económico que lleva integrado un ESP8266. Descarga la guía completa paso a paso en PDF.

Pines analógicos

Los pines analógicos nos permiten leer un valor analógico de 0V a 3,3V. Recuerda que esta placa trabaja a 3,3V. Esto lo hace a través del ADC que tiene integrado el microcontrolador SAMD21.

A nuestra disposición tenemos 7 pines analógicos numerados del A0 al A6.

Una de las ventajas es que podemos configurar la resolución a 8-bit, 10-bit y 12-bit. Esto se hace a nivel de software, configurando la resolución deseada.

En la siguiente tabla puedes ver un resumen del rango de valores que obtendrás con cada resolución.

Resolución Min Max
8-bit 0 255
10-bit 0 1023
12-bit 0 4095

La finalidad de todo esto es conseguir una mejor precisión ya que vamos a dividir los 3,3V en 256, 1024 o 4096 trozos según la resolución configurada.

El microcontrolador SAMD21 tiene otra particularidad, incorpora un DAC de 10-bit. Esta funcionalidad la encontramos en el pin A0 que funciona tanto leyendo como escribiendo valores analógicos.

Pines PWM

La modulación por ancho de pulso es una técnica que nos permite escribir un valor analógico a través de los pines marcados para este fin.

En total contamos con 12 pines PWM, 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, A3 y A4.

Interrupciones

Las interrupciones con Arduino nos permiten parar la ejecución del programa y ejecutar algo concreto. Nos pueden servir, por ejemplo, para detectar la pulsación de un pulsador.

En Arduino MKRFOX1200 contamos con 8 interrupciones externas en los pines 0, 1, 4, 5, 6, 7, 8, A1 y A2.

Bus SPI

El bus de interfaz de periféricos serie o bus SPI (del inglés Serial Peripheral Interface) es un estándar de comunicaciones. Su utilidad es la comunicación con uno o más dispositivos en distancias cortas de una forma rápida.

También se utiliza para comunicarse entre dos microcontroladores.

Siempre que se utilice este tipo de comunicación tendremos un maestro  y unos esclavos. El maestro es el encargado de controlar los dispositivos esclavos. En Arduino MKRFOX1200 los pines que se utilizan son el 8 (MOSI), 9 (SCK) y 10 (MISO).

  • MOSI (Master Out Slave In): es la línea de comunicación por donde el maestro envía la información a los periféricos.
  • MISO (Master In Slave Out): es la línea de comunicación por donde el esclavo envía la información al maestro.
  • SCK (Serial Clock): es una señal de reloj generada por el maestro para sincronizar todas las comunicaciones.

Bus I2C

Otro bus de comunicación que prácticamente sirve para lo mismo que el bus SPI. La diferencia es que en este caso sólo se utilizan dos pines para la comunicación a través el I2C. En Arduino MKRFOX1200 se utilizan los pines 11 (SDA) y 12 (SCL).

  • SDA (Serial Data): es por donde se transmiten los datos en serie.
  • SCL (Serial Clock): es por donde se transmite la señal de reloj para sincronizar todas las comunicaciones.

UART

El Transmisor-Receptor Asíncrono Universal o UART (del inglés Universal Asynchronous Receiver-Transmitter) es el encargado de gestionar y controlar la comunicación serie.

Se utiliza para comunicar el ordenador con Arduino MKRFOX1200 para cargar el programa por ejemplo. Pero también en sentido contrario, de Arduino al ordenador para facilitar información y mostrarlo por el monitor serie.

Los pines utilizados para la UART son el 13 para RX (recepción de información) y el 14 para TX (transmisión de información).

En la medida de lo posible no conectar nada a estos dos pines.

AREF

El pin de voltaje de referencia AREF (del inglés Analog Reference) nos permite establecer el valor de referencia para la conversión analógico digital. Esto se hace a través de la programación.

Si no se utiliza este pin, Arduino MKRFOX12000 utiliza la referencia interna por defecto, 3,3V. También podemos utilizar la referencia interna de 1,1V para mejorar la precisión o la externa. En este último caso debemos aplicar el voltaje de referencia a través del pin AREF sin exceder los 3,3V.

RESET

Como su propio nombre indica permite resetar la placa. Aunque tenemos un botón en la placa con esta funcionalidad, en ocasiones no tendremos acceso a dicho botón. En estos casos podemos utilizar este pin.

Si ponemos el pin RESET a 0V la placa se resetea, así de sencillo.

Pines de alimentación

Por último vamos a ver los 5 pines de alimentación 5V, VIN, VCC y GND.

  • El pin 5V nos suministra 5V siempre y cuando la placa esté alimentada a través del puerto USB o por el pin VIN que ahora veremos. Lo más importante es que sale tal cual es decir, no tiene ningún regulador de tensión. Si por el puerto USB estamos alimentando con 5,6V por este pin saldrán estos 5,6V.
  • VIN es un pin de alimentación y por lo tanto, una entrada. Es el único pin por el que podremos alimentar la placa en el rango de 5V a 6V. Cuando alimentamos por este pin, la placa tiene un sistema de protección que desconecta la fuente de alimentación a través del USB.
  • VCC nos suministra un voltaje de 3,3V a través de un regulador de voltaje. Da lo mismo si lo alimentamos con 5V a través del VIN o del USB, el regulador bajará la tensión a 3,3V. Sin embargo, si lo alimentamos con baterías o pilas el voltaje de este pin será el mismo que nos proporcionen estas baterías o pilas.
  • GND es la toma de tierra. Será la referencia de 0V de nuestro circuito.

Estas serían las características técnicas más importantes de Arduino MKRFOX1200. Ahora vamos a ver los componentes que vienen integrados dentro de la placa.

El circuito integrado de Arduino MKRFOX1200

Como ocurre con otras placas, todo lo que rodea a Arduino MKRFOX1200 está pensado para facilitarnos la programación del microcontrolador SAMD21 y el ATA8520. Ya hemos visto la disposición de los pines, pero en la placa también encontramos otros componentes.

Vamos ver que son cada uno de ellos.

placa arduino mkrfox1200

Conector de batería

Una característica de las placas MKR de Arduino es que vienen con diferentes conectores para pilas y/o baterías. Arduino MKRFOX1200 tiene unos terminales o clemas con tornillos para conectar dos pilas. Arduino recomienda no superar los 3V a través de estos conectores ya que podría dañar la placa.

arduino mkrfox1200 conectores

Recomiendan alimentar la placa con dos pilas AA o AAA de 1,5V en serie. Esto nos daría exactamente 3V. Esta solución resulta bastante sencilla, solo tienes que comprar un portapilas que viene a costar menos de 2€.

portapilas

Mucho ojo con las baterías Li-Poly de 3,7V ya que no es recomendable utilizar este tipo de baterías para alimentar Arduino MKRFOX1200.

Antena

Cuando compras un Arduino MKRFOX1200 viene incluida una antena GSM. Esta antena se conecta a la placa a través de un conector UFL. Puedes cambiar la antena por una más potente siempre y cuando trabaje en el rango de frecuencias de SigFox (868 Mhz).

arduino mkrfox1200 antena

Mucho ojo a la hora de situar la antena. No pegues la antena a una superficie metálica ya que esto podría producir interferencias.

LED integrado y LED de alimentación

Casi todas las placas de Arduino, por no decir todas, vienen con un LED integrado. Arduino MKRFOX1200 no iba ser menos e incorpora dos LEDs.

El LED integrado dentro de la placa nos sirve para dos cosas. La primera es para hacer el primer programa típico en programación de electrónica, el “Hola Mundo” que consiste en hacer parpadear el LED.

Este LED también lo utiliza la librería de SigFox en modo debug. Cuando está en este modo y empieza a transmitir, parpadea.

Por otro lado tenemos un LED de alimentación que nos informa que la placa está siendo alimentada a través del puerto USB o a través del pin VIN. Sólo en estos casos y de forma automática, el LED naranja se ilumina.

arduino mkrfox1200 leds

Si se alimenta a través de las pilas no se enciende este LED para ahorrar energía.

Botón RESET

Como hemos visto anteriormente con los pines, también hay un botón que nos permite hacer un RESET de la placa. Esta acción lo único que hace es resetear la ejecución del programa es decir, empezar desde cero en este orden: declaración de variables, función setup() y función loop().

Puerto USB

El puerto USB utiliza el tipo de conector USB Micro B y tiene dos cometidos.

Por un lado alimentar a la placa con un valor de 5V. Sólo es recomendable alimentar así a la placa cuando estamos programando. No hay que olvidar que esta placa trabaja con 3V y si lo alimentamos con 5V los 2V que sobran se desaprovechan.

El otro uso es poder comunicarse entre el ordenador y Arduino MKRFOX1200 en las dos direcciones. Se utiliza para cargar los programas o para enviar información al ordenador desde la placa.

Con esto ya tenemos una perspectiva general de lo que nos aporta esta placa así que vamos a pasar a la acción y vamos a configurar el entorno de desarrollo de Arduino para empezar a programar Arduino MKRFOX1200.

Configuración IDE de Arduino

Vamos a empezar con la configuración del IDE de Arduino. Es bastante sencillo y más o menos es el mismo proceso que con otras placas como el Arduino MKR1000.

Sigue los siguientes pasos.

#1 Añadir compatibilidad con microcontroladores Atmel SAMD Core

Este paso te lo puedes saltar si ya has configurado alguna placa de la serie MKR.

Abre la opción del menú Herramientas>Placa>Gestor de tajetas…

ide arduino gestor tarjetas

Esto abrirá una nueva ventana donde tienes que hacer una búsqueda de MKRFOX1200. Instala el driver Arduino SAMD boards haciendo click en instalar.

gestor tarjetas samd boards

Si ahora vas a la opción del menú Herramientas>Placa verás como han aparecido todas las placas compatibles con el microcontrolador SAMD.

seleccionar placa arduino mkrfox1200

#2 Probando la placa

Como ya te he dicho a lo largo de este artículo, vamos a probar la placa con el “Hola Mundo” de la electrónica, el Blink.

Abre el ejemplo que se encuentra en Archivo>Ejemplos>Basics>Blink

ejemplo blink arduino mkrfox1200

Asegúrate que tienes seleccionada la placa Arduino MKRFOX1200 y el puerto donde lo tienes conectado. Si le das a subir a la placa verás como el LED verde empieza a parpadear.

Y con estos sencillos pasos ya podríamos trabajar como si fuera cualquier Arduino. Sin embargo, lo interesante de esta placa viene ahora, cuando configuremos el módulo de SigFox.

Configuración Arduino MKRFOX1200 con SigFox

Antes de empezar con la configuración debemos tener claros dos conceptos que van ligados a cualquier dispositivo que se conecta a SigFox: el ID y el PAC.

Cada dispositivo que se conecte a Sigfox tiene un identificador único llamado ID (del inglés Indifier). Es cómo si fuera su carnet de identidad e identifica a cada dispositivo conectado a la red SigFox de forma única. Este ID no se repite en ningún otro dispositivo.

Por otro lado tenemos el Código de Autorización de Portabilidad o PAC (del inblés Porting Authorization Code). Este código está asociado a la propiedad del dispositivo y sólo el dueño o propietario de ese dispositivo lo conoce.

Se puede entender como algo temporal que nos permite visualizar y gestionar un dispositivo. Sirve para que nadie, salvo la persona que conoce el código PAC, pueda añadir ese dispositivo a un grupo y tomar el control del mismo.

Para registrar nuestro Arduino MKRFOX1200 se requiere de los dos datos: ID y PAC. Por lo tanto, necesitamos de esta información pero ¿de dónde la sacamos? Lo podemos extraer de la propia memoria del módulo de ATA8520.

Programa para acceder al ID y PAC de Arduino MKRFOX1200

El programa es muy sencillo pero antes, tenemos que añadir una librería al IDE de Arduino, la librería SigFox. Esto nos va a facilitar mucho la vida de aquí en adelante.

Sigue los siguientes pasos para obtener el ID y el PAC de tu Ardino MKRFOX1200.

#1 Instalación de la librería Sigfox para Arduino

Abre el Gestor de librerías que está en la opción del menú del IDE de Arduino en Programa>Incluir Librerías>Gestionar Librerías… Busca por la palabra SigFox e instala la librería Arduino SigFox for MKRFOX1200.

libreria arduino sigfox mkrfox1200

#2 Cargar el siguiente programa

Como ya te he comentado, la pareja ID-PAC es necesaria para registrar nuestro Arduino MKRFOX1200 en la plataforma SigFox. Para ello vamos a cargar el siguiente código.

Abre el monitor serie y obtendrás algo parecido a esto.

id pac sigfox

Copia estos datos porque nos harán falta a la hora de registrar Arduino MKRFOX1200 en la plataforma SigFox.

Registrando Arduino MKRFOX1200 en Sigfox

En esta parte lo que vamos a hacer es activar y dar de alta nuestra placa Arduino MKRFOX1200 en la plataforma SigFox. Esto nos permitirá transmitir datos para posteriormente leerlos.

SigFox y Arduino llegaron a un acuerdo que incluye una suscripción por 2 años a la plataforma SigFox al comprar un Arduino MKRFOX1200. Esta suscripción empezará a contar a partir de la activación en su plataforma.

Así que si todavía no estas seguro o no tienes claro que vas a hacer, piénsalo antes de activarlo 🙂

Accede a la sección activación del backend de SigFox. Es esta web aparecen todas las empresas que tienen algún kit o placa compatible con Sigfox. Entra dentro de Arduino.

backend Sigfox

En la siguiente pantalla tienes que seleccionar el país donde va a estar la placa.

backend Sigfox

Luego te pedirá que escribas el ID y el PAC del dispositivo. Debes copiar y pegar lo que hemos obtenido en el monitor serie en el paso anterior.

backend Sigfox

Por último te pedirá que des tus datos para registrarte dentro de la plataforma si no lo has hecho antes. Una vez que te valides asignará el dispositivo a tu usuario y aparecerás dentro del panel de control en la opción del menú ASSOCIATED DEVICE.

backend sigfox

Con esto ya podríamos empezar a crear nuestro primero proyecto del IoT con SigFox. Pero antes vamos a dar un repaso rápido por la plataforma SigFox.

Primeros pasos con SigFox

Cuando accedes a la plataforma SigFox, tienes acceso a tres menús. Vamos a ir viendo cada uno de ellos.

sigfox plataforma

El primer menú tiene las opciones para salir, ayuda, eventos de la red e información sobre tu perfil. Es el típico menú para gestionar el usuario.

En el segundo menú tenemos todo lo relativo a la gestión de grupos, usuarios y dispositivos.

Por último, el tercer menú irá variando según la opción que hayamos elegido en el menú 2. Vamos a ir viendo las opciones más importantes de estos dos últimos menús.

Opción GROUP

Los grupos nos permiten gestionar los permisos de acceso y visualización a dispositivos. Por ejemplo, podemos tener dos grupos donde estemos monitorizando dos fábricas diferentes. Al grupo 1 de la fábrica A asignaremos los usuarios de esa fábrica. Al grupo 2 de la fábrica B asignaremos a los usuarios de la esa fábrica.

Los usuarios del grupo 1 no podrán ver los dispositivos del grupo 2 y los usuarios del grupo 2 no podrán ver los dispositivos del grupo 1.

Si entras en la opción verás el listado de grupos. De momento no se pueden gestionar los grupos desde la plataforma es decir, cambiar el nombre o unir grupos. Tampoco dejan claro como asignar el nombre al dar de alta a un dispositivo.

sigfox plataforma

Opción USER

En esta opción del menú gestionaremos los usuarios. Por defecto, cuando nos hemos dado de alta y hemos activado un nuevo dispositivo como un Arduino MKRFOX1200, la plataforma ha creado un grupo al que asignó el dispositivo.

Además, tu como administrador perteneces a ese grupo y a todos los que vayas creando. Esto significa que tienes acceso a todos los dispositivos. En el listado puedes ver todos los usuarios con los grupos a los que pertenece.

sigfox plataforma

También puedes crear un nuevo usuario al que asignar permisos sobre un grupo.

sigfox plataforma

Descarga la guía del ESP-01

Tutorial paso a paso para configurar este módulo

El ESP-01 es el módulo más famoso y económico que lleva integrado un ESP8266. Descarga la guía completa paso a paso en PDF.

Opción DEVICE TYPE

Un DEVICE TYPE (en español sería tipo de dispositivo) pertenece siempre a un grupo. Sirve para agrupar a todos los dispositivos de un tipo. Pongamos un ejemplo, tienes 10 Arduino MKRFOX1200 midiendo la radiación UV, la temperatura y la presión atmosférica.

Todos estos dispositivos pertenecen a un mismo DEVICE TYPE. Cuando accedes ves un listado de los DEVICE TYPE que tienes. Sólo verás aquellos que tengas permiso para ver.

En mi caso tengo 3. El primero es el que acabo de dar de alta.

sigfox plataforma

Desde esta pantalla podemos hacer varias cosas pero lo más importante es que podemos editar el DEVICE TYPE. Solo tienes que hacer click sobre uno de los elementos de la lista y saldrá un menú contextual. La opción que nos interesa ahora mismo es la de edit.

sigfox plataforma

Ojo, si haces click tanto en el campo Group como en el Name te llevará al grupo al que pertenece o a la información del DEVICE TYPE sin poder modificar. Sólo haciendo click fuera de esos dos campos sale el menú contextual.

sigfox plataforma

Editando un DEVICE TYPE

Cuando seleccionas edit se abre un formulario donde puedes modificar los datos del DEVICE TYPE. Por ahora nos centraremos en la primera parte, Device type information que es la información del tipo de dispositivo donde tenemos 5 campos a rellenar.

sigfox plataforma

  • Name: es el nombre que queremos dar a este DEVICE TYPE. Por ejemplo yo he puesto sensor de temperatura porque voy a medir la temperatura con este dispositivo.
  • Description: una breve descripción sobre lo que hace este dispositivo.
  • Keep-alive (in minutes): un keep alive es un mensaje que se envía al dispositivo para saber si está operativo. SigFox nos permite enviar cada cierto intervalo de tiempo un mensaje de este tipo para saber su estado. Cómo mínimo podemos enviarlo cada 30 minutos.
  • Subscription automatic renewal: si marcamos esta opción automáticamente todos los dispositivos que pertenezcan a este tipo de dispositivo renovarán su suscripción a SigFox. En realidad, todavía no sabemos qué sucederá con los Arduino MKRFOX1200 ya que esta placa ha salido este año (2017) y no ha dado tiempo a que ningún dispositivo caduque.
  • Alert email: poniendo nuestro email en este campo, SigFox nos notificará si ha fallado alguna de las llamadas a las callbacks que tengamos configuradas. Un poco más adelante veremos qué es esto de las callbacks.

Una vez completado ya podemos dar a Ok y los datos se guardarán. El resto de campo por ahora no son importantes.

Las otras opciones del submenú nos permiten ver información relativa a este DEVICE TYPE. Vamos a dar un repaso rápido por las más importantes.

Information

sigfox plataforma

Muestra un resumen de la información del DEVICE TYPE.

Location

sigfox plataforma

Muestra la localización del dispositivo siempre y cuando hayamos definido estos datos en el propio dispositivo. De momento, la geolocalización a través de triangulación con SigFox no está terminada. Puedes localizar un dispositivo en un rango de decenas de kilómetros.

Associated Devices

sigfox plataforma

Muestra todos los dispositivos vinculados al DEVICE TYPE. Recuerda que puede haber más de uno.

Statistics

sigfox plataforma

Muestra las estadísticas del dispositivo, mensajes transmitidos, bytes transmitidos y la relación señal ruido o SNR (del inglés Signal Noise Relation).

Callbacks

sigfox plataforma

Esta es una de las configuraciones más importantes de un DEVICE TYPE ya que nos permite añadir, modificar o eliminar Callbacks.

Una callback se puede traducir como una llamada de vuelta, devolución de llamada o una retrollamada.

Sirve para enviar todos los datos que recibimos desde este DEVICE TYPE a otro sitio. El caso típico es poder llamar a alguna plataforma del IoT. Aunque podemos ver los datos en la propia plataforma de SigFox, la verdad es que no es muy amigable.

Si por ejemplo queremos hacer una gráfica de las temperaturas, en SigFox no podemos hacer esto. Por eso existen las Callbacks para reenviar todos esos datos a una plataforma que permita gestionar esa información y dar un aspecto visual más atractivo.

Luego veremos un ejemplo de todo esto.

Por ahora esto es lo que necesitas saber para empezar con Arduino MKRFOX1200 y SigFox. Ahora vamos a pasar a ver los dispositivos o DEVICE.

Option DEVICE

Cuando accedes a esta opción aparece un listado de todos los dispositivos a los que tienes acceso. Este sería mi listado donde aparecen 3 dispositivos.

sigfox dispositivos

Seguramente tu listado no tenga el mismo aspecto que el mío ya que yo he modificado las columnas que quiero mostrar. Eso lo puedes hacer haciendo click en la rueda y seleccionando los campos que quieres mostrar o ocultar.

sigfox dispositivos

Podemos entrar a cada uno de los dispositivos y ver su información haciendo click en el Id del dispositivo. Esto nos muestra una nueva pantalla con más opciones en el submenú. Vamos a ver las más importantes.

Information

sigfox dispositivos

Nos muestra un resumen del dispositivo.

Location

sigfox dispositivos

Nos muestra en un mapa la ubicación aproximada del dispositivo. No tiene mucha precisión como puedes comprobar. Además te muestra una leyenda de colores de la cobertura en la zona donde se encuentra el dispositivo.

Messages

sigfox dispositivos

Esta es una de las opciones donde más vas a trabajar. Muestra un listado de todos los mensajes enviados desde el dispositivo a la plataforma del IoT de SigFox. Puedes ver qué se ha enviado y cuando se ha enviado.

Y con esto ya tendríamos toda la información para empezar a transmitir datos. Abre el IDE de Arduino que vamos a empezar a programar.

Enviando la temperatura con Arduino MKRFOX1200

La idea es utilizar el sensor de temperatura que viene integrado dentro del módulo de SigFox ATA8520 para obtener la temperatura y enviarla a la plataforma SigFox.

También vamos a configurar una llamada Callback a la API Rest de ThingSpeak para que vaya almacenando los datos y así poder consultarlos de una forma muy sencilla.

El esquema general de la aplicación sería el siguiente.

esquema arduino mkrfox1200 thingspeak

Lo primero que haremos será obtener la temperatura. Nos conectaremos a SigFox y le enviaremos un mensaje cada 15 minutos. El máximo permitido son 140 mensajes al día que equivalen a 1 cada 10 minutos aproximadamente.

Dentro de SigFox vamos a configurar una Callback para que cada vez que reciba un mensaje lo envíe de forma automática a ThingSpeak, la plataforma en la nube para el IoT de MathWorks. Esta información la podremos visualizar en cualquier dispositivo en tiempo real.

Arduino MKRFOX1200 y el sensor de temperatura interno

Abre el IDE de Arduino y crea un nuevo programa o sketch. Lo puedes llamar como quieras. Vamos a empezar leyendo la temperatura del sensor del módulo SigFox.

Lo primero es añadir la librería SigFox para conectarnos a su red pero también para poder obtener la temperatura.

En la función setup() configuramos el monitor serie para que nos muestre información.

Luego hacemos una prueba de conexión iniciando el módulo SigFox con la función SigFox.begin(). No tiene sentido seguir si no tenemos el módulo disponible. Por último en la función setup() apagamos el módulo de SigFox y activamos el modo debug.

Este modo nos permitirá comprobar cuando se transmite un mensaje porque el LED que incorpora la placa (el LED verde) empieza a parpadear. Además muestra información a través del monitor serie.

En la función loop() es donde vamos a implementar la lógica de nuestro programa. Comenzamos iniciando el módulo. Sólo si se inicia seremos capaces de leer la temperatura.

Es importante hacer una espera de 100ms para que de tiempo a que el módulo de SigFox se inicie. Después de esto ya podemos leer la temperatura y lo hacemos con la función SiFox.internalTemperature().

Convertimos la temperatura a un entero. La gestión de los datos es muy importante en SigFox ya que con cada mensaje sólo podemos transmitir 12 bytes y esto reduce mucho el tipo de datos que podemos enviar.

En principio con un int es más que suficiente. Podríamos utilizar un dato de tipo byte siempre y cuando nos respete el signo. Luego veremos que esto es posible con un tipo de dato de 8-bit con signo.

Ya que tenemos la temperatura la mostramos por el monitor serie. A continuación apagamos el módulo con la función SigFox.end(). Otra de las cosas importantes ya que la gestión de energía en dispostivos del IoT es crucial.

Por último hacemos una pausa de 15 minutos que equivalen a 900.000 milisegundos. Lo más conveniente en estos casos no es hacer un delay de tanto tiempo. Deberíamos poner la placa en estado dormida (sleep). Pero esto lo dejaré para otro tutorial.

Si cargas este código a tu placa y abres el monitor serie obtendrás algo parecido a esto.

temperatura interna mkrfox1200

Preparando el mensaje para SigFox

SigFox es muy estricto cuando hablamos de datos. En este sentido sólo admite mensajes con un máximo de 12 bytes. Ahora te estarás preguntando ¿cómo calculo cuánto ocupa un mensajes?

Es relativamente sencillo si conocemos los tipos de datos de Arduino y cuanto ocupan cada uno de ellos. Por ejemplo un tipo de dato entero int ocupa 16-bit es decir 2 bytes. Por eso es muy importante ajustarnos al rango del valor que vamos a leer de los sensores.

Si queremos enviar la temperatura debemos ser conscientes del rango en el que nos vamos a mover. Con un int podemos leer -32.768 a 32.767. A no ser que estemos en el infierno, nunca tendremos una temperatura de 32.767ºC.

Nuestro rango se podría mover entre unos -20ºC y unos 50ºC más o menos. Así abarcamos mucha parte del planeta. Pero claro, no existe un tipo de dato con ese rango y el más cercano que conocemos es el byte que mide de 0 a 255.

Sin embargo, el byte no abarca los números negativos por ejemplo. Hay otros tipos de datos que se utilizan en C y C++ que abarcan varios rangos. No voy a profundizar en todos ellos pero si que tienes que conocer los siguientes:

  • int8_t: es un entero de 8-bit con signo. Es igual que un byte con signo.
  • int16_t: entero de 16-bit con signo. Es igual que un int.
  • int32_t: entero de 32-bit con signo. Es igual que un long.

Podemos decir que son abreviaturas.

El que nos interesa a nosotros es el int_8_t ya que nos permite leer valores de entre -128 y 127. Este se ajusta mucho más y lo que es más importante, ocupa bastante menos que un int, en concreto la mitad.

Ahora sí, ya estamos listos para enviar el mensaje a SigFox.

Enviando el mensaje a SigFox desde Arduino MKRFOX1200

Vale, ya tenemos todo claro con respecto a los mensajes. Ahora voy a escribir el código para empezar a enviar mensajes a SigFox.

El nuevo código lo he escrito después de leer la temperatura en la función loop().

Comenzamos haciendo una purga o limpieza de las interrupciones que puedan haber pendientes. Esto lo hacemos con la función SigFox.status().

Para comenzar el proceso para transmitir el mensajes utilizamos la función SigFox.beginPacket(). Esto abre el canal de comunicación con SigFox. Lo siguiente es escribir el mensajes con la función SigFox.write() a la que pasamos como argumento la variable donde hemos guardado la temperatura.

Para finalizar la transacción llamamos a la función SigFox.endPacket(). Esto completa el proceso de enviar el mensaje a SigFox. Esta función devuelve un entero. Si el resultado es 1 quiere decir que el mensaje se ha enviado correctamente. Si es un 0 quiere decir que ha habido algún tipo de problema.

Y con esto ya estaríamos transmitiendo los datos a SigFox. Si cargas el código en la placa y luego accedes a la plataforma SigFox verás como empiezan a aparecer los datos.

enviar temperatura a Sigfox

Asegúrate que tienes conectada la antena a la placa. Si no lo haces no conseguirá conectarse con SigFox.

Enviando los datos a ThingSpeak

Lo único que nos quedaría hacer es enviar los datos a ThinSpeak. No es algo nuevo en este blog y en el artículo donde hablaba sobre construir un sistema para medir la radiación UV con Arduino MKRFOX1200 tienes un extenso tutorial.

Debes crear un canal con un único campo que sea temperatura.

canal thingspeak

En este canal mostraremos la información de temperatura. Ahora sólo nos falta ir a la plataforma de SigFox y configurar el Callback.

Configurar Callback en SigFox

Una Callback es una rellamada a otro servicio. Digamos que la plataforma de SigFox hace de puente para poder comunicarnos con otra plataforma.

Para hacer esta llamada tenemos que tener claro los siguientes conceptos:

  • URL del servicio donde vamos a transmitir los datos
  • Qué tipos de datos vamos a transmitir
  • Cómo se transmiten esos datos

En el ejemplo que estamos viendo es relativamente sencillo, sólo tenemos un dato la temperatura. Pero cuando tenemos más información la cosa se complica.

Entra en la plataforma de SigFox y accede a DEVICE TYPE. En la lista de tipos de dispositivos selecciona editar el que estás utilizando para transmitir la temperatura.

sigfox plataforma

Accede en el menú de la izquierda a Callbacks. En principio no debería haber ninguna. Vamos a crear la primera pulsando en new.

callback sigfox

Esto nos abre una nueva ventana donde nos permite seleccionar entre una serie de servicios como AWS, Azure y el que nos interesa a nosotros, Custom callback. Con esta opción haremos una Callback personalizada.

callback sigfox

Ahora sólo nos queda configurar la Callback. Esto lo hacemos en la siguiente pantalla.

callback sigfox

De momento para lo que nosotros necesitamos debemos dejar los campos como vienen por defecto. Pero es interesante conocer que función desempeñan cada uno de ellos.

  • Type: hace referencia al tipo de dato y cómo vamos a comunicarnos
    • DATA/UPLINK: significa que los datos que recibimos desde el dispositivo (en nuestro caso Arduino MKRFOX1200) los enviamos a la plataforma configurada.
    • DATA/BDIR: igual que el caso anterior pero en este caso vamos a esperar una respuesta de la plataforma que podremos transmitir al dispositivo. BDIR significa bidireccional.
    • ERROR: envía información sobre errores en la comunicación
    • SERVICE: son servicios adicionales
      • STATUS: envía información de estado como temperatura del dispositivo y batería.
      • GEOLOC: para geolocalizar el dispositivo sólo si este servicio está activado.
      • ACKNOWLEDGE: es un acuse de recibo es decir, la confirmación de que el mensaje ha llegado correctamente.
  • Channel: sirve para elegir el tipo de canal que vamos a utilizar
    • URL: enviamos lo datos a través de una URL.
    • BATCH_URL: igual que el anterior pero con un periodo de tiempo acotado de 1 segundo.
    • EMAIL: envía los datos a un correo electrónico.
  • Custom payload config: es el patrón del mensaje que estamos transmitiendo. Ahora lo veremos con más detenimiento pero básicamente estamos diciendo cómo se reciben los datos y en qué orden.
  • Url pattern: define la llamada HTTP que queremos hacer a la plataforma a la que vamos a enviar la información. Un ejemplo https://programarfacil.com/sigfox?id=1&temperatura=16&bateria=87
  • Use HTTP Method: es el método HTTP que vamos a usar. Se pueden transmitir los datos por el método GET, POST o PUT. Esto depende del servidor a donde se envíen los datos.

Vamos a centrarnos en el Custom payload config que no es más que el formato de mensaje que estamos recibiendo del dispositivo. Tienes una ayuda excelente en el icono con el signo de interrogación.

Descarga la guía del ESP-01

Tutorial paso a paso para configurar este módulo

El ESP-01 es el módulo más famoso y económico que lleva integrado un ESP8266. Descarga la guía completa paso a paso en PDF.

Configuración del mensaje personalizado de SigFox

He decidido dedicarle un poco de tiempo a esta parte ya que es importante para que todo funcione correctamente. Desde nuestro Arduino MKRFOX1200 vamos a enviar una trama de datos en binario hacia SigFox.

Imagínate que queremos enviar la temperatura. Hemos medido y obtenemos 20 grados. Esto se traduce en binario a 10100. Como hemos declarado en el código una variable de 8-bit para la temperatura el resultado sería 00010100 (rellenamos ceros a la izquierda).

Esto es lo que va a recibir SigFox. En el mensaje personalizado tenemos que configurar esta información. Vamos a recibir un dato de 8-bit en la posición 0. Además tenemos que dar un nombre para luego poder referenciarlo en la llamada HTTP.

Esto lo hacemos siguiendo una estructura definida por la plataforma SigFox

payload Sigfox

  1. nombre: debemos dar un nombre a los datos. Podemos utilizar letras, números y los símbolos – y _
  2. byte_index: indica a partir de que byte encontramos este dato. Si es el primero lo encontraríamos en la posición 0. Mucho ojo que estamos hablando de bytes es decir 8-bit.
  3. type_def: es el tipo de dato que estamos enviando. Es un entero con signo (int), un entero sin signo (uint), un carácter (char), un número en coma flotante (float) o un booleano (bool).
  4. bits: es la longitud del tipo de dato en bits. Esto también es importante ya que si conocemos donde empieza y la longitud, sabemos donde termina.

Vamos a ver cómo sería el mensaje personalizado para la temperatura.

temperatura:0:int:8

  1. nombre: le he dado el nombre de temperatura.
  2. byte_index: comienza en el byte 0
  3. type_def: es un tipo de dato int
  4. bits: es un entero de 8-bits

Es bastante sencillo cuando sólo tenemos un dato pero ¿qué pasa si tenemos dos o más parámetros? Vamos a verlo con un ejemplo. Quiero transmitir la temperatura, la humedad y el consumo de la batería en mAh (miliamperios hora).

Defino en el código 3 variables para enviar estos datos:

Lo primero que tientes que hacer es sumar el número de bytes que ocupan todos estos datos.

Tipo de dato bits
Total 48
int8_t 8
uint8_t 8
float 32

El total son 48 bits que es menor que el máximo permitido por SigFox 12 bytes que equivalen a 96 bits así que estamos dentro del rango.

Para escribir el mensaje personalizado tenemos que ir uno por uno con cada dato

Dato mensaje
int8_t temperatura:0:int:8
uint8_t humedad:1:uint:8
float bateria:2:float:32

Por lo tanto, dentro del campo del formulario Custom payload config tenemos que poner esta información separando cada dato con un espacio. El resultado sería el siguiente:

temperatura:0:int:8 humedad:1:uint:8 bateria:2:float:32

Llamada HTTP  a ThingSpeak

Ahora sólo nos queda montar la llamada a la API de ThingSpeak. Todas las llamadas siguen el mismo patrón, lo único que se diferencia es en el identificador del canal, la Write API Key y los datos que enviamos.

Puedes ver un ejemplo de la llamada que tienes que hacer en tu canal si accedes al canal en ThingSpeak y vas a la opción API Keys.

api keys thingspeak

La estructura de la URL es la siguiente.

url thingspeak actualizacion

La primera parte es igual para todos, es la URL a la que tenemos que llamar para actualizar los datos.

La segunda parte es la clave de la API para poder actualizar los datos. Para cada usuario y canal existe una clave confidencial. No la compartas con nadie salvo que des permiso.

La tercera parte son los campos. Aunque en la configuración del canal hayamos puesto temperatura, en la URL hacemos referencia al campo que tiene asignado de field1 al field8.

Con esta información ya podemos montar nuestra llamada pero ¿cómo sabe SigFox que valor tiene que poner a cada campo? Esto lo hacemos gracias al nombre que hemos puesto en el mensaje personalizado.

El mensaje personalizado para el ejercicio que estamos viendo era el siguiente:

temperatura:0:int:8

Por lo tanto tenemos que hacer referencia al nombre de ese campo, temperatura. Al final es como si fuera una variable. La llamada final a la API de ThingSpeak quedaría de la siguiente manera.

En vez de poner el valor en el campo tenemos que poner la palabra cutomData seguido del símbolo # y luego el nombre que hemos dado a ese dato en el mensaje personalizado.

Ahora si, vamos a montar todo en el formulario de la Callback.

Configuración final del Callback

Ahora rellenamos el formulario con toda la información que hemos visto. Mi formulario quedaría de la siguiente manera.

callback sigfox

Haces click en Ok y ya estaría preparado para empezar a transmitir los datos que llegan a SigFox a ThingSpeak.

Resultado ejemplo Arduino MKRFOX1200 SigFox y ThingSpeak

Para ver los mensajes en la plataforma de SigFox tienes que entrar, ir a la opción DEVICE del menú y seleccionar el dispositivo haciendo click sobre el ID.

mensajes sigfox

Luego entra en la opción del menú de la izquierda en MESSAGES y accederás a todos los mensajes recibidos en la plataforma de SigFox de ese dispositivo. Si pinchas en la flecha verde verás un resumen de la llamada Callback asociada a este tipo de dispositivo.

mensajes sigfox

El la propia llamada HTTP puedes ver que está enviando el valor 16. Ha sustituido lo que habíamos puesto antes {cutomData#temparatura} por el valor de 16.

Si abres el canal de ThingSpeak verás que el último valor coincide con el valor que has obtenido en la plataforma de SigFox.

thingspeak gráfica

Por último, ponle unas pilas y te lo llevas a un lugar recóndito que quieras medir la temperatura y lo pruebas. Verás como te deja sorprendido.

Resumen Arduino MKRFOX1200 SigFox y ThingSpeak tutorial paso a paso

Como ya te tengo acostumbrado, he realizado un tutorial bastante extenso sobre la tecnología SigFox aplicada a un dispositivo del IoT con Arduino MKRFOX1200. Pero esto es sólo el principio.

Con SigFox podemos hacer muchas más cosas teniendo en cuenta siempre el coste, el consumo y la cobertura. No puedo asegurar que sea la mejor de todas las tecnologías que hay en la actualidad. Sin embargo, es la única a la que tenemos acceso los Makers de una forma sencilla y económica.

Por 35€ tenemos una placa con un módulo SigFox y una suscripción de 2 años es decir, la posibilidad de hacer proyectos reales del IoT. Poder probar nuestras ideas y prototipos y llevar un punto más allá nuestros proyectos.

¿Tienes algún proyecto en mente con Arduino MKRFOX1200?

¿Conocías las redes LPWAN como SigFox?¿Ves utilidad este tipo de redes?

Cualquier sugerencia la puedes dejar abajo en los comentarios.

Referencias

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Enviar Whatsapp
Hola 👋
¿En qué podemos ayudarte?