¿Cómo instalar y configurar la librería LMiC en Arduino?
Para comenzar a trabajar con el protocolo LoRa, es fundamental preparar un entorno adecuado. La instalación de la librería LMiC es un primer paso crucial. Este componente, desarrollado por IBM, facilita la integración de LoRa para múltiples plataformas de microcontroladores.
¿Cómo descargar y descomprimir la librería LMiC?
Para descargar la librería:
Navega al repositorio indicado por el sistema de discusiones del curso.
Descarga el archivo comprimido de la librería.
Descomprime el archivo y colócalo en una ubicación accesible, como el escritorio.
Posteriormente, debes mover la carpeta descomprimida a la carpeta de librerías de Arduino:
# Asumiendo que estás en el sistema operativo Windows# Si estás usando otro, cambia la ruta según sea necesarioC:\Users\[TuUsuario]\Documents\Arduino\libraries
Una vez que la librería está en su lugar, reinicia el IDE de Arduino para comenzar a trabajar con ella.
¿Cómo incluir las librerías necesarias en el código?
Para comenzar a escribir tu código, primero necesitas incluir varias librerías en tu archivo. Aquí tienes un ejemplo de cómo hacerlo:
#include<lmic.h>// Librería para manejar LoRa#include<hal/hal.h>// Abstracción de hardware#include<SPV.h>// Librería para manejar SPV#include<DHT.h>// Librería para sensor de temperatura y humedad DHT22
Estas librerías son fundamentales para gestionar tanto el hardware como las funciones de comunicación y los sensores que deseas utilizar.
¿Cómo definir pines y estructuras esenciales?
Definir correctamente los pines y estructuras es fundamental para la funcionalidad de tu montaje. Aquí te mostramos cómo puedes hacer estas definiciones:
¿Cómo inicializar los pines y el sensor DHT22?
Primero define los pines que utilizarás para tus acciones:
#defineDHTPIN23// Pin de datos del sensor DHT22#defineDHTTYPEDHT22 // Tipo de sensor DHTDHT dht(DHTPIN, DHTTYPE);// Instanciar el objeto DHT
¿Cómo establecer el mapeo de pines para LoRa?
LoRa requiere un mapeo específico de pines. Para configurarlo, utiliza la estructura osjob_t de esta manera:
staticconst lmic_pinmap lmic_pins ={.nss =18,// Pin de selección de esclavo .rxtx = LMIC_UNUSED_PIN,.rst =14,// Pin de reset.dio ={26,33,32}// Pines DIO};
¿Cómo estructurar el evento en la función principal?
Las funciones de la librería LMiC operan en base a eventos. Para gestionar estos eventos:
¿Cómo construir la función de eventos?
Crea una función que pueda manejar varios casos de eventos. Utiliza un switch que pueda distinguir entre diferentes eventos, como EV_TXCOMPLETE:
La modularidad del código hace que sea más fácil añadir nuevas funcionalidades o cambiar partes del código sin afectar el resto. Aquí creas funciones separadas para leer datos de sensores y enviar la información por LoRa.
¿Cómo se crean las funciones para lectura y transmisión de datos?
Para mejorar la organización, crea dos funciones: una para leer datos del sensor y otra para la transmisión de estos datos:
// Función para leer datos del sensor DHT22voidreadSensors(){float temp = dht.readTemperature();// Otros cálculos de sensor}// Función para enviar datosvoidsendData(int data,int length){// Código para enviar datos usando LMiC}
¿Cuáles son los próximos pasos en el desarrollo de tu proyecto LoRa?
Con las bases asentadas, el siguiente paso incluye:
Modularizar aún más el programa.
Realizar pruebas de transmisión con los sensores.
Configurar una cuenta en The Things Network (TTN) y enlazarla con un dashboard gratuito como DashBoard.
Cada paso te acerca más a tener un sistema sólido de comunicación basada en LoRa, ampliando tus habilidades en el Internet de las Cosas. ¡Continúa aprendiendo y explorando nuevas funciones y capacidades!
Quien no tenga un TTGo sino un devkit32 y un modulo de radio rf95 o hpd13a puede usar el siguiente codigo, debe mapear los pines MISO, MOSI, SCK, y todas las tierras del radio deben estar aterrizadas
#include <CayenneLPP.h>#include<lmic.h>#include<hal/hal.h>#include <SPI.h>#include<DHT.h>#define DHTPIN22#define DHTYPEDHT11#define LED_BUILTIN2DHTdht(DHTPIN,DHTYPE);CayenneLPPlpp(51);uint32_t DEV_ADDR=0x26021285;uint8_t NET_SESS_KEY[16]={0xFE,0x99,0x29,0x91,0xD2,0x60,0x99,0x63,0xCA,0xC0,0x67,0xAB,0xA7,0xFF,0xBD,0x52};uint8_t APP_SESS_KEY[16]={0xD9,0x8C,0xC1,0xA2,0x8D,0x43,0xBD,0x07,0x61,0xAE,0xCF,0x8D,0x76,0xB4,0x48,0x5C};voidos_getArtEui(u1_t* buf){}voidos_getDevEui(u1_t* buf){}voidos_getDevKey(u1_t* buf){}const unsigned TX_INTERVAL=10;unsigned long previousMillis =0;const lmic_pinmap lmic_pins ={.nss=5,.rxtx=LMIC_UNUSED_PIN,.rst=14,.dio={26,33,32}};voidonEvent(ev_t ev){switch(ev){caseEV_TXCOMPLETE:Serial.println("[LMIC] Radio Tx Complete");digitalWrite(LED_BUILTIN,LOW);break;default:Serial.println("Evento Desconocido");break;}}voidenviar_datos(uint8_t *mydata, uint16_t len){if(LMIC.opmode&OP_TXRXPEND){Serial.println("[LMIC] OP_TXRXPEND, not sending");}else{LMIC_setTxData2(1,mydata,len,0);}}voidgetInfoAndSend(){digitalWrite(LED_BUILTIN,HIGH);// Leer sensores y transmitir float temp = dht.readTemperature(); lpp.addTemperature(1,temp);enviar_datos(lpp.getBuffer(),lpp.getSize());}voidsetup(){Serial.begin(115200);pinMode(LED_BUILTIN,OUTPUT);digitalWrite(LED_BUILTIN,HIGH);Serial.print("Led ON");Serial.println();delay(1000);digitalWrite(LED_BUILTIN,LOW);Serial.print("Led OFF");Serial.println();Serial.println("[INFO] Iniciando"); dht.begin();os_init();LMIC_reset();LMIC_setSession(0x1,DEV_ADDR,NET_SESS_KEY,APP_SESS_KEY);// put your setup code here, to run once:for(int chan=0; chan<72;++chan){LMIC_disableChannel(chan);}// Escojemos 904.3 Mhz, 915 Mhz en la banda de 902 - 928 MhzLMIC_enableChannel(10);LMIC_setLinkCheckMode(0);LMIC_setDrTxpow(DR_SF7,20); previousMillis =millis();}voidloop(){// put your main code here, to run repeatedly:if(millis()> previousMillis +(TX_INTERVAL*1000)){getInfoAndSend(); previousMillis=millis();}os_runloop_once();}```
¿cuantos dispositivos maximo puede soportar un gateway como este de una raspberry pi?
yo reliace un gateway tambien de un solo canal pero sin LoRaWan, solo usando un protocolo propio en base a datagramas, hasta ahora la red trabaja bien con 8 nodos, donde cada nodo envia mensajes al gateway cada 90 segundos y otros cada 180 segundos. el intervalo entre mensajes es clave para poder calcular la cantidad de nodos que podria soportar tu gateway antes de saturar el canal.
yo por ejemplo con 10 nodos ya el canal estaria bastante saturado y tendria que usar un segundo gateway si deseo instalar mas nodos, supongo que con LoRaWan seria algo similar, pero todo esta en probar de todas formas ese gateway del curso es super sensillo, nisiquiera admite downstreams, solo upstreams
#include <lmic.h>#include <hal/hal.h>#inlcude <SPI.h>#include <DHT.h>#define DHTPIN23#define DHTYPEDHT22DHTdht(DHTPIN,DHTYPE);voidos_getArtEui(u1_t* buf){}voidos_getDevEui(u1_t* buf){}voidos_getDevKey(u1_t* buf){}const lmic_pinmap lmic_pins ={.nss=18,.rxtx=LMIC_UNUSED_PIN,.rst=14,.dio={26,33,32}}voidonEvent(ev_t ev){switch( ev ){caseEV_TXCOMPLETE:break;default:Serial.println("Evento desconocido");break;}voidsetup(){// put your setup main code here, to run repeatedly:}voidloop(){// put your main code here, to run repeatedly:}voidenviar_datos(uint8_t *mydata, unint16_t len){LMIC_setTxData2(1,mydata,len,0);}voidgetInfoAndSend(){float temp = dht.readTemperature();}
Cuantos son el numero Maximo de dispositivos soportados en simultaneo? gracias
Todo depende del Gateway, en este caso que se trata de un single chanel, solo seria de un nodo a la vez. Toma en cuenta que este Gateway no es industrial ni mucho menos cumple con las normas para la red LoRaWan.
Lo recomendable es instalar los diferentes softwares en la carpeta /opt
Buenas tardes, tengo problemas al visualizr este video
Cuando sea así prueba a cambiar el servidor en el menú de reproducción