Actualizando el firmware del Dragino LDDS75: sensor LoRaWAN de distancia
A raíz del 'shutdown 🛑' de los servicios de The Things Network V2 a fecha 1 de Diciembre de 2021, como sabréis, uno de los pasos necesarios para migrar a la nueva solución The Things Stack Community Edition (conocida como TTNV3) era migrar tanto dispositivos como gateways.
Os recordaré, que desde la Cátedra MediaLab de la Universidad de Oviedo, realizamos algunos proyectos el año pasado que utilizaban entonces TTNV2, por lo que era necesario mover todo lo que teníamos a la nueva versión.
El proceso fue bastante sencillo, sólo hubo que seguir los pasos que aparecen en la documentación online para migrar a TTNV3.
Eso sí, durante este proceso, nos encontramos con un problema en uno de los sensores que utilizamos, exactamente con el sensor Dragino LDDS75.
Es un sensor de distancia que empleamos para la monitorización del caudal del Arroyo de San Miguel que transcurre por el Campus de la Escuela de Ingeniería Politécnica de Gijón.
Por alguna extraña razón, al registrar el dispositivo en la nueva consola de TTNV3, siguiendo los pasos descritos para migrar dispositivos registrados por el método OTAA (Over The Air Activation), el sensor no era capaz de iniciar sesión con el servidor y por tanto, era imposible de recibir sus datos 😭.
Por tanto, no nos quedó otra que volver a 'descolgarnos' para poder llevarlo a quirófano 🏥 y ver si podíamos recuperarlo...💪
Actualizando el firmware del LDDS75
Una vez de vuelta el sensor en nuestras manos y llevado al MediaLab, no quedaba otra que ver cómo podíamos recuperarlo y configurarlo para ser capaces de añadirlo a TTNV3 y así poder volver a recibir sus datos.
Como siempre digo, no hay nada mejor y más veraz que revisar la documentación oficial, en este caso, la que ofrece el propio fabricante Dragino para el sensor LDDS75, disponible de forma online para su consulta y descarga.
Nuestra sorpresa 😯 fue encontrar, que se había publicado un nueva versión de firmware para poder cargar al dispositivo. En nuestro caso, el sensor venía de fábrica con la versión v1.0.3, por lo que decidimos que era la oportunidad perfecta de actualizar a la versión más reciente, la v1.1.4, publicada en Mayo de 2021.
⚡Es 100% recomendable tener siempre actualizados tus dispositivos a la versión más reciente, ya que suelen corregir fallos y/o introducir mejoras.
Si tienes interés en saber qué errores se han corregido o qué mejoras se han introducido en cada versión publicada, te recomiendo consultes el archivo 'Changelog' que contiene el registro de cambios.
Bueno... en este caso, el archivo lo han llamado Readme.txt 🤷♂️😅
A continuación, la lista de cambios introducidos en las dos últimas versiones publicadas:
Importante destacar las mejoras que se introdujeron en la v1.1.3
- Mejora en el consumo de potencia a 5µA ⚡
- Soporte para añadir un sensor digital de temperatura DS18B20 🌡
Por tanto, con la actualización, no sólo mejoraremos el funcionamiento de nuestro sensor, sino que además, cabe la posibilidad de añadir un nuevo sensor al mismo con el fin de monitorizar, por ejemplo, la temperatura que tiene el arroyo.
El proceso de actualización es sencillo, una vez tienes el material necesario y el software adecuado.
Así que os voy ahorrar la búsqueda 😉... se necesita:
- Archivo del firmware que se corresponda con tu región LoRaWAN. Para nuestro caso, Europa EU868, utilizaremos el binario LDDS75_EU868_V1.1.4.hex.
- Conversor USB-TTL
- 3 cables Dupont
- Software Serial Port Utility
- Software Flash Loader STM32
Conexionado USB-TTL LDDS75
Para realizar la carga del nuevo firmware en el sensor, necesitamos abrir el mismo para poder acceder a los pines del UART (Universal Asynchronous Receiver-Transmitter). Una vez retirados los 4 tornillos que sellan la tapa del sensor, este quedará a la vista en la placa.
La conexión entre el conversor USB-TTL y los pines UART del dispositivo es la siguiente:
- Conectar USB-TTL TXD ↔ UART_RX
- Conectar USB-TTL RXD ↔ UART_TX
- Conectar USB-TTL GND ↔ GND
- Colocar el interruptor SW1 a la posición ISP
- Conectar el jumper JP2 (de color amarillo 🟡) para que haga contacto entre los 2 pines y así alimentar ⚡ el dispositivo.
Cargando el nuevo firmware
Una vez tengamos conectado el sensor al PC mediante el conversor USB-TTL, procederemos a cargar la nueva versión del firmware en la placa.
Para ello, utilizaremos el software Flash Loader STM32 que anteriormente hemos descargado.
Los pasos para realizar la carga son los siguientes:
- Abrir el programa Flash Loader STM32.
- Elegir el puerto COMX correcto para actualizar el dispositivo.
- Configurar los parámetros para la conexión serie (Baud Rate: 115200, Data Bits: 8, Parity: Even, Echo: Disabled, Timeout(s): 10)
- Con el dispositivo en modo ISP. Presionar el botón Reset, y en el programa, click sobre Next. El software detectará automáticamente el tipo de placa.
- Una vez detectada, seleccionar la primera de las líneas, Page0 y click sobre Next.
- Cargar el binario [...] que contiene la actualización. En nuestro caso LDDS75_EU868_V1.1.4.hex y asegurarse de dejar los parámetros por defecto como aparecen en la imagen. Importante dejar seleccionada la casilla Verify after download ✅
- Click sobre Next. Ahora el software comenzará a escribir el nuevo firmware en la placa. Una vez completada la escritura, realizará una verificación comprobando que se ha cargado correctamente.
- Ahora ya se puede proceder a cerrar el programa.
- Una vez cargado el nuevo firmware⚠️MUY IMPORTANTE⚠️ volver a dejar el interruptor SW1 en la posición FLASH y presionar de nuevo el botón de Reset para que se ejecute la nueva versión a la que hemos actualizado el dispositivo.
Configurar las nuevas claves del dispositivo mediante comandos AT
Con el nuevo firmware cargado en el dispositivo, ahora es necesario configurar las claves para que podamos registrarlo en TTNV3.
La configuración de las mismas se realiza mediante comandos AT.
El sensor LDDS75 acepta un gran número de comandos AT, pero a continuación se listarán únicamente aquellos que son necesarios para registrar nuestro dispositivo a través del método OTAA.
Para ello, utilizaremos el software Serial Port Utility que anteriormente hemos descargado.
⚠️Las conexiones hardware USB-TTL ↔ LDDS75 son las mismas que se han descrito anteriormente, pero con el SW1 en la posición FLASH
Para configurar las nuevas claves, primero necesitaremos obtenerlas registrando el dispositivo en nuestra aplicación de TTNV3 mediante el método OTAA.
En esta ocasión, utilizaremos el Device Repository, que nos facilitará la configuración posterior para recibir los datos.
Para registrar el dispositivo mediante método OTAA, son necesarias las siguientes claves:
- APP EUI
- APP KEY
- DEV EUI
⚠️Algunos servidores pueden que no necesiten el APP EUI ⚠️
Dichas claves se obtienen una vez se ha registrado el dispositivo.
Una vez obtenidas, necesitamos configurar nuestro dispositivo con las nuevas claves mediante comandos AT utilizando el software Serial Port Utility.
A continuación se muestra la configuración de los parámetros necesarios para poder comunicarse con el sensor LDDS75.
⚠️¡Utiliza el puerto COMX donde esté conectado tu dispositivo!
Todos los comandos AT tienen un formato estándar como "AT+XXX", con XXX denotando el comando.
Hay 4 comportamientos de comandos disponibles:
- AT+XXX? proporciona una breve ayuda del comando dado, por ejemplo AT?
- AT+XXX se utiliza para ejecutar un comando, por ejemplo AT+JOIN
- AT+XXX=? se utiliza para obtener el valor de un comando dado, por ejemplo AT+TDC=?
- AT+XXX=<valor> se utiliza para proporcionar un valor a un comando, por ejemplo AT+SENDB=12:12a0ff
La salida de los comandos se proporciona en la ventana superior de la herramienta Serial Port.
A continuación se listan los comandos AT necesarios para configurar nuestro sensor LDDS75 por método OTAA.
Escribiremos cada comando en la ventana de abajo de la utilidad (siempre seguidos de una nueva línea en blanco) y pulsaremos sobre SEND:
- Siempre que se haya actualizado el firmware del dispositivo, el primer comando a ejecutar es AT+FDR Esto es para restablecer el dispositivo a la configuración de fábrica (FDR = Factory Data Reset) del nuevo firmware.
- AT+APPEUI=XX XX XX XX XX XX XX XX (sustituir las XX por la clave de 8 bytes obtenida al registrar el dispositivo en TTNV3)
- AT+APPKEY=XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX (sustituir las XX por la clave de 16 bytes obtenida al registrar el dispositivo en TTNV3)
- AT+DEUI=XX XX XX XX XX XX XX XX (sustituir las XX por la clave de 8 bytes obtenida en la pegatina del propio dispositivo)
- AT+JOIN iniciará el proceso de inicio de sesión en el servidor LoRaWAN (en este caso TTNV3)
- Opcional: AT+TDC=900000 modifica el intervalo de tiempo (en milisegundos) del envío de los datos. En nuestro caso, hemos configurado el sensor para que realice envíos cada 15 minutos=900000 ms
- Recomendable: AT+CFG imprimirá por pantalla todas las configuraciones que dispone el dispositivo, permitiendo comprobar que los valores introducidos son los correctos.
Ejemplo de salida del comando AT+CFG para un sensor LDDS75 con firmware v.1.1.4 EU868:
AT+CFG
Stop Tx events,Please wait for all configurations to print
AT+MODEL=LDDS75,hardware version:LSN50 RS-485-UART-I2C V1.3
AT+DEUI=XX XX XX XX XX XX XX XX
AT+DADDR=XX XX XX XX
AT+APPKEY=XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
AT+NWKSKEY=XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
AT+APPSKEY=XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
AT+APPEUI=XX XX XX XX XX XX XX XX
AT+ADR=1
AT+TXP=0
AT+DR=5
AT+DCS=0
AT+PNM=1
AT+RX2FQ=869525000
AT+RX2DR=3
AT+RX1DL=5000
AT+RX2DL=6000
AT+JN1DL=5000
AT+JN2DL=6000
AT+NJM=1
AT+NWKID=00 00 00 00
AT+FCU=1
AT+FCD=0
AT+CLASS=A
AT+NJS=1
AT+RECVB=0:
AT+RECV=0:
AT+RJTDC=20
AT+RPL=0
AT+VER=v1.1.4 EU868
AT+CFM=0
AT+CFS=0
AT+SNR=0
AT+RSSI=0
AT+TDC=900000
AT+PORT=2
AT+RX1WTO=6
AT+RX2WTO=9
AT+MOD=1
AT+INTMOD=0
AT+5VT=0
AT+CHS=0
AT+DDEBUG=0
Start Tx events
OK
BONUS 🎰:
Como anteriormente se mencionó, una de las mejoras que incluye el nuevo firmware (y que seguramente mucha gente desconozca 😅) es que se puede conectar un sensor externo DS18B20 (que utiliza el protocolo 1-Wire) mediante su conexión a los pines +3.3v, 1-wire y GND.
Según la documentación oficial, la revisión de placa hardware ha de ser >v1.3, la cual ha sido fabricada a principios de 2021.
Con ello conseguiremos que el sensor LDDS75 además de enviar los datos de distancia y batería, pueda enviar el dato de temperatura obtenido por el sensor DS18B20.
El nuevo payload de enlace ascendente (uplink) introducido por el firmware v.1.1.4 ocupa 5 bytes y tiene la siguiente estructura.
Al haber registrado el dispositivo desde el Device Repository, no será necesario configurar el Payload Formatters, ya que automáticamente ✨ es configurado desde el repositorio y recibiremos la trama de los datos ya decodificados.
Carcasa impresa en 3D
Diseño de MediaLab, público y descargable ⬇ a través del siguiente enlace.
Referencias y enlaces de interés: