Usando utilidades estándar
Dado que los puertos serie se representan mediante archivos en Linux, se pueden usar utilidades estándar como echo y cat para interactuar con ellos. stty se puede usar para cambiar la configuración del puerto. Veamos cómo se utiliza cada una de estas aplicaciones.
Con stty, puedes configurar la velocidad en baudios del puerto, la cantidad de bits de datos, la paridad, el tipo de handshaking (también conocido como control de flujo) y otros parámetros. Esto puede ser necesario para interactuar con un dispositivo o una aplicación, ya que la mayoría de las veces los parámetros deben coincidir para que la conexión funcione.
Nota de Nick:
Ejecuté la siguiente demostración en Debian 11 (Bullseye) con una impresora SP-POS88VMF.
Sin embargo, también puedes probar los comandos proporcionados con una conexión null-modem entre dos puertos serie o USB a serie en el mismo equipo. En ese caso, tendrás que modificar el comando cat para que escuche en el otro puerto conectado, no en el que envía.
Usa el siguiente comando para listar la configuración actual de tu puerto:
sudo stty -a -F <your port>
Y este es un comando de ejemplo que configura la velocidad en baudios del puerto ttyS0 en 9600, los bits de datos en 8, y habilita el control de flujo RTS/CTS:
sudo stty -F /dev/ttyS0 9600 cs8 crtscts
Con la configuración adecuada seleccionada, podemos enviar datos al dispositivo con echo. Es posible enviar texto sin formato a un puerto serie con echo, así:
echo 'TEXT' > /dev/ttyS0
Sin embargo, para hacer esto, necesitas iniciar sesión como superusuario. Esto se puede hacer con el comando “su -”.
En nuestro caso, se necesitan símbolos ASCII especiales, como ESC y Retorno de carro, para aprovechar al máximo la impresora conectada. Una forma de hacerlo es usando el argumento -e de echo y secuencias de escape. Una secuencia de escape para caracteres ASCII se inicia con \x, seguida de un número hexadecimal que corresponde al carácter.
Por ejemplo, así es como se puede imprimir la palabra “TEXT” con secuencias de escape:
echo -e '\x54\x45\x58\x54'
Enviaremos los siguientes mensajes:
1B 40 |
(ESC @, Initialize) |
1B 6D |
(ESC m, Full Cut) |
4C 49 4E 45 20 31 |
("LINE 1") |
1B 21 80 |
(Enable Underline) |
4C 49 4E 45 20 32 |
("LINE 2") |
0D 0A |
(CR LF, New Line) |
1B 6D |
(Full Cut) |
Se necesita el argumento -e para permitir las secuencias de escape hexadecimales “\x”. Así es como se ve en el terminal y en la impresión resultante:
Mientras que echo puede usarse para enviar datos a través de una conexión serie, cat puede usarse para recibirlos. En nuestro caso, la impresora responderá a las solicitudes estándar ESC/POS de estado e información de ID. Esto significa que necesitaremos capturar las respuestas. Primero, iniciaremos cat, escuchando el dispositivo ttyS0 y redirigiendo la salida a un archivo de texto:
cat /dev/ttyS0 > examplefile
La aplicación debe seguir ejecutándose para recibir datos, por lo que es necesario abrir una nueva ventana o pestaña de Terminal para enviar solicitudes a nuestro dispositivo. Usaremos echo para enviar lo siguiente:
1D 49 31 |
(Request model ID) |
1D 49 32 |
(Request type ID) |
Dado que las respuestas se proporcionarán en formato hexadecimal, la salida directa de cat, que se registró en “examplefile”, no será legible para los humanos. En su lugar, ejecutaremos el archivo a través de hexdump:
Usando gtkterm
Linux también proporciona terminales serie como minicom y gtkterm que pueden interactuar de forma integral con los puertos serie, gestionando tanto la entrada como la salida, ofreciendo más opciones de formato y facilitando las cosas en general.
Como ejemplo, probaremos gtkterm. De forma similar a stty, gtkterm necesita iniciarse con argumentos de línea de comandos para especificar la configuración de la conexión, si los valores predeterminados no son adecuados.
Nota de Nick:
Aunque Minicom es una herramienta muy flexible, los controles complicados la hacen inadecuada para el uso por parte de principiantes, y difícil de cubrir en una guía rápida. Si quieres empezar a aprender sobre Minicom, comienza con su página man para evitar confundirte una vez que inicies la aplicación.
Algunas opciones útiles incluyen eco local (para duplicar los datos que envías en tu lado), registro, vista hexadecimal y envío de datos hexadecimales. Además, ten en cuenta los indicadores en la parte inferior derecha: muestran los estados de las líneas de señal DTR, RTS, CD, DSR y RI; es otra forma de ver que el dispositivo está conectado y preparado para recibir datos.