Arduino y LoRaWAN
Arduino MKR WAN 1300
MKR WAN 1300 es una placa potente que combina la funcionalidad de la conectividad MKR Zero y LoRa. Es la solución ideal para los fabricantes que desean diseñar proyectos de IoT con una mínima experiencia previa en redes que tengan un dispositivo de baja potencia.
La placa MKR WAN 1300 tiene comunicación inalámbrica unido a un diseño de la placa MKR Zero Board, es decir, que tendremos soporte para aplicaciones de 32 bits. La placa cuenta con 256KB de Memoria flash y 32KB SRAM. Puede funcionar con la energía de dos pilas de 1,5V y todo en un tamaño de 67,64 x 25mm. Al tener comunicación inalámbrica, el dispositivo al que se conecte tendrá opción de comunicarse a Internet.
El MKR WAN 1300 usar el módulo Murata CMWX1ZZABZ Lo-Ra module que lleva el transceiver Semtech SX1276:
- https://www.murata.com/products/lpwa/lora
- https://wireless.murata.com/eng/products/rf-modules-1/lpwa/type-abz.html
- Datasheet: https://wireless.murata.com/datasheet?/RFM/data/type_abz.pdf
Más información: https://store.arduino.cc/mkr-wan-1300
Buen artículo para sobre el MKR 1300: http://tinkerman.cat/arduino-mkr-wan-1300/
Moteino
Moteino es una plataforma de desarrollo compatible con Arduino inalámbrica de baja potencia basada en el popular chip ATmega328p utilizado en el Arduino-UNO, lo que lo hace 100% compatible con el IDE de Arduino (entorno de programación).
Para la programación, necesitará un adaptador FTDI externo para cargar los sketchs, con las ventajas de un menor costo y un tamaño más pequeño. La variante MoteinoUSB incluye el convertidor de serie USB.
Los Moteinos son compatibles y se pueden comunicar con cualquier otra plataforma Arduino o de desarrollo que utilice los populares transceptores HopeRF RFM69 o LoRa. Moteino también viene con un chip de memoria flash SPI opcional para programación inalámbrica o registro de datos.
Web Moteino: https://lowpowerlab.com/guide/moteino/
Moteino fue diseñado para ser una plataforma de desarrollo compacta, altamente personalizable y asequible, adecuada para IoT, domótica y proyectos inalámbricos de largo alcance. Estas son algunas de las características que distinguen a Moteino:
- diseño modular pequeño y ligero que se adapta a recintos minúsculos
- las configuraciones flexibles permiten el uso de varios transceptores inalámbricos
- potencia realmente ultra baja: con tan solo ~ 2uA alcanzables en el modo de suspensión profunda, los Moteinos permiten que los proyectos con batería, como los sensores inalámbricos de movimiento/entorno, funcionen durante años. El modo de suspensión de Watchdog está en ~ 6uA (activación periódica). El nuevo 8Mhz Moteino permite el modo de sueño 100nA más bajo posible
- Las radios sub-Ghz y LoRa producen un rango mucho más largo que las bandas de 2.4Ghz
- programable de forma inalámbrica: puede volver a flashearlo sin cables, cuando se implementa en ubicaciones difíciles (solo con radios RFM69)
- fácil de usar desde el familiar IDE Arduino, muchos ejemplos de código brindados para ayudarlo a comenzar
Pinout:
Los transceiver soportados por Moteino son:
Transceiver Datasheets
- http://www.hoperf.com/upload/rf/RFM69W-V1.3.pdf
- http://www.hoperf.com/upload/rf/RFM69HW-V1.3.pdf
- http://www.hoperf.com/upload/rf/RFM95_96_97_98W.pdf
- http://www.hoperf.com/upload/rf/rfm12b.pdf
Muy buena explicación de los módulos de Adafruit: https://learn.adafruit.com/adafruit-rfm69hcw-and-rfm96-rfm95-rfm98-lora-packet-padio-breakouts/overview
Librería para los módulos RFM69: https://github.com/LowPowerLab/RFM69
IMPORTANTE: Los módulos RFM69 no son LoRa y no son compatibles con los módulos RFM95/RFM96. Además los módulos RFM95/RFM96 necesitan de una librería de terceros.
Más información RFM69:
- https://www.sparkfun.com/products/12775
- https://lowpowerlab.com/2015/11/11/rfm69_atc-automatic-transmission-control/
- https://es.rs-online.com/web/p/modulos-rf-de-baja-potencia/7931995/
- https://www.digitalsmarties.net/products/rfm-board
- https://www.digitalsmarties.net/products/rfm69cw-868-mhz
Uso con Lora: https://lowpowerlab.com/guide/moteino/lora-support/
Librería para los módulos LoRa RFM95 (868-915mhz) and RFM96 (433mhz).: http://www.airspayce.com/mikem/arduino/RadioHead/index.html
Getting started para instalar el soporte y las librerías: https://lowpowerlab.com/guide/moteino/programming-libraries/
Github: https://github.com/LowPowerLab y Librería: https://github.com/LowPowerLab/Moteino
Comprar Moteino:https://lowpowerlab.com/shop/
Moteino weather shield: https://lowpowerlab.com/2016/09/09/weathershield-r2-released/ with a BME280 which includes all Temperature/Humidity/Pressure readings all in 1 sensor.
Moteino PowerShield: https://lowpowerlab.com/guide/powershield/
Gateway LoRa con Moteino + Raspberry Pi:
Dragino
En Dragino http://www.dragino.com/ podemos encontrar Hardware para LoRa: http://www.dragino.com/products/products-list.html
Wiki: http://wiki.dragino.com/index.php?title=Main_Page
La librería recomendada es: https://github.com/matthijskooijman/arduino-lmic, pero puede usarse la librería Radiohead: http://www.airspayce.com/mikem/arduino/RadioHead/
LoRa Shield:
- Shield de LoRa para Arduino: http://www.dragino.com/products/lora/item/102-lora-shield.html
- Manual: http://wiki.dragino.com/index.php?title=Lora_Shield
Otro HW LoRa compatible con Arduino
Existen más HW de desarrollo compatible con Arduino con módulos LoRa diferentes:
- M5Stack: http://m5stack.com/
- ESP32 LoRa: https://es.aliexpress.com/item/868-MHz-915-MHz-SX1276-ESP32-LoRa-0-96-Pulgadas-de-Pantalla-OLED-Azul-Kit-32/32836591865.html?spm=a219c.12010108.1000023.13.7fdcecc0EA9d6W
- ESP8266 + LoRa: https://www.tindie.com/products/electronictrik/esp8266-rfm95-lorawan-node-pcb-with-battery/
- Módulo Industrial: https://www.kickstarter.com/projects/1322607643/4zerobox-the-industrial-toolkit-for-iot-solution-p
- LoPy: https://pycom.io/product/lopy/
Gateways LoRa
En las redes LoRaWan un gateway es un dispositivo dentro de la arquitectura de red que recibe los datos transmitidos por un dispositivo de nodo final y que reenvían los paquetes de datos a un servidor de red centralizado. Los datos de un nodo final LoRa pueden ser recibidos por múltiples puertas de enlace (gateway),
Los gateways o puertas de enlace son un puente transparente entre los dispositivos finales y el servidor de red central. Uno o más dispositivos finales se conectan a una o más puertas de enlace, mediante una conexión inalámbrica de un solo salto, usando tecnología RF LoRa™ o FSK, formando así una red en estrella.
Una o más puertas de enlace se conectan al servidor de red central por medio de conexiones IP estándar, formando así una red en estrella. Las comunicaciones entre los dispositivos y el servidor de red, son generalmente unidireccionales o bidireccionales, pero el estándar también soporta multidifusión, permitiendo la actualización de software en forma inalámbrica, u otras formas de distribución de mensajes en masa.
Los gateways son enrutadores equipados con un concentrador LoRa, lo que les permite recibir paquetes LoRa. Por lo general, puede encontrar dos tipos de puertas de enlace:
- Las pasarelas se ejecutan con un firmware mínimo, por lo que son de bajo costo y fáciles de usar (por ejemplo, The Things Gateway) y solo ejecutan el software de reenvío de paquetes.
- Gateways que ejecutan un sistema operativo, para el cual el software de reenvío de paquetes se ejecuta como un programa de fondo (por ejemplo, Kerlink IoT Station, Multitech Conduit). Esto le da más libertad al administrador del gateway para administrar su puerta de enlace e instalar su propio software.
Una forma de montar un gateway LoRa barato es con una Raspberry Pi y un hat de Moteino con un módulo LoRa:
Un gateway simple con LoPy: https://www.hackster.io/bucknalla/lopy-lorawan-nano-gateway-using-micropython-and-ttn-a9fb19
Construir un gateway LoRa barato: http://cpham.perso.univ-pau.fr/LORA/RPIgateway.html
Módulos LoRa para conectar un ordenador y haga de gateway: https://www.cooking-hacks.com/waspmote-gateway-sx1272-lora-sma-4-5-dbi-868-mhz y tutorial LoRa gateway Libelium: http://www.libelium.com/development/waspmote/documentation/lora-gateway-tutorial/
Lista de gateways de loriot: https://www.loriot.io/lora-gateways.html
The things gateway: https://www.thethingsnetwork.org/docs/gateways/gateway/
The Things Gateway permite que dispositivos como sensores y computadoras integradas se conecten a internet. Con un proceso fácil de conectar, está creando el aspecto más sustancial de su red de datos IoT. Active la puerta de enlace en solo 5 minutos y cree su propia red local. Con la capacidad de servir a miles de nodos, la puerta de enlace es el componente principal de su red conectada. Esta versión funciona a 868MHz para uso en la UE y 915Mhz para uso en los EE.UU.
Lista de gateways de thethingsnetwork:
- https://www.thethingsnetwork.org/docs/gateways/start/list.html
- https://github.com/TheThingsNetwork/docs/blob/master/_content/gateways/start/list.md
Gateway draguino (open wrt): http://www.dragino.com/products/lora/item/119-lg01-s.html
Ejemplo con Dragino para usarlo como gateway (Lora Shield + Arduino Yun Shield):
- Lora GPS tracker: http://www.instructables.com/id/Dragino-LoRa-GPS-Tracker-1/
- LoRa Shield como módulo RFM: https://www.seeedstudio.com/Dragino-LoRa-Shield-support-433M-frenquency-p-2672.html
Más información:
- https://www.thethingsnetwork.org/docs/gateways/
- Tutorial Libelium: http://www.libelium.com/development/waspmote/documentation/lora-gateway-tutorial/
- https://www.semtech.com/products/wireless-rf/lora-gateways
- https://docs.mbed.com/docs/lora-with-mbed/en/latest/intro-to-lora/
- https://www.youtube.com/watch?v=ZFVA6cQyheY
Librería RadioHead LoRa
Una de las librerías más usadas para módulos LoRa con Arduino es RadioHead: http://www.airspayce.com/mikem/arduino/RadioHead/index.html
Proporciona una biblioteca completa orientada a objetos para enviar y recibir mensajes paquetizados a través de una variedad de radios de datos comunes y otros transportes para microprocesadores integrados.
RadioHead consta de 2 grupos principales de clases: driversy managers.
- Los drivers proporcionan acceso de bajo nivel a un rango de diferentes radios y otros transportes de mensajes paquetizados.
- Los managers brindan servicios de envío y recepción de mensajes de alto nivel para una variedad de requisitos diferentes.
Cada programa de RadioHead tendrá una instancia de un driver para proporcionar acceso a la radio o transporte de datos, y generalmente un manager que usa ese driver para enviar y recibir mensajes para la aplicación. El programador debe instanciar un driver y un manager e inicializar el manager. A partir de entonces, las funciones del manager se pueden usar para enviar y recibir mensajes.
También es posible usar un driver por sí mismo, sin un manager, aunque esto solo permite un transporte no confiable y sin dirección a través de las funciones del driver.
Se admite una amplia gama de plataformas de microprocesadores.
Unos ejemplos de drivers:
- RH_RF69 Works with Hope-RF RF69B based radio modules, such as the RFM69 module
- RH_NRF24 Works with Nordic nRF24 based 2.4GHz radio modules, such as nRF24L01 and others.
- RH_RF95 Works with Semtech SX1276/77/78/79, Modtronix inAir4 and inAir9, and HopeRF RFM95/96/97/98 and other similar LoRa capable radios. Supports Long Range (LoRa) with spread spectrum frequency hopping, large payloads etc.
- RH_Serial Works with RS232, RS422, RS485, RS488 and other point-to-point and multidropped serial connections, or with TTL serial UARTs such as those on Arduino and many other processors, or with data radios with a serial port interface. RH_Serial provides packetization and error detection over any hardware or virtual serial connection. Also builds and runs on Linux and OSX.
- RHEncryptedDriver Adds encryption and decryption to any RadioHead transport driver, using any encrpytion cipher supported by ArduinoLibs Cryptogrphic Library http://rweather.github.io/arduinolibs/crypto.html
Managers, cualquier manager puede usarse con cualquier driver:
- RHDatagram Addressed, unreliable variable length messages, with optional broadcast facilities.
- RHReliableDatagram Addressed, reliable, retransmitted, acknowledged variable length messages.
- RHRouter Multi-hop delivery of RHReliableDatagrams from source node to destination node via 0 or more intermediate nodes, with manual routing.
- RHMesh Multi-hop delivery of RHReliableDatagrams with automatic route discovery and rediscovery.
Esta librería es compatible entre otros con:
- Arduino and the Arduino IDE
- Moteino http://lowpowerlab.com/moteino/
- ESP8266 on Arduino IDE and Boards Manager per https://github.com/esp8266/Arduino
- ChipKIT Core with Arduino IDE
- Particle Photon https://store.particle.io/collections/photon
- ESP32 built using Arduino IDE 1.8.1 or later
- Raspberry Pi Uses BCM2835 library for GPIO http://www.airspayce.com/mikem/bcm2835/ Currently works only with RH_NRF24 driver or other drivers that do not require interrupt support.
- Linux and OSX Using the RHutil/HardwareSerial class, the RH_Serial driver and any manager will build and run on Linux and OSX.
Para los módulos con moteino que se ha usado en la demo, son necesarios los drivers: http://www.airspayce.com/mikem/arduino/RadioHead/classRH__RF95.html
Si se quiere añadir una capa de seguridad debe usarse la clase: http://www.airspayce.com/mikem/arduino/RadioHead/classRHEncryptedDriver.html
Si se quiere usar direccionamiento debe usarse la clase: http://www.airspayce.com/mikem/arduino/RadioHead/classRHDatagram.html
IMPORTANTE PARA MODULOS LORA, la librería está configurada por defecto a 434: Check if you have set the right frequency:After putting the library in the right place, you have to also modify the frequency to the frequency you want to use, the position of this issetFrequency() in the file: arduino-xxx\libraries\RadioHead\RH_RF95.cpp;
Para los módulos RFM95 de moteino debe ponerse: setFrequency(868.0);
He hecho un fork de la librería con la modificación para módulos LoRa: https://github.com/jecrespo/RadioHead
Proyecto LoRa con Moteino
A la hora de afrontar un proyecto con LoRa para monitorizar un entorno donde no tenemos acceso a una red ethernet/wifi ni toma eléctrica, podemos planteamos usar Moteino como una solución basada en Arduino de bajo consumo y con módulos LoRa integrados.
La primera duda es que módulo de radio o transceiver usar el RFM69 o RFM95:
- RFM69 no es LoRa usa modulación FSK en lugar de la modulación LoRa
- RFM95 es LoRa estándar.
RFM69 y RFM95 son módulos de radio para comunicación a larga distancia, donde la velocidad de transmisión no es crítica (no se hace streaming de vídeo). Al usar modulación diferente no son compatibles entre ellos.
Estos módulos de radio vienen en cuatro variantes (dos tipos de modulación y dos frecuencias). Los RFM69 son los más fáciles de usar, y son bien conocidos y entendidos. Las radios LoRa son más potentes, pero también más caros.
Comparativa y explicación de los módulos: https://learn.adafruit.com/adafruit-rfm69hcw-and-rfm96-rfm95-rfm98-lora-packet-padio-breakouts
Transceiver Moteino: https://lowpowerlab.com/guide/moteino/transceivers/
RFM69
Módulo basado en SX1231 con interfaz SPI
- +13 a +20 dBm hasta 100 mW Capacidad de salida de potencia (salida de potencia seleccionable en software)
- Drenaje de corriente de 50 mA (+13 dBm) a 150 mA (+20 dBm) para transmisiones, ~ 30 mA durante la escucha de radio activa.
- Las radios RFM69 tienen un alcance de aprox. Línea de visión de 500 metros con antenas unidireccionales sintonizadas. Dependiendo de las obstrucciones, la frecuencia, la antena y la potencia de salida, obtendrá rangos más bajos, especialmente si no tiene línea de visión.
- Crear redes multipunto con direcciones de nodo individuales
- Motor de paquete cifrado con AES-128
Guía completa del módulo de radio RFM69: https://learn.sparkfun.com/tutorials/rfm69hcw-hookup-guide
Librería Arduino RFM69: https://github.com/LowPowerLab/RFM69
Completa información RFM69: http://www.hoperf.com/upload/rf/RFM69W-V1.3.pdf
Explicación de librería RFM69 https://lowpowerlab.com/2013/06/20/rfm69-library/
RFM95
Módulo basado en LoRa® SX1276 con interfaz SPI
- Capacidad de salida de potencia de +5 a +20 dBm hasta 100 mW (salida de potencia seleccionable en software)
- ~ 100mA de pico durante la transmisión de + 20dBm, ~ 30mA durante la escucha activa de la radio.
- Las radios RFM9x tienen un rango de aprox. Línea de visión de 2 km con antenas unidireccionales sintonizadas. Dependiendo de las obstrucciones, la frecuencia, la antena y la potencia de salida, obtendrá rangos más bajos, especialmente si no tiene línea de visión.
Estos son radios de paquete LoRa de +20 dBm que tienen una modulación de radio especial que no es compatible con los RFM69 pero que puede ir mucho más lejos. Pueden ir fácilmente a la línea de vista de 2 km utilizando antenas de cable simples, o hasta 20 km con antenas direccionales y ajustes.
Completa información RFM95: http://www.hoperf.com/upload/rf/RFM95_96_97_98W.pdf
Librería: http://www.airspayce.com/mikem/arduino/RadioHead/
SX127x Datasheet – The RFM9X LoRa radio chip itself
Librería: http://www.airspayce.com/mikem/arduino/RadioHead/
Módulos Moteino Usados
Optamos LoRa porque da entre un 50% y 100% más de alcance.
LoRa support for Moteino: https://lowpowerlab.com/guide/moteino/lora-support/
Todo sobre moteino y como programarlo: https://lowpowerlab.com/guide/moteino/
Los moteino a usar con LoRa son los moteinoLR y mejor moteinoUSB-LoRa que ya tiene el interfaz USB:
- Moteino: https://lowpowerlab.com/shop/product/99
- Moteino USB: https://lowpowerlab.com/shop/product/100
- Transceiver RFM95: https://lowpowerlab.com/shop/product/143
Para wireless programming necesitas las flash extra: https://lowpowerlab.com/guide/moteino/wireless-programming/
Gateway
Si queremos conectar a Internet los sensores, necesitamos un gateway.
Gateway con Raspberry Pi:
- https://lowpowerlab.com/guide/gateway/
- https://github.com/LowPowerLab/RaspberryPi-Gateway
- Hat: https://lowpowerlab.com/guide/mightyhat/
Otra opción de gateway es usar un shield LoRa de dragino:
- http://www.dragino.com/products/lora/item/102-lora-shield.html
- http://wiki.dragino.com/index.php?title=Lora_Shield
- Comprar: https://www.seeedstudio.com/Dragino-LoRa-Shield-support-868M-frequency-p-2651.html
Productos de dragino: http://www.dragino.com/products/products-list.html
- LoRa gateway: http://www.dragino.com/products/lora/item/119-lg01-s.html
- Comprar: https://www.seeedstudio.com/Dragino-LoRa-Shield-support-868M-frequency-p-2651.html
Cloud
Ya tenemos el nodo y el gateway, nos falta el cloud que podemos hacerlo con muchas plataformas IoT.
Thingspeak: https://thingspeak.com/