Approved Reseller
Approved Reseller
Si alguna vez has pensado en experimentar con comunicaciones a larga distancia, puede que te interese integrar un módulo LoRa a tu proyecto. LoRa es un protocolo de comunicación de largo alcance, con un rango de 1km a 5km en promedio, consume poca energía y es muy eficiente. Un shield que puedes usar muy fácilmente es el CatWAN Shield para Arduino UNO de Electronic Cats.
El CatWAN utiliza el chip RFM95 para implementar la red LoRa. Vía: 330ohms
El repositorio del shield incluye una carpeta de ejemplos y otra donde puedes encontrar la documentación del hardware. Si puedes darte un rato para revisar el hardware mejor, y funciona con el puerto SPI. En cuanto a los ejemplos hay 3 subcarpetas, cada uno con un ejemplo para transmitir y otro para configurar como receptor.
En la primer carpeta de ejemplos puedes encontrar el código que utiliza la librería LoRa.h para comunicarse. La segunda utiliza la librería RH_RF95.h (RadioHead) y en el tercero se establece una conexión por internet usando una red WAN.
La librería LoRa emplea algunas funciones para crear paquetes y para enviarlos. Los ejemplos se centran en la configuración del módulo estableciendo el puerto SPI y en enviar un paquete o recibirlo e imprimir el contenido del mensaje. En caso de que falle la configuración se enviará un mensaje de error advirtiendo del fallo. A continuación mostramos el ejemplo para que el shield funcione como transmisor.
#include #include void setup() { Serial.begin(9600); while (!Serial); LoRa.setPins(10, 9, 2); Serial.println("LoRa Receiver"); if (!LoRa.begin(915E6)) { Serial.println("Starting LoRa failed!"); while (1); } } void loop() { // try to parse packet int packetSize = LoRa.parsePacket(); if (packetSize) { // received a packet Serial.print("Received packet '"); // read packet while (LoRa.available()) { Serial.print((char)LoRa.read()); } // print RSSI of packet Serial.print("' with RSSI "); Serial.println(LoRa.packetRssi()); } }
Para seguir leyendo…
¿Quieres incursionar en el mundo del IoT?
Arduino MKRFox1200, la nueva placa de Arduino para makers enfocados en el IoT
Estos ejemplos emplean un poco más de circuitería, ya que emplea una pantalla LCD para desplegar los mensajes. Se emplea la librería RH_RF95.h, con la que se establecen los parámetros del módulo y se envían o reciben los paquetes. Por ejemplo, para el módulo receptor, tenemos este código de ejemplo:
#include #include #define RFM95_CS 10 #define RFM95_RST 9 #define RFM95_INT 2 #define RF95_FREQ 915.0 //Usados creando el objeto RH_RF95 rf95(RFM95_CS, RFM95_INT); #include #include LiquidCrystal_I2C lcd(0x3F,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display char reci[10]; uint32_t cont=1; void setup() { Serial.begin(9600); lcd.begin(); // initialize the lcd lcd.backlight(); /*****LoRa init****/ pinMode(RFM95_RST, OUTPUT); digitalWrite(RFM95_RST, HIGH); delay(100); lcd.print("Electronic cats"); lcd.setCursor(0,1); lcd.print("LoRa Tester 2017"); delay(1800); // manual reset digitalWrite(RFM95_RST, LOW); delay(10); digitalWrite(RFM95_RST, HIGH); delay(10); while (!rf95.init()) { Serial.println(F("LoRa radio init failed")); while (1); } lcd.print("LoRa Ok"); lcd.setCursor(0,1); lcd.print("inicializado"); Serial.println("LoRa radio init OK!"); if (!rf95.setFrequency(RF95_FREQ)) { while (1); } rf95.setTxPower(23, false); //Set the max transmition power /******************/ } void loop() { if(rf95.available()) { lcd.clear(); lcd.setCursor(0,0); // Should be a message for us now uint8_t buf[RH_RF95_MAX_MESSAGE_LEN]; uint8_t len = sizeof(buf); if (rf95.recv(buf, &len)) { Serial.print("got request: "); Serial.write((char*)buf,4); Serial.println(); for(int i=0;i
Para estos ejemplos tenemos una versión ABP y otra OTAA. Ambos ejemplos utilizan un sensor de temperatura, un sensor ultrasónico y un GPS para mandar información a la red. En este caso se emplea un formato especializado de paquete, en el que enviamos el canal de transmisión, el tipo de paquete y la información.
Con estos ejemplos puedes darte una idea como implementar los dos modos de activación en la red LoRaWAN, que son Activation By Personalization (ABP) y el Over-The-Air Activation (OTAA). Una de las principales diferencias entre estos dos métodos de activación es que en el primero el dispositivo mantiene una DevAddr fija, mientras que en el segundo es variable y es asignada en un proceso de ingreso. Por ciertas ventajas dinámicas, es preferible usar el segundo método, ya que vuelve más dinámica la red. Sin embargo, los dispositivos finales deben cumplir con ciertos requisitos para que se pueda implementar de forma óptima la red.
Conclusiones:
Con estos ejemplos puedes establecer una comunicación de larga distancia entre dos módulos, con los que puedes implementar una red de internet de las cosas muy eficiente. Un ejemplo de uso puede ser en edificios inteligentes o en producción de energía solar, en donde requieres que los módulos sean muy eficientes y estén a largas distancias. Es importante aprender a implementar cualquiera de las dos librerías, LoRa.h o RH_RF95.h , así como aprender los dos modos de activación en LoRaWAN.
Referencias: