Para añadir un dispositivo en el Broker ChirpStack, el ejemplo básico envía una trama solo para leer los datos de niveles de señal RSSI y SNR.
1. Application Service Profile
El perfil de servicio en la aplicación se asigna un nombre acorde a la aplicación que la usará.
se ingresan los parametros requeridos, por simplicidad solo se añade un nombre. Ejemplo:
2. Device Profile
El perfil de dispositivos describe la forma de conexión y autenticación de un grupo de dispositivos.
Por ejemplo, si los dispositivos autentican por medio de OTTA/APB, si se incluirán dispositivos clase B, clase C y las instrucciones para codificar o decodificar los datos del dispositivo (CODEC).
para conexión OTAA/ABP
soporte de dispositivos clase B
soporte de dispositivos clase C
Para el tema de CODEC se recomienda revisar la sección de LoRaWAN – Mensajes y datos entre componentes
3. Applications
La aplicación agrupa dispositivos que realizan funciones semejantes, mediante el perfil del dispositivo, donde se encuentra también el CODEC de los datos.
Se asigna un nombre y una descripción de lo que va a realizar con los dispositivos:
para finalmente registrar la aplicación
4. Añadir dispositivos a la aplicación
Hay que crear cada dispositivo con identificadores únicos y autenticarlos en la red.
los primeros datos corresponden a nombre y nombre y descripción.
El identificador único de dispositivo: Device EUI es primordial para la conexión por OTAA. El Device EUI se puede generar con el boton mostrado en la pantalla y se usa en la programación del dispositivo.
El perfil del dispositivo se selecciona desde la pestaña y se despliegan las opciones.
https://heltec-automation-docs.readthedocs.io/en/latest/esp32/lorawan/config_parameter.html
https://www.thethingsnetwork.org/docs/lorawan/addressing.html
los parámetros para OTAA se pueden visualizar, generar en la pestaña correspondiente. Hay un boton para visualizar el que se esté usando, o en otro caso se puede generar para usar en la programación del dispositivo.
Si el dispositivo no ha sido conectado al menos una vez, la pestaña de activación aparece vacia. Para obtener los datos de activación es necesario realizar al menos un intento de conexión, con lo que la ventana llena los datos para completar la programación del dispositivo.
Para observar los datos de activación debe usar el boton de visualización en la parte derecha de la ventana.
Los intentos de conexión se pueden visualizar en la pestaña de LoRaWAN Frames
mientras que los datos recibidos se observan en la pestaña de Device Data
Hay que considerar que la primera vez que se conecta el dispositivo, la autenticación puede llevar algunos intentos, por lo que hay que esperar para que se comiencen a recibir los datos, a pesar que las tramas LoRaWAN si se registran en el programa.
5. Instrucciones Arduino IDE ejemplo básico
Los datos para la configuración del dispositivo se obtienen en el proceso descrito anteriormente, por lo que es necesario actualizar los datos.
En el caso de dispositivos HELTEC es necesario obtener los datos de licencia que se encuentran al inicio de las instrucciones. La licencia de cada dispositivo se puede revisar en: https://resource.heltec.cn/search/
/* * HelTec Automation(TM) LoRaWAN 1.0.2 OTAA example use OTAA, CLASS A * Solo ESP32+LoRa series boards con licencia http://www.heltec.cn/search/); *https://github.com/HelTecAutomation/ESP32_LoRaWAN */ #include <ESP32_LoRaWAN.h> #include "Arduino.h" /*licencia Heltec ESP32 LoRaWan http://resource.heltec.cn/search uint32_t license[4] = {0xBE21335B, 0xAEC3C5CE, 0xCC0A1CF4, 0xB836F981}; /* OTAA parametros uint8_t DevEui[] = { 0x01, 0x20, 0x08, 0x93, 0xdf, 0x80, 0x37, 0x74 }; uint8_t AppEui[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; uint8_t AppKey[] = { 0x05, 0x8e, 0xeb, 0xff, 0x24, 0xf1, 0x01, 0x84, 0xd0, 0x07, 0xbe, 0xd4, 0x65, 0xe7, 0x6b, 0xb5 }; /* ABP parametros uint32_t DevAddr = ( uint32_t )0x0174b1fd; uint8_t NwkSKey[] = { 0xc1, 0x45, 0x31, 0x28, 0x5f, 0xb2, 0x56, 0x3b, 0x9d, 0x5f, 0x27, 0x15, 0xed, 0x3a, 0x0e, 0xbc}; uint8_t AppSKey[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; //LoraWan channelsmask, default channels 0-7/ uint16_t userChannelsMask[6]={ 0x00FF,0x0000,0x0000,0x0000,0x0000,0x0000 }; DeviceClass_t loraWanClass = CLASS_A; /*Soporte de A and C uint32_t appTxDutyCycle = 15000; /*15000; en [ms] bool overTheAirActivation = true; /*OTAA or ABP bool loraWanAdr = true; /*ADR enable bool isTxConfirmed = true; /*confirmed or unconfirmed messages uint8_t appPort = 2; /* Application port /* reintentos de transmisión, en caso de no recibir ack uint8_t confirmedNbTrials = 8; /* Seleccionado de Arduino IDE tools uint8_t debugLevel = LoRaWAN_DEBUG_LEVEL; LoRaMacRegion_t loraWanRegion = ACTIVE_REGION; // variables de sensor/actuador byte contador1 = 0; uint8_t contador2 = 0; int unalectura = 221; void setup(){ Serial.begin(115200); while (!Serial); SPI.begin(SCK,MISO,MOSI,SS); Mcu.init(SS,RST_LoRa,DIO0,DIO1,license); deviceState = DEVICE_STATE_INIT; } void loop(){ switch( deviceState ) { case DEVICE_STATE_INIT: { LoRaWAN.init(loraWanClass,loraWanRegion); break; } case DEVICE_STATE_JOIN: { LoRaWAN.join(); break; } case DEVICE_STATE_SEND: { prepareTxFrame( appPort ); LoRaWAN.send(loraWanClass); deviceState = DEVICE_STATE_CYCLE; break; } case DEVICE_STATE_CYCLE: { // Schedule next packet transmission txDutyCycleTime = appTxDutyCycle + randr( -APP_TX_DUTYCYCLE_RND, APP_TX_DUTYCYCLE_RND ); LoRaWAN.cycle(txDutyCycleTime); deviceState = DEVICE_STATE_SLEEP; break; } case DEVICE_STATE_SLEEP: { LoRaWAN.sleep(loraWanClass,debugLevel); break; } default: { deviceState = DEVICE_STATE_INIT; break; } } } static void prepareTxFrame( uint8_t port ){ contador1 = contador1 + 1; contador2 = contador2 - 1; //orden de trama appDataSize = 4 //AppDataSize max value is 64 appData[0] = contador1; //0x01; appData[1] = contador2; appData[2] = highByte(unalectura); appData[3] = lowByte(unalectura); // mostrar en puerto USB Serial.println(contador1); Serial.println(contador2); Serial.println(unalectura); }