Android

Usando BLE en impresora térmica Bluetooth

En este post te voy a relatar mi intento de comunicarme con una impresora térmica Bluetooth usando BLE o Bluetooth Low Energy.

Al final ya no lo usé y utilicé en su lugar el Bluetooth clásico, Bluetooth serial o RFCOMM, pero vengo a explicarte las razones.

Sobre BLE

BLE es bueno para sensores o cosas que no necesitan intercambiar mucha información y que además necesitan que la batería rinda mucho tiempo.

En cambio BLE no funciona para los casos en donde se transfiere mucha información, ya que incluso tiene un límite según el MTU (unidad máxima de transferencia).

Mi problema con la impresora y BLE

Imprimiendo imagen usando Bluetooth desde Android – Impresora térmica PT-210

La impresora térmica que yo tengo (PT-210) también soporta BLE, y se puede imprimir correctamente excepto cuando envías demasiados datos, aproximadamente más de 600 bytes.

Esto no quiere decir que BLE no funcione, solo que no puedes usar BLE para enviar varios datos.

Por otro lado, BLE usa características y servicios, tuve que buscar y encontrar la característica adecuada para escribir y poner una bandera para no escribir en varias características.

Descubrí el problema cuando intenté imprimir una imagen, pues la misma salía recortada o los siguientes comandos no eran reconocidos.

Tratando de escribir por pedazos

Obviamente la primer solución (y la más obvia) en la que pensé fue dividir los bytes según el MTU y enviarlos en trozos, pedazos, chunks o como le digas.


print("Escribiendo...");
int chunkSize = 1;
int index = 0;

while (index < datos.length) {
  var chunk = datos.skip(index).take(chunkSize);
  await caracteristica.write(chunk.toList());
  index += chunkSize;
}

Así es como lo hice, fui probando la medida y parecía que 600 era la respuesta.

Pero ahora aparecía otro problema: la imagen aparecía con una línea blanca. Y no era problema del algoritmo que la convierte a blanco y negro y luego a bytes.

Al final la única solución fue reducir el tamaño de los pedazos a una longitud de 1, es decir, escribir un byte a la vez.

Y así podía enviar imágenes y comandos de cualquier tamaño, pero tardaba muchísimo, yo creo que aproximadamente 5 minutos para imprimir una imagen.

Solución

Entonces decidí buscar una alternativa, puesto que a mí no me interesaba usar BLE, yo solo quería comunicarme con una impresora térmica usando Bluetooth, así que opté por usar Bluetooth clásico y todo funcionó de maravilla, además de que no tuve que buscar características ni servicios.

Así es como pude realizar mi plugin para impresoras térmicas con Bluetooth:

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

3 días hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

3 días hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

3 días hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

3 días hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

3 días hace

Solución: Apache – Server unable to read htaccess file

Ayer estaba editando unos archivos que son servidos con el servidor Apache y al visitarlos…

3 días hace

Esta web usa cookies.