So I have been writing an Android app for a Bluetooth Printer for a while and I have realised that this is actually the ESC/POS standard: http://nicholas.piasecki.name/blog/wp-content/uploads/2009/12/ESC-POS-Command-Guide.pdf
Now the document I am using for my printer is a limited subset of these commands and can be found here: https://dl.dropboxusercontent.com/u/88265006/%E4%BA%A7%E5%93%81/Printer's%20user%20manual/SP-MP-300-Technical%20Manual.pdf
private void initPrinter() {
byte[] init = new byte[2];
init[0] = 0x1B;
init[1] = 0x40;
mService.write(init);
}
private void printText(String message){
byte[] send;
try{
send = message.getBytes("UTF8");
}
catch(UnsupportedEncodingException e){
send = "Error".getBytes();
}
initPrinter();
mService.write(send);
}
I can connect to the printer, initialise it with an "ESC @" command and I can write with the above commands, but I cannot seem to get any of the "visual" effects in terms of ANY kind of barcode. This is my attempt for a 1D EAN13 code (0000000000000):
byte[] height = new byte[3];
height[0] = 0x1D;
height[1] = 0x68;
height[2] = (byte)30;
//height[3] = 0;
byte[] width = new byte[3];
width[0] = 0x1D;
width[1] = 0x77;
width[2] = (byte)3;
byte[] textPos = new byte[3];
textPos[0] = 0x1D;
textPos[1] = 0x48;
textPos[2] = (byte)2;
byte[] level = new byte[3];
level[0] = 0x1D;
level[1] = 0x51;
level[2] = (byte)32;
byte[] code = new byte[18];
code[0] = 0x1D;
code[1] = 0x6B;
code[2] = 0x02;
code[3] = 0x0D;
code[4] = 0x30;//1
code[5] = 0x30;//2
code[6] = 0x30;//3
code[7] = 0x30;//4
code[8] = 0x30;//5
code[9] = 0x30;//6
code[10] = 0x30;//7
code[11] = 0x30;//8
code[12] = 0x30;//9
code[13] = 0x30;//10
code[14] = 0x30;//11
code[15] = 0x30;//12
code[16] = 0x30;//13
code[17] = 0x00;//end
mService.write(height);
mService.write(width);
mService.write(textPos);
mService.write(level);
mService.write(code);
Where mService actually writes the data. The best output I get is 0█0█0█0█0█0█0█0█0█0█0█0█0█0█ - after sending the data many times in a row.
If I remove the final end byte after multiple sends I get 14 0's, and I have also tried adding an ending 0 to the height, width, textPosition and level arrays, with no affect.
I have also looked in the following places:
http://www.manualslib.com/manual/689542/Axiohm-A795.html?page=91
http://pyramidacceptors.com/phoenix-printer/esc-pos-command-set/
http://www.vbforums.com/showthread.php?754493-RESOLVED-Printing-Barcode-with-ESC-POS-on-Epson-Printers
http://www.manualslib.com/manual/753647/Axiohm-A630.html?page=51
https://www.sparkfun.com/datasheets/Components/General/Driver%20board.pdf
Where can I find a "ESC/POS" Epson Barcode Test Program?
ESC/POS is designed to reduce the processing load on the host computer in POS environments. It comprises a set of highly functional and efficient commands that enables the full realization of the potential of printers.
ESC/P, short for Epson Standard Code for Printers and sometimes styled Escape/P, is a printer control language developed by Epson to control computer printers. It was mainly used in dot matrix printers and some inkjet printers, and is still widely used in many receipt thermal printers.
Plug one end of the USB cable into the USB port of the printer, and the other end into the female USB connector of an OTG adapter or cable. Then, plug the micro-USB end of the OTG adapter or cable into the micro-USB port of your mobile device, and wait for the system to recognize the printer.
Ok so it turns out that in ESC/POS the printer actually calculates some of the data for you. I should not have been putting the check byte (the last digit of the actual bar code) in the data I was sending to the print.
Of course it did not help that my documentation is missing all the <= signs. I ended up using this document for help: http://content.epson.de/fileadmin/content/files/RSD/downloads/escpos.pdf
I am still working on the QR Code printing but I am quite certain my problems are somewhat similar.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With