msgbartop
“¿Estás seguro de que ESO es aleatorio?” “Ése es el problema con la aleatoriedad: nunca puedes estar seguro”
msgbarbottom

07 ene 24 Sistema de telemetría 2.0, basado en ESP32

Hace ya algunos años, cuando aún vivíamos en Irlanda, desarrollé un sistema de telemetría casero para el Mercedes C180 Sportcoupe que teníamos allí, basado en una Raspberry Pi y un receptor GPS, junto con un conector OBD-II por Bluetooth para leer datos de la centralita del coche. Fue un sistema que estuvo funcionando estupendamente bien, pero que dejé de utilizar, por razones que no vienen al caso.

En fechas recientes me he decidido a revivirlo (también por razones que no vienen al caso), pero quería darle una vuelta de tuerca al sistema, para cambiar algunas características que -estando bien- no se amoldaban del todo a mis necesidades. La principal de ella es que el sistema original dependía de una conexión Bluetooth con un teléfono móvil que hiciera de módem sobre este medio, a fin de proporcionar conectividad al exterior. Buscaba que la nueva versión del entorno tuviera conectividad independiente, a fin de poder hacer seguimiento del coche de manera más sencilla. Mi primera idea fue conectar un modem USB a la Raspberry Pi, pero se trata de un modelo 2 de la RPi, que sólo dispone de 2 conexiones USB, y ambas estaban en uso: una para el receptor GPS, y otra para el dongle Bluetooth que se necesita para conectar con la centralita del coche. Pensé en portar todo a una RPi más moderna, pero fue aquí cuando entró en danza el siguiente artilugio:

LilyGO TTGO T-A7670G

LilyGO TTGO T-A7670G

Se trata de un dispositivo LilyGO TTGO T-A7670G. Se trata de un ESP-32 que proporciona, de manera simultánea, conectividad Bluetooth, zócalo para tarjetas de telefonía 4G, receptor GPS, e incluso un zócalo para conectar una batería 18650, todo ello en una sola placa. Ya tenía experiencia trabajando con ESP-32 en Arduino, lo cual era una gran ventaja para mí, además de trabajar con estos componentes por separado, pero nunca lo había hecho con una placa de fabricante que proporcionara todos estos elementos de manera integrada. Mucho mejor que tener que ir montando componentes por separado.

El fabricante, además, proporciona un repositorio en GitHub donde acceder a librerías, ejemplos de código, documentación, e incluso esquemáticos de carcasas, lo que ha hecho que haya podido imprimir una caja para el dispositivo:

TTGO con carcasa 3D y receptor GPS

TTGO con carcasa 3D y receptor GPS

Con todo esto, he podido realizar una nueva versión del sistema de telemetría, con las siguientes características:

  • Hago uso de una tarjeta de datos 4G española, de tipo MicroSIM, con un funcionamiento excelente. El sistema apenas consume sobre 2-3 MB de datos, haciendo envío de información cada 10 segundos a la plataforma.
  • La conectividad, como en el caso original, está basada en el envío de datos en formato JSON a un servidor MQTT. Posteriormente esa información es consumida de diversas maneras, tanto para proporcionar ubicación en tiempo real, como para realizar analítica de datos sobre el viaje. A diferencia del caso original, el envío de información se hace directamente al MQTT remoto, en vez de componer un MQTT local que se sincroniza con el remoto, cosa que se hacía para preservar el envío de información en caso de pérdida de conectividad. En este caso, he podido comprobar que no se producen pérdidas de datos significativas, por lo que he preferido simplificar.
  • El sistema hace uso del GPS integrado para recibir información GPS. Este es un punto importante en el caso de esta placa. Existen diversas variantes de la misma, con cobertura GPS regional, global, o sin cobertura GPS. En mi caso, hago uso de la placa “A7670G R2 With GPS”, que es el que proporciona cobertura GPS global, y más compatibilidad con sistemas de telefonía, pero tiene el detalle de que el módulo GPS no está integrado en la placa, sino como módulo anexo, en la trasera de la misma, junto al zócalo de la batería 18650. Esto implica que el modo de uso del GPS es distinto, haciendo uso de la librería GPSShield, en vez del ejemplo convencional que indica el fabricante. Esto me tuvo un tiempo dando vueltas, hasta que me di cuenta de ello.

    Tabla comprarativa de versiones A7670X

    Además, la placa viene con una antena GPS pasiva. Esto está bien si el dispositivo se encuentra directamente al aire libre, pero era problemático si estaba dentro de una casa o de un coche, ya que apenas tenía cobertura. Para solucionar este inconveniente tuve que hacer uso de una antena GPS activa con conector SMA, y hacer uso de un pigtail UFL/U.FL/IPX a RP-SMA/SMA. Nada grave, pero sí un poco molesto. Ahora bien, en cuanto dispuse de esta antena activa el sistema pasó a ser capaz de detectar señal GPS incluso en interiores. Todo una diferencia, y sin necesidad de reprogramar.

  • La telemetría OBD-II es algo que no he conseguido hacer funcionar aún del todo. Si bien la placa es capaz de conectar correctamente con mi conector OBD-II por Bluetooth, no es capaz de extraer correctamente los datos de la centralita. Hago uso para ello de la librería ELMduino, que conocía desde hace algunos años, pero con la que no he tenido resultados muy buenos hasta ahora. Antes hacía uso de un ESP-32 convencional, y esperaba que con esta placa funcionara mejor, pero no ha sido el caso. Puede ser tema del dongle Bluetooth, que es de los baratillos. He encargado otro, para probar, así que espero mejoras al respecto.

En estos días he estado haciendo algunas pruebas, y al margen de la captura de datos de la centralita, el resultado es bastante bueno. Espero poder seguir haciendo mejor al respecto en las próximas semanas.

VN:F [1.9.20_1166]
Rating: 0.0/10 (0 votes cast)

Etiquetas: , , , , , , , , ,