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.
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?
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.
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.
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.
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.
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.
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 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
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?