Serial Printer library allowing directing printout with macros and templates
Create Printer and Load Macro Definitions
You can create your own printer macros for your specific printer type.
ThermalPrinter thp(PRINTER_RX_PIN, PRINTER_TX_PIN, PRINTER_BAUDRATE);
thp.begin();
thp.loadMacros(&PRINTER_MACROS);
Add Your Own Macros
uint8_t m1[] = {27,45,1};
thp.addMacro("$u_on",m1,3);
uint8_t m2[] = {27,45,0};
thp.addMacro("$u_off",m2,3);
Define Template
Mix macros & text inside template.
String ticket = "$init$a_center";
ticket += "this is multi\nline ticket\n";
ticket += "millis=$millis\n";
ticket += "$u_onUnderlined text$u_off\n";
ticket += "$fs_1Normal font size\n";
ticket += "$fs_2Double size\n";
ticket += "$fs_3Tripple size\n"; // not all printers support 3x and higher sizes
ticket += "$fs_1\n\nAaaaand cut\n\n\n$cut_part";
Load Template into Buffer
All string manupulation is done in printer class buffer.
thp.load2Buffer(ticket.c_str());
Replace Macros
Replace loaded and manually added macros with their values.
thp.replaceMacros();
If you need explicitly replace macros with some calculated/dynamic value, e.g. time
char* m = new char[51];
snprintf(m,50,"%lu",millis());
thp.replaceMacro("$millis",(uint8_t*)m,strlen(m));
Send buffer to printer
thp.writeBuffer();
Query Printer Status Inside your loop() call printer's status update method and query status.
if (millis()-lastUpdateTime > 5000){ // check status each 5 seconds
thp.updatePrinterStatus();
lastUpdateTime - millis();
}
if (thp.status() != status){
status = thp.status();
Serial.printf("Printer status changed=%x\n",status);
}