1 - LoRa vs LoRaWAN El módulo LoRa y el módulo LoRaWAN no son compatibles porque los protocolos son diferentes. El módulo LoRa implementa un protocolo de enlace simple, creado por Libelium. Sin embargo, el módulo LoRaWAN ejecuta el protocolo LoRaWAN, un protocolo mucho más rico y avanzado, creado por LoRa Alliance. El gateway LoRa proporcionado por Libelium no admite ninguna característica de LoRa Alliance.
2. Introducción El módulo SX1272 LoRa puede trabajar en Waspmote, Plug & Sense !, Arduino, Raspberry Pi o Intel Galileo. La topología normal de esta tecnología es una estrella: todos los nodos se transmiten hacia un nodo de sumidero central. Este nodo central puede ser: Otro nodo LoRa (Waspmote, Plug & Sense !, A rduino, ..) Una Gateway LoRa Este tutorial le guiará en el proceso de co nfiguración de un módulo LoRa en un PC con la ayuda de un gateway LoRa, y la prueba de recepción y envío de paquetes LoRa de Waspmote, Plug & Sense !, Arduino, Raspberry Pi o Intel Galileo. Para realizar estas acciones necesita un nodo LoRa y un Gateway LoRa, el dispositivo que le permite comunicarse a través de un puerto USB con el módulo. También necesitas un programa terminal como Cutecom (Linux), Hyperterminal o Putty (Windows). Hay un montón de este tipo de programas, por lo que puede utilizar el mas cómodo.
3 - Configuración de comunicaciones La comunicación con la puerta de enlace tiene que tener esta configuración: Velocidad de transmisión: 38400 8 bits de datos Sin paridad 1 bit de parada Debe seleccionar el puerto en el que su sistema ha detectado la puerta de enlace. Suele ser / dev / ttyUSBX en Linux y COMX en Windows.
Nota: En los sistemas basados en Unix (Linux, MacOSX) necesita ser parte del grupo de acceso telefónico para acceder a los puertos serie La comunicación entre el PC y el módulo utiliza u n protocolo diseñado para este uso específico. El protocolo utiliza algunos caracteres especiales que aseguran que los pedidos se leen correctamente y una suma de comprobación para evitar posibles errores de transmisión: Caracteres especiales: SOH (inicio del encabezado - ASCII 0 × 01) CR + LF (Retorno de carro + línea de alimentación -ASCII 0x0D y 0x0A) EOT (fin de transmisión - ASCII 0 × 04) Comprobación de errores: CRC16-Modbus. Usted puede realizar este cálculo en este sitio (o cualquier otro sitio de su confianza). [No ofrecemos ninguna garantía de este cálculo como es un sitio externo, si desea fiabilidad, programe una función para calcular CRC16-Modbus]
Los comandos utilizados para el módulo son: READ - Obtiene la configuración actual del módulo SET - Establecer una nueva configuración en el módulo DATA - Envía los datos del módulo a un Waspmote ERROR - Notifica un error en la información recibida INFO - Con este comando, el módulo da su configuración. ACK - Con este comando el módulo notifica que se ha enviado un mensaje con éxito Como es necesario enviar caracteres hexadecimales no i mprimibles, necesitará una forma de introducir estos caracteres en el terminal. Los programas como Cutecom permiten introducir números hexadecimales para introducir estos caracteres. En este caso, traducir a hexadecimal todos los caracteres del comando. Si está utilizando otro programa, puede utilizar algunas herramientas para editar caracteres hexadecimales. Un comando de lectura hexadecimal sería: 01 52 45 41 44 0D 0A 32 41 33 31 04 Algunos programas como Cutecom también permiten enviar caracteres hexadecimales mezclados con ASCII (0 × 01 - SOH, 0 × 04 - EOT, 0x0D - CR, etc), el último comando podría ser enviado en Cutecom con: 0x01READ0x0D0x0A2A310x04
4 - Instrucciones de configuración del módulo 4.1 - Leer la configuración actual del módulo Para leer la configuración del módulo, tiene que enviar un comando READ. El comando READ tiene esta estructura: Carácter SOH (inicio del encabezado - ASCII 0 × 01) Comando: READ Caracteres CR + LF (Carry return + line feed -ASCII 0x0D y 0x0A). CRC16-Código Modbus de los bytes entre SOH y CR + LF (sin incluir estos) (2 bytes hexadecimales) EOT (fin de transmisión - ASCII 0 × 04) El marco sería: [SOH] READ [CR + LF] 2A31 [EOT] El mismo comando en formato hexadecimal: 01 52 45 41 44 0D 0A 32 41 33 31 04 El módulo responderá con un cuadro INFO. Este marco tiene esta estructura:
Carácter SOH (inicio del encabezado - ASCII 0 × 01) Responder comando: INFO Separator # (ASCII 0 × 23) Datos de configuración ";" separados. Cada uno de los datos tendrá el formato "NAME: valor". Los campos de este comando son: FREC, ADDR, BW, CR, SF, RSSI y SNR. Los dos últimos parámetros son opcionales. Caracteres CR + LF (Carry return + line feed - ASCII 0x0D y 0x0A). CRC16-Código Modbus del mensaje entre SOH y CR + LF (no incluidos) (2 bytes hexadecimales) EOT (fin de transmisión - ASCII 0 × 04) Un ejemplo sería: [SOH] INFO # FREC: CH_13_868; ADDR: 3; BW: BW_125; CR: CR_6; SF: SF_6; RSSI: 32; SNR: 21 [CR + LF] FB05 [EOT]
4.2 - Escribir una nueva configuración en el módulo Para configurar el módulo, debe enviar un comando SET. El comando ti ene esta estructura: Carácter SOH (inicio del encabezado - ASCII 0 × 01) Comando: SET Separator # (ASCII 0 × 23) Datos de configuración separados por ";". Cada parámetro tiene el formato: NAME: value Los campos requeridos son: FREC, ADDR, BW, CR y SF. Los valores aceptados son: FREC (frecuencia y canal): CH_XY donde X es el canal y Y la banda de frecuencia. Las bandas permitidas son 900 y 868 (MHz). Los canales permitidos son de 10 a 17 para la banda de 868 MHz y de 00 a 12 para la banda de 900 MHz. ADDR (dirección): Número entre 1 y 255. BW (ancho de banda): BW_X donde X puede ser 125, 250 o 500 kHz CR (tasa de codificación): CR_X donde X es un número entre 5 y 8. SF (Factor de dispersión): SF_X donde X es un número entre 6 y 12. Caracteres CR + LF (Carry return + line feed - ASCII 13 y 10). CRC16-Código Modbus del mensaje entre SOH y CR + LF (no incluidos) (2 bytes hexadecimales) Carácter EOT (fin de transmisión - ASCII 04) Veamos un ejemplo completo paso a paso. Paso 1: El usuario elige la configuración. Por ejemplo: FREC se establece en 868 MHz canal 13, ADDR se establece en '3', BW se establece en 125 kHz, CR se establece en 4/5 y SF se establece en '12'. El comando a generar es: [SOH] SET # FREC: CH_13_868; ADDR: 3; BW: BW_125; CR: CR_5; SF: SF_12 [CR + LF] 245A [EOT] Paso 2: Para generar el CRC cuyo valor es 24 5A, el usuario debe copiar el contenido entre [SOH] y [CR + LF]: SET # FREC: CH_13_868; ADDR: 3; BW: BW_125; CR: CR_5; SF : SF_12 y convertirlo en formato hexadecimal utilizando la herramienta adecuada. El resultado de
esta operación es: 53 45 54 23 46 52 45 43 3a 43 48 5f 31 33 5f 38 36 38 3b 41 44 44 52 3a 33 3b 42 57 3a 42 57 5f 31 32 35 3b 43 52 3a 43 52 5f 35 3b 53 46 3a 53 46 5f 31 32 Después de esto, los datos HEX se utilizan para generar el CRC16-Modbus gracias al convertidor adecuado. El resultado es: 245A Paso 3: Por último, es necesario incluir los caracteres especiales [SOH], [CR + LF] y [EOT] en el marco como se ve en el paso 1 y convertir todo el marco en formato hexadecimal. El comando final es: 01 53 45 54 23 46 52 45 43 3a 43 48 5f 31 33 5f 38 36 38 3b 41 44 44 52 3a 33 3b 42 57 3a 42 57 5f 31 32 35 3b 43 52 3a 43 52 5f 35 3b 53 46 3a 53 46 5f 31 32 0d 0a 32 34 35 41 04 Cuando se ejecuta el comando resultante, el módulo intentará configurar estos parámetros y en caso de éxito, responderá con un cuadro INFO confirmando los nuevos datos de configuración. En caso de que uno de los parámetros no pudiera ser configurado en el módulo, mantendrá su configuración anterior en TODOS los parámetros y responderá con un marco ERROR.
4.3 - Mensaje ERROR Si el controlador del módulo detecta un problema en la comunicación, responderá con una trama ERROR. Este marco informa del problema, que podría ser por ejemplo un error CRC en el comando o un error en uno de los parámetros a escribir. El marco ERROR tiene esta estructura: Carácter SOH (inicio del encabezado - ASCII 0 × 01) Comando: ERROR Separator # (ASCII 0 × 23) Mensaje de error en ASCII. Este será un mensaje explícito d e cuál es el error. Caracteres CR + LF (Carry return + line feed -ASCII 0x0D y 0x0A). CRC16-Código Modbus del mensaje entre SOH y CR + LF (no incluidos) (2 bytes hexadecimales) EOT (fin de transmisión - ASCII 0 × 04) Un ejemplo de este mensaje sería: [SOH] ERROR # BAD CRC [CR + LF] 6BED [EOT]
5 - Lectura de datos de Waspmote Cuando haya iniciado una conexión con el módulo en su aplicación de terminal, el módulo enviará automáticamente a través del puerto serie los fotogramas recibidos de cualquier Waspmote. Estos marcos tendrán la estructura de marco de datos descrita en la guía de marco Waspmote. Puede leer más sobre el marco de datos Waspmote aquí.
6 - Envío de datos a Waspmote Puede enviar datos desde su puerta de enlace de LoRa a cualquier otro dispositivo equipado con LoRa. Puede enviar datos a Waspmote y Meshlium. Para enviar datos, tiene que usar el comando DATA. La estructura de este comando es: Carácter SOH (inicio del encabezado - ASCII 0 × 01) Comando: DATA Separator # (ASCII 0 × 23) Dirección de destino: Número entre 1 y 255. 0 para mensaje de difusión. Separator # (ASCII 0 × 23) Tipo de mensaje. El tipo permitido es ASCII (texto). También se permite el tipo binario pero no se implementa. Separator # (ASCII 0 × 23) Mensaje a enviar. Si desea enviar caracteres ASCII no imprimibles, necesita escapar de ellos antes con el carácter ESCAPE (ASCII 0x1B) y el carácter que desea enviar. Tienes que escapar demasiado el carácter # (ASCII 0 × 23) para ponerlo en un mensaje. Caracteres CR + LF (Carry return + line feed -ASCII 0x0D y 0x0A). CRC16-Código Modbus del mensaje entre SOH y CR + LF (no incluidos) (2 bytes hexadecimales) EOT (fin de transmisión - ASCII 0 × 04) Un ejemplo sería: [SOH] DATA # 2 # ASCII # ESTE ES EL MENSAJE [CR + LF] 9DD5 [EOT] El comando a ejecutar en formato HEX: 01 44 41 54 41 23 32 23 41 53 43 49 49 23 54 48 49 53 20 49 53 20 54 48 45 20 4d 45 53 53 41 47 45 0d 0a 39 44 44 35 04 Si el mensaje se envía correctamente, el módulo responderá con un mensaje ACK. La estructura de este marco es: Carácter SOH (inicio del encabezado - ASCII 0 × 01) Comando: ACK Caracteres CR + LF (Carry return + line feed -ASCII 0x0D y 0x0A). CRC16-Código Modbus del mensaje entre SOH y CR + LF (no incluidos) (2 bytes hexadecimales) EOT (fin de transmisión - ASCII 0 × 04) Un ejemplo de este mensaje sería: [SOH] ACK [CR + LF] D350 [EOT]
En el caso de un mensaje de difusión, no hay manera de garantizar que el mensaje se ha entregado. No se recibirá ACK en este caso. Si el mensaje no pudo ser entregado, el módulo devolverá un mensaje ERROR con "NOT SENT" en caso de que el módulo no pueda enviar el mensaje y "NOT RECEIVED" en caso de que no pueda confirmar que el mensaje ha sido recibido correctamente.