Arduino MKRFOX1200
La apuesta de Arduino por sigfox se llama Arduino MKRFOX1200: https://store.arduino.cc/arduino-mkrfox1200 que se presentó en el Arduino Day de 2017.
Esta placa lleva un microcontrolador Atmel SAMD21 de 32 bits como el resto de la familia MKR de Arduino y un módulo Sigfox ATA8520 también de Atmel.
Microcontrolador: http://www.atmel.com/Images/Atmel-42181-SAM-D21_Summary.pdf
Módulo sgifox: http://www.atmel.com/Images/Atmel-9372-Smart-RF-ATA8520_Datasheet.pdf
Características técnicas:
Microcontroller | SAMD21 Cortex-M0+ 32bit low power ARM MCU |
Board Power Supply (USB/VIN) | 5V |
Supported Batteries | 2x AA or AAA |
Circuit Operating Voltage | 3.3V |
Digital I/O Pins | 8 |
PWM Pins | 12 (0, 1, 2, 3, 4, 5, 6, 7, 8, 10, A3 – or 18 -, A4 -or 19) |
UART | 1 |
SPI | 1 |
I2C | 1 |
Analog Input Pins | 7 (ADC 8/10/12 bit) |
Analog Output Pins | 1 (DAC 10 bit) |
External Interrupts | 8 (0, 1, 4, 5, 6, 7, 8, A1 -or 16-, A2 – or 17) |
DC Current per I/O Pin | 7 mA |
Flash Memory | 256 KB |
SRAM | 32 KB |
EEPROM | no |
Clock Speed | 32.768 kHz (RTC), 48 MHz |
LED_BUILTIN | 6 |
Full-Speed USB Device and embedded Host | |
LED_BUILTIN | 6 |
Antenna power | 2dB |
Carrier frequency | 868 MHz |
IMPORTANTE: Los Arduinos con microcontrolador que integra interfaz USB como los leonardo o los SAMD21 usan Serial como el interfaz para comunicación USB y Serial1 es el puerto UART que disponen, que en el caso de los leonardo son los pines 0 y 1 y en el caso de los SAMD21 son los pines 13 y 14.
Esquematico de la placa: https://www.arduino.cc/en/uploads/Main/MKRFox1200-schematic.pdf
Es una placa perfecta para IoT para usar en una red celular y de bajo consumo. Ideal para proyectos donde hay movilidad. Al comprar este dispositivo obtienes una suscripción gratuita de dos años (con hasta 140 mensajes diarios) a Sigfox y acceso gratuito al servicio de geolocalización que permite hacer un seguimiento del HW sin un módulo GPS. El plan se activará automáticamente después de que se haya enviado el cuarto mensaje.
Covertura de sigfox: https://www.sigfox.com/en/coverage. La frecuencia de Sigfox es 868 MHz.
Pasado los dos años de subscripción, aunque a día de hoy no hay posibilidad de obtener una suscripción de sigfox para desarrolladores o makers, sigfox ha asegurado que se creará un plan de suscripción antes que caduquen las primeras suscripciones en abril de 2019.
La alimentación de esta placa puede ser a 5V mediante el USB o usando dos pilas AA o AAA a través de bornero, conmutando automáticamente entre las dos fuentes. Mediante el Vin también es posible alimentarlo a una fuente regulada de 5V.
La placa está diseñada para alimentarse a 3V a través del bornero, por lo tanto no es posible alimentarlo mediante una batería Li-Po o Li-Ion
Una de las principales características de esta placa es el bajo consumo, puede funcionar con dos pilas AA de 1.5V durante 6 meses con un uso normal.
El microntrolador SAMD21 se puede poner en modo sleep gracias a la librería Low Power https://github.com/arduino-libraries/ArduinoLowPower. En este caso es interesante el uso del bajo consumo que deja dormida la placa y en este modo no aparece el USB. Para despertarla hacer doble click en el botón de reset.
Al igual que el resto de Arduinos con MCU SAMD21 funciona a 3.3V y los pines no son tolerante a voltajes de 5V.
Primeros pasos con MKRFOX1200
Web oficial de Arduino MKRFOX1200:
- https://www.arduino.cc/en/Main.ArduinoBoardMKRFox1200
- https://store.arduino.cc/homepage/arduino-mkrfox1200
Getting started: https://www.arduino.cc/en/Guide/MKRFox1200
Getting started SigFox: http://makers.sigfox.com/getting-started/
Librería SigFox: https://www.arduino.cc/en/Reference/SigFox
Tutorial MUY bueno de Luis Del Valle: https://programarfacil.com/blog/arduino-blog/arduino-mkrfox1200-sigfox-lpwan/
Configuración Inicial MKRFOX1200
La placa MKRFOX1200 se programa con el IDE de Arduino, pero para poder hacerlo es necesario instalar el soporte para las placas con microcontrolador SAMD. Para ello hay que ir al gestor de placas e instalar “Arduino SAMD Boards (32-bits ARM Cortex-M0+)” o simplemente buscar MKRFOX en el buscador del gestor de tarjetas.
Luego seleccionar desde el menú Herramientas seleccionar la placa MKRFOX1200.
Para poder usar el MKRFOX1200 con la red de Sigfox es necesario registrarlo, para ello debe usarse el siguiente tutorial llamado primera configuración: https://www.arduino.cc/en/Tutorial/SigFoxFirstConfiguration
Para ejecutar el ejemplo FirstConfiguration, para ello habrá que instalar las librerias Arduino:
- Arduino Sigfox for MKRFox1200: https://github.com/arduino-libraries/SigFox
- Arduino Low Power: https://github.com/arduino-libraries/ArduinoLowPower
- RTCZero: https://github.com/arduino-libraries/RTCZero
Los datos de nuestro modem Sigfox para registrarlo son ID y PAC. Luego hay que registrarlo en la web: https://backend.sigfox.com/activate y seguir las instrucciones de la web que es muy sencilla:
- Poner placa y país, en España Cellnex es la empresa que tienes Sigfox.
- Crear una cuenta o sino entrar en la que tienes.
Una vez registrado tarda unos minutos en aparecer los datos y asignará el dispositivo a tu usuario y aparecerá dentro del panel de control en la opción del menú ASSOCIATED DEVICE.
Con esto ya podemos empezar a mandar datos al backend de Sigfox.
Manejo MKRFOX1200 y Sigfox
Para empezar a usar el Arduino MKRFOX1200 y Sigfox, al igual que con cualquier otro dispositivo o librería de Arduino, lo mejor es revisar los ejemplos que vienen al instalar el soporte para esta placa: https://github.com/arduino-libraries/SigFox/tree/master/examples
Para poder acceder a los ejemplos seguir: Archivo – Ejemplos – Arduino Sigfox for MKR1200
El primer ejemplo es FirstConfiguration que ya hemos visto: https://github.com/arduino-libraries/SigFox/blob/master/examples/FirstConfiguration/FirstConfiguration.ino
Después de registrar el MKRFOX1200, para probar el funcionamiento de la placa puede usarse el ejemplo Sigfox Event Trigger donde se manda un mensaje de alarma de dos fuentes diferntes conectadas los pines de interrupción 0 y 1: https://www.arduino.cc/en/Tutorial/SigFoxEventTrigger
Más información: https://www.arduino.cc/en/Tutorial/SigFoxEventTrigger
Podría usarse para conectar un sensor de puerta y uno de ventana y cada vez que se abra mande un mensaje. Luego para que mande un correo o SMS habrá que configurar el callback en el backend de Sigfox.
Otros ejemplo son:
- SendBoolean que muestra cómo mandar un dato binario, de forma que al mandar menos datos se necesita menos tiempo de transmisión y menor consumo: https://github.com/arduino-libraries/SigFox/blob/master/examples/SendBoolean/SendBoolean.ino
- WeatherMonitor que muestra como mandar datos de temperatura, humedad, presión y luz: https://github.com/arduino-libraries/SigFox/blob/master/examples/WeatherMonitor/WeatherMonitor.ino
- WeatherMonitorStream: https://github.com/arduino-libraries/SigFox/blob/master/examples/WeatherMonitorStream/WeatherMonitorStream.ino
Otros ejemplo de monitores de condiciones atmosféricas:
- https://create.arduino.cc/projecthub/antoine-de-chassey/mkrfox1200-weather-station-255543
- https://create.arduino.cc/projecthub/Arduino_Genuino/mkr-fox-1200-weather-monitor-6a94e2
Librería Sigfox
Arduino, además de ofrecernos un HW con Sigfox a buen precio, nos da una librería muy fácil de usar y más aun a quienes están acostumbrados a la programación de Arduino.
SigFox – Esta librería permite el uso de transceiver de Sigfox ATAB8520E en las placas Arduino MKRFOX1200.
Librería: https://www.arduino.cc/en/Reference/SigFox
- begin() – Inicializa el módulo Sigfox
- beginPacket() – Comienza el proceso de mandar un paquete
- write() – Manda datos binarios al backend de Sigfox
- print() – Manda caracteres al backend de Sigfox
- endPacket() – Finaliza el proceso de enviar paquetes iniciado con beginPacket()
- parsePacket() – Comprueba la presencia de un paquete Sigfox antes de leer.
- SigVersion() – Devuelve la versión de firmware del módulo
- ID() – Devuelve el Sigfox ID del módulo que es único
- PAC() – Devuelve el PAC del módulo, que es la clave secreta correspondiente al ID. El PAC no es transferible y debe regenerarse al cambiar de dueño el módulo.
- reset() – resetea el módulo de sigfox
- internalTemperature() – Devuelve la temperatura del sensor interno
- debug() – Habilita el debug y deshabilita las funciones de ahorro de energía.
- noDebug() – Deshabilita el debug
- available() – Devuelve el número de bytes disponibles para leer.
- read() – Lee los datos entrantes de Sigfox.
Callbacks
Un callback se puede traducir como una llamada de vuelta, devolución de llamada o una retrollamada. Es una de las configuraciones más importantes de un DEVICE TYPE ya que nos permite añadir, modificar o eliminar Callbacks. Los callbacks van asociados a los DEVICE TYPE y no a los DEVICES.
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. Si por ejemplo queremos hacer una gráfica de las temperaturas, en el backend de 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.
Sigfox hace que sea fácil recoger los datos enviados por los dispositivos del servicio en la nube mediante el uso de callbacks. Las callbacks son un servicio que permite a Sigfox enviar un evento a un servidor externo después de recibir el evento. Por ejemplo, un dispositivo podría enviar un mensaje Sigfox al ocurrir un evento (una ventana abierta), es posible recibir una notificación una vez que se haya producido este evento. Esta sería la idea de usar un callback. El servidor Sigfox transmitirá el mensaje a través de una solicitud POST / GET a su propio servidor o enviar un correo electrónico. Además de definir su propio servidor y sus datos, Sigfox también le permite transferir sus datos con de forma simplificada como AWS IoT y Microsoft Azure.
Para configurar un callback personalizado, debe estar el dispositivo y cuenta registrados y configurado un dispositivo con un tipo de dispositivo y grupo.
Navega a la pestaña ‘Tipo de dispositivo’ en la barra de navegación. Luego, busca el Tipo de dispositivo de tu dispositivo y haz clic en el botón de filtro. Seleccione el ‘Nombre’ del dispositivo dentro de la entrada de búsqueda. Lo llevarán a la página ‘Información’. Desde aquí puede ver todos los datos sobre el dispositivo que configuró. Ahora navegue a ‘callback’ en el lado izquierdo de la página. Si esta es la primera vez que configura una callback, la página debe estar vacía. Haga clic en el botón ‘Nuevo’ en la esquina superior derecha y se le mostrará una lista de los diferentes tipos de devoluciones de llamadas
Haga clic en el elemento ‘Callbacks personalizados’. Ahora tendrá una página similar a la siguiente, con varias opciones de configuración diferentes.
Los campos a rellenar son:
- Custom Payload Config. Este campo permite especificar cómo desea que Sigfox decodifique el mensaje de su dispositivo.
- Body: Este es el contenido principal del mensaje. Se puede especificar cualquier dato personalizado dentro de la carga útil. Puede ver todas las variables disponibles en la sección Sintaxis de URL.
Más información: http://makers.sigfox.com/getting-started/
Estas callbacks transfieren todos los datos recibidos desde los dispositivos asociados a este DEVICE TYPE a una infraestructura externa. Para obtener más información, consulte la documentación. Callback documentation: https://backend.sigfox.com/apidocs/callback
Callback para mandar un correo:
Callback para mandar los datos a una web/base de datos externa:
Esta es la llamada a la API: https://www.aprendiendoarduino.com/servicios/SMS/saveSMS.php?telefono=6359871xx&mensaje=alarm_bike_{device}_lat_ {lat}_long_{lng}&pin=xxxx