Para que isso seja possível, deve se dispor a ler uma documentação da Epson sobre Comandos ESC/POS. Um documento de masi de 600pag pra ser mais preciso. Mas depois disso tudo vira doce :)

 

"O comando ESC/POS é sistema de comandos da impressora desenvolvido pela EPSON. Permite-lhe controlar diretamente todas as funções da impressora. Usar os comandos com o controlador, pode usar uma função que não seja fornecida pelo controlador.

Comparado com a utilização dos controladores, a utilização dos comandos é difícil pois precisa conhecer as especificações detalhadas e sobre como combinar os comandos.

De modo a utilizar os comandos ESC/POS , deve assinar o nosso contrato de confidencialidade e obter o guia de programação da aplicação ESC/POS. Para mais informações, por favor contacte o seu representante."

 

No google é possível encontrar essa documentação!!!

http://nicholas.piasecki.name/blog/wp-content/uploads/2009/12/ESC-P...

 

Aqui um pouco do código que fiz e estou usando para testar minha impressora, um Epson TM-T88 Serial

Saudações Rapaziada.

 

#include <SoftwareSerial.h>
SoftwareSerial printer(2,3); // Pino TX, RX do max232 que converte TTL para Serial Impressora. http://www.sparkfun.com/images/tutorials/BeginningEmbedded/4-UART/U...
void setup(){
Serial.begin(9600);
printer.begin(9600);
}
void loop() {

// Imprime o valor dentro de codBuffer a cada 500milisegundos

delay(500);
codeHeight(100); //ALTURA DO COD
printPosition(2); //POSICAO DA IMPRESSAO DECIMAL: 2=Abaixo do Codigo
codeWidth(3); //LARGURA DO CODIGO. Valor entre 0 e 6
fontTipe(0); //TIPO DA FONTE. Valor entre 0 e 3

printer.println("(: RODRIGO :)"); //Imprime o valor e clama uma nova linha
char codBuffer[12] = {'9','9','9','9','9','9','9','9','9','9','9','9'}; //Imprime Array
// ===========PRINT BAR CODE ============= //
printer.write(byte(29)); //GS
printer.write(byte(107)); //k
printer.write(byte(0)); //m
for (byte i=0; i<sizeof(codBuffer);i++){
printer.write(byte(codBuffer[i]));
}
printer.write(byte(0)); //Terminador
// ===========END PRINT BAR CODE ============= //
paperFeed(5); //Avanca 5 linhas em branco
cutPaper(); //Corta papel
}
// ***************** CUTPAPER ******************** //
void cutPaper(){ //Corta papel da impressora
printer.write(byte(0x1D));
printer.write(byte(0x56));
printer.write(byte(0x00));
}
// ***************** CODEHEIGHT ******************** //
void codeHeight(byte val){ //ALTURA DO CODIGO
printer.write(byte(0x1D)); //GS
printer.write(byte(0x68)); //h
printer.write(byte(val)); //Altura do Cod Range[0-255]
}
// ***************** PAPERFEED ******************** //
void paperFeed(byte val){ //Avanca Papel qntidade de linhas especificadas na chamda da funcao
for(byte i=0;i<val;i++){
printer.write(byte(0x0A));
}
}
// ***************** ROTATE ******************** //
void rotatePrint(){ //ROTAR
printer.write(byte(0x1B)); //ESC
printer.write(byte(0x56)); //V
printer.write(byte(49)); //n
}
// ***************** POSICAO DA IMPRESSAO DECIMAL ******************** //
void printPosition(byte val){ //POSICAO DO CODIGO DEC
printer.write(byte(0x1D)); //GS
printer.write(byte(0x48)); //H
printer.write(byte(val)); //n
/* ============================= /
[0] Não impresso
[1] Acima do codigo
[2] Abaixo do Codigo
[3] Acima e Abaixo do Codigo 
/ ============================= */
}
// ***************** DIRECAO DA IMPRESSAO ******************** //
void printDirection(int val){ //DIRECAO DA IMPRESSAO
printer.write(byte(0x1B)); //ESC
printer.write(byte(0x54)); //T
printer.write(byte(val)); //n
/* ============================= /
[0] Esquerda para a Direita
[1] Base para o Topo
[2] Direita para Esquerda
[3] Topo para Base
/ ============================= */
}
// ***************** FONTE ******************** //
void fontTipe(int val){ //DIRECAO DA IMPRESSAO
printer.write(byte(0x1D)); //GS
printer.write(byte(0x66)); //f
printer.write(byte(val)); //n
/* ============================= /
[0] Fonte A
[1] Fonte B
[2] Fonte c
/ ============================= */
}
// ***************** CODE WIDHT ******************** //
void codeWidth(int val){ //LARGURA DO CODIGO
printer.write(byte(0x1D)); //GS
printer.write(byte(0x77)); //w
printer.write(byte(val)); //n 2< n <6, 68< n <76
}
// ***************** CODE PRINT ******************** //
void setArea(){
printer.write(byte(0x1B)); //GS
printer.write(byte(0x57)); //w
printer.write(byte(255)); //xl
printer.write(byte(255)); //xh
printer.write(byte(255)); //yl
printer.write(byte(255)); //yh
printer.write(byte(104)); //dxl
printer.write(byte(1)); //dxh
printer.write(byte(126)); //dyl
printer.write(byte(6)); //dyh
}
// ***************** VERTICAL PRINT ******************** //
void setMotionUnit(){
printer.write(byte(0x1D)); //GS
printer.write(byte(0X50)); //P
printer.write(byte(0)); //x
printer.write(byte(0)); //y
}

Exibições: 5123

Responder esta

Respostas a este tópico

Muito Bom!! Parabéns!

estou tentando comunicar uma impressora termica da daruma modelo DR700, reparei que eles ultilizam o comando ESC/POS e também estou utilizando um arduino uno

mas não consigo de forma alguma enviar os comandos para impressora.

o fabricante oferece alguns exemplos em outros codigos nesta pagina 

http://www.desenvolvedoresdaruma.com.br/home/downloads/Site_2011/He...

Voce tem que conseguir a lista de comandos ESC/POS da sua impressora. Depois é só interpretar a linguagem e transformar para C+, que é a liguagem que programamos em Arduino. Ai só vai!

Abs.

Essa documentacao (ANEXO) deve servir.

Anexos

Ressuscitando o tópico...

Alguém conseguiu comunicar o arduino com a impressora daruma?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço