Cómo trabajar con LoRaWAN y un controlador PLC
Utilizar un PLC Arduino para trabajar con la comunicación LoRaWAN
16 noviembre, 2020 por
Cómo trabajar con LoRaWAN y un controlador PLC
Boot & Work Corp. S.L., Marti Guillem Cura

      Introducción

                        LoRaWAN es una especificación de red inalámbrica a largo plazo y de baja potencia, (LPWAN), basada en la modulación LoRa que puede lograr comunicaciones de hasta 20 Km. en condiciones favorables. Se trata de un MAC (Media Access Control) que se utiliza para conectar diferentes dispositivos LoRa y proporcionar autenticación a través de las conexiones siguiendo protocolos estándar. Si desea saber más sobre LoRa y LoRaWAN consulte los blogs de Enlaces Relacionados.

                        Al trabajar con LoRaWAN, se requiere una autenticación y una encriptación de los datos. Además, antes de que puedas comunicarte con los dispositivos, tendrás que añadir una aplicación y una puerta de enlace a una red y registrar los dispositivos en ella. Necesitarás una clave de sesión de la red y una clave de sesión de la aplicación para cifrar los datos. Hay dos métodos posibles que el dispositivo puede utilizar para obtener estas claves, activando la conexión con OTAA o ABP. A continuación te mostramos cómo trabajar con ambas configuraciones, así como sus ventajas y desventajas. Desde Industrial Shields, te proporcionamos algunos ejemplos con los que trabajar con controladores industriales para automatización Arduino.

                        Requisitos

                        OTAA

                        ¿Qué es OTAA?

                        La activación por aire (OTAA) es un método de autenticación en el que la clave de sesión de red y la clave de sesión de aplicación se generan en cada nueva conexión. Cuando se conecta utilizando una solicitud conjunta, un dispositivo recibe un Appeui, un Deveui y la AppKey que se utilizarán para generar la Clave de Sesión de Red y la Clave de Sesión de Aplicación. 

                        En el método OTAA las claves son generadas en cada nueva conexión, haciéndolo más seguro ya que las claves también son borradas cuando la conexión termina. Además, el dispositivo puede ser fácilmente cambiado a una nueva red y las claves no pueden ser tan fácilmente interceptadas. Sin embargo, el dispositivo puede almacenar las claves y decidir cuándo es necesaria una petición de unión.

                        ABP

                        ¿Qué es ABP?

                        La Activación por Personalización (ABP) es un método de autenticación en el que la Clave de Sesión de Red y la Clave de Sesión de Aplicación se programan por defecto en el dispositivo. Como las claves están preprogramadas, no es necesario establecer una conexión de unión cada vez que se requiera una nueva conexión.

                        Tener las claves preprogramadas reduce el tiempo de las conexiones, ya que cualquier solicitud de unión es necesaria cuando se conecta al servidor. Sin embargo, el método no puede repetir las claves y debe asegurarse de que son únicas. Aunque las claves pueden ser fácilmente descubiertas incluso antes de que se establezca la conexión. 

                        ¿Cómo programarlo?

                        Para probar la LoRaWAN trabajaremos con The Things Network, así que usaremos una de sus puertas de enlace para hacer la conexión. Asegúrate de tener una cuenta y de haber establecido la configuración previa de la aplicación y la puerta de enlace. Por aplicaciones, nos referimos a lo que sea que sus dispositivos se comunican con en Internet.

                        En este ejemplo básico enviaremos al servidor algunos datos cada 60 segundos a través de nuestra gateway. Te ayudará a conocer la comunicación LoRaWAN y ver cómo funcionan las conexiones.

                        En primer lugar, debes descargar e instalar Arduino IDE en tu Placas Industrial Shields. Luego elige la placa M-Duino Family y el modelo con el que estás trabajando. Usaremos una M-Duino LoRa 21+. Si no, por favor configúralo antes de pasar al siguiente paso siguiendo nuestro tutorial.

                        Después de configurar todo lo anterior, abre los ejemplos de la librería MCCI LoRaWAN LMIC y elige el ttn-otaa or ttn-abp dependiendo de la activación con la que desses trabajar.

                        Ambas configuraciones tienen un código similar pero con importantes diferencias. Asegúrate de saber con cuál vas a trabajar ya que se necesitan diferentes claves y sería imposible trabajar de otra manera. Las diferencias aparecerán en las primeras líneas del código donde se declaran las definiciones. Consulta las secciones del final para saber qué parámetros deben cambiarse para trabajar con OTAA o ABP.

                        How to work with LoRaWAN and a PLC controller

                        En las siguientes líneas puedes ver cómo establecer los datos que se enviarán y el intervalo de tiempo en segundos en que el dispositivo enviará los paquetes. Por defecto, enviarás la cadena "Hello, world!" cada minuto. 

                        Es importante ajustar correctamente los pines de Arduino. En tu controlador lógico programable industrial Arduino usarás el pin 12 para el Chip Select y el pin 13 para el Reset. La librería LoRa adaptada por Industrial Shields no utiliza los pines RXTX y DIO ya que las comprobaciones de recepción y transmisión se hacen internamente leyendo los registros de los pines y enviando los datos vía ModBus.  

                        (*En el caso de la Familia Ardbox LoRa, utilizaremos el pin 23 para el Chip Select y el pin 3 para el Reset). 

                        Configura estos parámetros como las siguientes líneas:

                        static uint8_t mydata[] = "Hello, world!";
                        static osjob_t sendjob;
                        // Schedule TX every this many seconds (might become longer due to duty
                        // cycle limitations).
                        const unsigned TX_INTERVAL = 60;
                        // Pin mapping
                        const lmic_pinmap lmic_pins = {
                        .nss = 12,
                        .rxtx = LMIC_UNUSED_PIN,
                        .rst = 13,
                        .dio = {LMIC_UNUSED_PIN, LMIC_UNUSED_PIN, LMIC_UNUSED_PIN},
                        };
                        En ambos ejemplos, la función de vacío onEvent(ev_t ev) puede ser llamada para debug si se desea. Sin embargo, en este ejemplo no utilizaremos esta función. Para más detalles comprueba la biblioteca readme.
                        La función do_send(osjob_t* j) será la que se utilice para transmitir los datos a la pasarela utilizada. También imprimirá "Paquete en cola" como indicador.


                        void do_send(osjob_t* j){
                        // Check if there is not a current TX/RX job running
                        if (LMIC.opmode & OP_TXRXPEND) {
                        Serial.println(F("OP_TXRXPEND, not sending"));
                        } else {
                        // Prepare upstream data transmission at the next possible time.
                        LMIC_setTxData2(1, mydata, sizeof(mydata)-1, 0);
                        Serial.println(F("Packet queued"));
                        }
                        // Next TX is scheduled after TX_COMPLETE event.
                        }
                        En la función de configuración, inicializaremos el serial para poder imprimir mensajes en el Monitor Serial y todas las configuraciones para la comunicación LoRa. Por defecto, sólo se utilizan tres canales base de la especificación LoRaWAN, que habían sido configurados por The Things Network. Si sólo se trabaja con un dispositivo LoRa, la configuración por defecto no puede ser cambiada, sin embargo se recomienda añadir más canales ya que la red funcionará mejor. Para añadirlos, incorpora las siguientes líneas (esto está configurado para los estándares europeos, mira la especificación de la biblioteca para otras regiones)::


                        #if defined(CFG_eu868)
                        LMIC_setupChannel(0, 868100000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band
                        LMIC_setupChannel(1, 868300000, DR_RANGE_MAP(DR_SF12, DR_SF7B), BAND_CENTI); // g-band
                        LMIC_setupChannel(2, 868500000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band
                        LMIC_setupChannel(3, 867100000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band
                        LMIC_setupChannel(4, 867300000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band
                        LMIC_setupChannel(5, 867500000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band
                        LMIC_setupChannel(6, 867700000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band
                        LMIC_setupChannel(7, 867900000, DR_RANGE_MAP(DR_SF12, DR_SF7), BAND_CENTI); // g-band
                        LMIC_setupChannel(8, 868800000, DR_RANGE_MAP(DR_FSK, DR_FSK), BAND_MILLI); // g2-band
                        #else
                        # error Region not supported
                        #endif

                        Finalmente, el os_runloop_once() debe ser llamado en la función loop() para comprobar y actualizar constantemente la comunicación LoRaWAN. Otras opciones de depuración como el parpadeo de los LEDs pueden ser implementadas para una opción de depuración más visual.

                        void loop() {
                            unsigned long now;
                            now = millis();
                            if ((now & 512) != 0) digitalWrite(13, HIGH);
                            else digitalWrite(13, LOW);
                            os_runloop_once();
                        }
                        

                        OTTA ejemplo

                        Si trabajas con el ejemplo de OTTA, hay que pasar las claves de AppEui, DevEui y AppKey. Esos parámetros son privados y deben obtenerse a través de la cuenta personal de The Things Network. Recuerda que AppEui y DevEui deben ser pasadas en formato little-endian (primero el byte menos significativo) mientras que la AppKey debe ser pasada en formato big-endian. Ponlos en las siguientes líneas reemplazando el texto FILLME:

                        static const u1_t PROGMEM APPEUI[8]={ FILLMEIN };
                        static const u1_t PROGMEM DEVEUI[8]={ FILLMEIN };
                        static const u1_t PROGMEM APPKEY[16] = { FILLMEIN };
                        

                        How to work with LoRaWAN and a PLC controller



                        Ejemplo ABP

                        Si trabajas con el ejemplo de ABP, hay que pasar las claves de DevAddr, NetwKey y AppKey. Esos parámetros son privados y deben ser obtenidos a través de la cuenta personal de The Things Network. Recuerda que NetKey y AppKey deben pasarse en formato big-endian. Ponlos en las siguientes líneas reemplazando el texto FILLME:

                        static const PROGMEM u1_t NWKSKEY[16] = { FILLMEIN };
                        static const u1_t PROGMEM APPSKEY[16] = { FILLMEIN };
                        static const u4_t DEVADDR = FILLMEIN ;

                        Verificación

                        Para saber si la conexión ha ido bien, entra en The Things Network y comprueba si algún mensaje ha pasado por la puerta de enlace y ha llegado al servidor.
                        Asegúrate de que la trama está puesta a 0 ya que, si no, podría provocar un error.

                        Visita nuestro foro general y habla sobre varios temas.

                        Cualquier comentario o pregunta son bienvenidos. Si la comunidad no puede ayudarle, nosotros lo intentaremos. :)


                        Cómo trabajar con LoRaWAN y un controlador PLC
                        Boot & Work Corp. S.L., Marti Guillem Cura
                        16 noviembre, 2020
                        Compartir
                        Archivar

                        ¿Buscas tu controlador lógico programable ideal?

                        Echa un vistazo a esta comparativa de producto de varios controladores industriales basados en Arduino.

                        Comparamos entradas, salidas, comunicaciones y otras especificaciones con las de los equipos de otras marcas destacadas.


                        Comparación PLC industrial >>>

                        ¿Quieres más información?

                        ¡Rellena el formulario!

                        ¡Cuéntame más!