Conexión a impresora con lenguaje TSPL con módulo RS232

¡Hola comunidad!

Me interesa poder comunicar una impresora (En el anexo 1 se encuentra el manual de la impresora, comandos de impresión, etc) la cual tiene una interfaz RS-232, con arduino uno, para esto planeo utilizar el módulo MAX232 (Ilustración 1). El problema está en que no logró hacerla imprimir ni recibir información de la impresora por el monitor serial.

Ilustración 1:

He leído en hilos anteriores algo parecido, sin embargo no he encontrado la solución, por eso es que abro uno nuevo.

El código que estoy utilizando para la prueba es el siguiente:

#include <SoftwareSerial.h>

#include "thermalprinter.h"

int printStatus = 0;
#define rxPin 5
#define txPin 6

Epson TM88 = Epson(rxPin, txPin); // init the Printer with Output-Pin

void setup()
{

  Serial.begin(9600); //open the USB connection too
  TM88.start();  

  delay(1000);
  printStatus = TM88.getStatus(); 
  Serial.println(printStatus);   

}

void loop()                     // run over and over again
{
  
  printStatus = TM88.getStatus(); 
  Serial.println(printStatus);   
  delay(2000);
               // waits for a second
}

Estoy utilizando la librería TM88 que encontré en github. Igualmente intenté con la librería de adrafruit y no lo he conseguido.

Ojalá me puedan apoyar a ver qué es lo que estoy haciendo mal o ¿qué camino debo tomar?

¡De ante mano, muchas gracias!

Anexo 1: (IMPRESORA DE ETIQUETAS - Google Drive)

Me falto comentar mis conexiones:
He intentado uniendo (RTS -> CTS)
(DSR -> CD -> DTR)

Incluso seguido el esquemático que viene en el manual

Más no he tenido éxito.

En realidad en tu código no imprimes nada.
En algún lado te falta llamar al objeto creado TM88.
Agrega en el loop
TM88.println("Hola mundo ");

¿Entre el arduino y el modulo RS232 estas cruzando los cables rx tx?

Primero muchas gracias por su interés en ayudarme. Tiene razón Peter, se me pasó comentar que antes realice pruebas así como lo menciona, pero al no tener éxito pase a ver si la impresora me mandaba algún código de error por el monitor serial.

Entre el arduino y el módulo intente conectando Rx -> Tx | Tx -> Rx. Al no tener éxito lo intente a la inversa de cada uno, obteniendo el mismo resultado que al principio.

Una pregunta, el MAX232 lo conectas directamente a la impresora o a traves de un cable?

Hay varias formas de conectar dos RS-232 teniendo en cuenta que los pines numeran al contrario el macho (Impresora) de la hembra (MAX232).
imagen

La mas basica que casi "siempre" funciona:
imagen

Módem null sin protocolo de enlace:
imagen

Módem null con protocolo de enlace:
imagen

Hola Tresvdoble!
Muchas gracias por su respuesta y propuestas.

Le comparto una imagen de como tengo mis conexiones.

De la salida del cable de la impresora lo tomo como si fuera macho (1 del macho con 1 del hembra ... n del macho con n del hembra) y del conector que sale del módulo MAX232 lo tomo como hembra

Intenté las tres propuestas que mencionó anteriormente, mas no he tenido éxito. Intenté con diferente código para ver si obtenía otro resultado pero fue el mismo.

#include "SoftwareSerial.h"
#define TX_PIN 6 
#define RX_PIN 5 
 
SoftwareSerial mySerial(RX_PIN, TX_PIN);

void setup() {
  pinMode(TX_PIN, OUTPUT);
  pinMode(RX_PIN, INPUT);
  mySerial.begin(9600);
  mySerial.println("Hola Mundo");
}
void loop () {
  mySerial.println("Hola Mundo");
  delay(1000);
}

Ojalá tengan alguna propuesta que pueda llevarla a la práctica. De antemano muchas gracias!

No me me convecen estas dos lineas

Creo que los pines de mySerial no hacen falta que sean declarados cual es el de entrada y salida, no se si eso efectara.

A nivel de hardware yo haria la siguiente prueba, tal como lo tienes montado en la breadboart, levanta los dos cables que correspondan a los pines 2 y 3 del lado del MAX232 y con otro cable los unes.

Deberia aparecerte el mensaje en la ventana del Monitor Serie, pruebalo con la forma basica y/o Módem null sin protocolo de enlace

Edito: Acabo de darme cuenta de que en tu foto no se ve encendido el led D1 de que el modulo este alimentado.

He retirado esas líneas del código sin embargo, no logró imprimir.
Igualmente no logré que mostrará un resultado a unir los cables. Lo que hice fue unir el pin 2 y el pin 3.
Al no tener éxito agregue al código "Serial.begin(9600)" por en caso de que hubiera faltado pero no mandó nada por el monitor serial.

Como dato: Note que se calienta mucho el circuito integrado MAX232, en su datasheet dice que se puede alimentar de 3.3 a 5.5V lo estoy haciendo con los 5V que salen del arduino.

Como otro dato para ver si notan algún error. Así lo tengo en el Dip switch

