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
}
Tags:
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.
Ressuscitando o tópico...
Alguém conseguiu comunicar o arduino com a impressora daruma?
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por