Bas BotBerg quería usar una impresora térmica portátil Bluetooth para sacar reportes de los datos de sensores que recolecta un microcontrolador ESP32-C3. Como pasa tan seguido hoy, el único camino oficial para hablarle a la impresora era una aplicación de teléfono propietaria que entrega el fabricante. Sin documentación de cómo funciona el aparato, se puso a hacer ingeniería inversa del protocolo de comunicación de la impresora para controlarla desde el microcontrolador. La ruta que tomó es distinta de la que se ve normalmente. Funciona como caso de estudio para quien tenga en mente un proyecto parecido.

¿Cuál es el método habitual?

El procedimiento estándar para algo así, si es que se le puede llamar procedimiento, consiste en usar la capacidad de depuración que trae Android para registrar las comunicaciones Bluetooth mientras corre la aplicación del fabricante. El archivo que resulta se carga en Wireshark y, con paciencia y algunas conjeturas informadas, normalmente se llega a deducir los distintos comandos y valores que se le pasan al hardware.

En este caso Bas BotBerg dejó de lado el software del fabricante. En su lugar usó una aplicación capaz de consultar un dispositivo y listar sus servicios y características de Bluetooth de baja energía. Concretamente busca los servicios marcados como escribibles. A esos les empieza a empujar datos, para ver cómo responde la impresora.

Para eso trabaja con Python y la biblioteca Bleak, porque le permite iterar y adaptar el código rápido. Después de un rato de hurgar y experimentar, da con la fórmula exacta que hace arrancar el motor de la impresora y avanzar el papel. Ese es el primer hito crítico. El papel se mueve, así que el camino es el correcto.

De Python en el notebook a C++ en el microcontrolador

Una vez que Bas BotBerg tuvo mapeado qué datos había que enviar a qué puntos para operar la impresora desde Python, mandar esas mismas cargas útiles con código C++ en el ESP32 resultó un proceso relativamente directo. Como remate incorporó además la biblioteca Adafruit GFX, para poder generar íconos y dar formato a la salida de la impresora con menos trabajo.

No parece que Bas BotBerg haya publicado el código en este caso, aunque quizá si todos se lo pedimos amablemente. Antes se han visto esfuerzos parecidos para llevar controladores de código abierto a estas impresoras Bluetooth baratas, en beneficio de la comunidad.