SW1 - OFF
SW2 - ON
SW3 - OFF
SW4 - OFF
SW5 - OFF
SW6 - ON
SW7 - ON
SW8 - OFF

Si no recibes nada en el Monitor serie el problema está entre el MAX232 y el Arduino, lo de que se caliente mucho no se si es normal porque no lo he usado nunca.

Prueba a unir los pines 5 y 6 en el arduino y tienen que aparecer los mensajes por Monitor Serie

Actualización:
Revisando el manual note que el pin 6 es DTR (Data Terminal Ready). Y con otra información en internet nos dice que el pin 6 es DSR (Data Set Ready) lo cual siempre lo conecte considerando la información que encontré en internet, me parece raro que en el manual diga que es otra cosa.

Aún así al realizar ese cambio dejó de calentarse el circuito.

No me queda muy en claro cómo conectar CTS/DSR

Actualización:

Empece a recibir números en el monitor serial:
255 y en ocasión el número 22
No pasa de ahí, no he podido imprimir.

Nota:
Acabo de notar que si no mandó ningún texto en el código, el estado de la impresora siempre es 22.

Cuando le agregó el comando de imprimir, es cuando en el monitor aparece 255 y de repente 22.

DTR es la señal del lado del terminal, le indica al controlador (sea un ordenador o en tu caso el arduino) que el terminal (o sea la impresora) está lista (Data Terminal Ready = Terminal de datos listo)
DSR es la señal complementaria del lado del controlador (ordenador, arduino, etc.), le indica al terminal que hay datos listos para ser enviados (Data Set Ready = Paquete de datos listo).

Según el protocolo que se utilice, se usará una u otra señal, o ambas. Por ejemplo, el ordenador "sabe" cuando enviar datos a la impresora según el estado de la línea DTR. Análogamente la impresora se prepara para recibir datos según el estado del DSR del ordenador.

Obviamente en una conexión modem nulo esas señales no se utilizan, se supone que el terminal (en tu caso la impresora) puede recibir los datos y listo, se envían y si no los puede procesar "problema de la impresora".

Agrego:

Tienes que hacer lo que te señaló @tresvdoble , puntear los pines Rx y Tx que usas con SoftwareSerial pero sin conectar el módulo, haciendo eso tendrías que ver el eco de lo que envías desde la terminal de arduino.

Si no lo ves el problema está en el código.

Saludos

Hola Gatul, antes que nada agradezco te unas a la conversación e intentes ayudarme con este problema!

Agradezco igualmente la información proporcionada acerca de DTR y DSR, me queda más claro.

Acerca de lo que me comentas de puentear Rx y Tx que uso con Software Serial, el dato proporcionado en monitor es -1

¿Qué representa el -1?

Nota: Me parece interesante saber que ya recibo datos de la impresora (aunque sea mínimo) el número 22 y el número 255. Me parece que para poder lograr imprimir deberé hacer algunas uniones con los otros cables del DB9. En el manual viene que debo mandar el RTC y DTR (puenteados) -> a CTS/DSR
He intentando algunos arreglos pero no logro concluirlo. ¿Tendrá alguna sugerencia que pueda seguir?

Para colaborar que lo que estoy viendo no es "ruido" u otra cosa ajena a la impresora, abrí la tapa de la impresora y ahora en vez de recibir "22" recibí "30"

Por desgracia no toda la informacion que circula por internet es correcta incluidos algunos manuales aunque sean oficiales.

Existe un protocolo de capa fisica para comunicarse un ordenador por puerto serie y otro dispositivo con puerto serie (normalmente un modem analogico), el protocolo se llama precisamente RS232.

Antiguamente se denominaban ETD (Equipo Terminal de Datos normalmente un PC, DTE en en ingles) y ETCD (Equipo Terminal del circuito de Datos normalmente el modem, DCE en ingles), aunque tambien se pueden conectar PC<->PC, PC<->Impresora, etc, en tu caso es un arduino con una Impresora pero como arduino no maneja el protocolo RS232 le tienes que poner el MAX232 que convierte las señales de arduino a protocolo RS232 y viceversa, esto todabia se arrastra aunque con algunas consideraciones, como ya he comentado lo normal es que con imagen funcione la conexion entre ambos, aunque algunos equipos son mas exquisitos y requieren de un conexionado mas completo como te mostraba en el post post #7,

La secuencia de comunicacion a nivel fisico es el siguiente:
El equipo (PC) cuando quiere transmitir ........

No sigo porque me enrollo y no viene al caso :slight_smile:

Vamos a ir acotando el problema.

¿Pero con el bucle en los pines 5 y 6 de Arduino o con el bucle en 1 y 2 del conector Hembra del MAX232?

Ahora te falta ver en el manual que significa el 22 y el 30, ¿no?

Saludos

Gracias Joaquín por compartir su conocimiento, es muy interesante entender cómo funciona el Rs232.

Respondiendo a su pregunta; obtengo los resultados en el monitor serial cuando tengo conectado la impresora al módulo y el módulo al arduino.

Y contestando a Gatul, el 22 significa que la impresora está lista (online) y el 30 marca un error en la compuerta de la impresora.

Ahora veo que hay una comunicación con la impresora ya que me responde al estado en el que está, pero no logró hacerla imprimir