adafruit thermal printer library - gibberish instead of logo

Hi guys,

I've connected my thermal printer to an Arduino Nano and tried to use the printertest of adafruit thermal printer library.
In the beginning nothing was printing out, but when I changed in the example this line:

SoftwareSerial mySerial(RX_PIN, TX_PIN);

to this:

SoftwareSerial mySerial(RX_PIN, TX_PIN, true);

It worked and started printing the examples of all fonts and positions and also the barcodes examples,
until it reached the adafruit logo part in the code and then I got quite long gibberish signs printed out
and not any logo.
I'm trying to troubleshoot it without success so far, as I want to use my own bitmap printing, according to this article:

I tried to use my own bitmap data, but it was unsuccessful as well...

Anyone know how to overcome this issue and make that library print successfully a bitmap logo?

Thanks,
Ran

Which thermal printer?
The same one they used, or some other one?
Provide links to product and programming manual if possible.
Providing your code wouldn’t be a bad idea either.

Hi,
so my thermal printer looks exactly like the one in Adafruit example, although I didn't buy it from them.
I assume is exactly same product, and indeed it seems to work with the library.
product overview: Overview | Mini Thermal Receipt Printers | Adafruit Learning System

The example code of the library from printertest is:

/*------------------------------------------------------------------------
  Example sketch for Adafruit Thermal Printer library for Arduino.
  Demonstrates a few text styles & layouts, bitmap printing, etc.

  IMPORTANT: DECLARATIONS DIFFER FROM PRIOR VERSIONS OF THIS LIBRARY.
  This is to support newer & more board types, especially ones that don't
  support SoftwareSerial (e.g. Arduino Due).  You can pass any Stream
  (e.g. Serial1) to the printer constructor.  See notes below.

  You may need to edit the PRINTER_FIRMWARE value in Adafruit_Thermal.h
  to match your printer (hold feed button on powerup for test page).
  ------------------------------------------------------------------------*/

#include "Adafruit_Thermal.h"
#include "adalogo.h"
#include "adaqrcode.h"

// Here's the new syntax when using SoftwareSerial (e.g. Arduino Uno) ----
// If using hardware serial instead, comment out or remove these lines:

#include "SoftwareSerial.h"
#define TX_PIN 6 // Arduino transmit  YELLOW WIRE  labeled RX on printer
#define RX_PIN 5 // Arduino receive   GREEN WIRE   labeled TX on printer

SoftwareSerial mySerial(RX_PIN, TX_PIN); // Declare SoftwareSerial obj first
Adafruit_Thermal printer(&mySerial);     // Pass addr to printer constructor
// Then see setup() function regarding serial & printer begin() calls.

// Here's the syntax for hardware serial (e.g. Arduino Due) --------------
// Un-comment the following line if using hardware serial:

//Adafruit_Thermal printer(&Serial1);      // Or Serial2, Serial3, etc.

// -----------------------------------------------------------------------

void setup() {

  // This line is for compatibility with the Adafruit IotP project pack,
  // which uses pin 7 as a spare grounding point.  You only need this if
  // wired up the same way (w/3-pin header into pins 5/6/7):
  pinMode(7, OUTPUT); digitalWrite(7, LOW);

  // NOTE: SOME PRINTERS NEED 9600 BAUD instead of 19200, check test page.
  mySerial.begin(19200);  // Initialize SoftwareSerial
  //Serial1.begin(19200); // Use this instead if using hardware serial
  printer.begin();        // Init printer (same regardless of serial type)

  // The following calls are in setup(), but don't *need* to be.  Use them
  // anywhere!  They're just here so they run one time and are not printed
  // over and over (which would happen if they were in loop() instead).
  // Some functions will feed a line when called, this is normal.

  // Test inverse on & off
  printer.inverseOn();
  printer.println(F("Inverse ON"));
  printer.inverseOff();

  // Test character double-height on & off
  printer.doubleHeightOn();
  printer.println(F("Double Height ON"));
  printer.doubleHeightOff();

  // Set text justification (right, center, left) -- accepts 'L', 'C', 'R'
  printer.justify('R');
  printer.println(F("Right justified"));
  printer.justify('C');
  printer.println(F("Center justified"));
  printer.justify('L');
  printer.println(F("Left justified"));

  // Test more styles
  printer.boldOn();
  printer.println(F("Bold text"));
  printer.boldOff();

  printer.underlineOn();
  printer.println(F("Underlined text"));
  printer.underlineOff();

  printer.setSize('L');        // Set type size, accepts 'S', 'M', 'L'
  printer.println(F("Large"));
  printer.setSize('M');
  printer.println(F("Medium"));
  printer.setSize('S');
  printer.println(F("Small"));

  printer.justify('C');
  printer.println(F("normal\nline\nspacing"));
  printer.setLineHeight(50);
  printer.println(F("Taller\nline\nspacing"));
  printer.setLineHeight(); // Reset to default
  printer.justify('L');

  // Barcode examples:
  // CODE39 is the most common alphanumeric barcode:
  printer.printBarcode("ADAFRUT", CODE39);
  printer.setBarcodeHeight(100);
  // Print UPC line on product barcodes:
  printer.printBarcode("123456789123", UPC_A);

  // Print the 75x75 pixel logo in adalogo.h:
  printer.printBitmap(adalogo_width, adalogo_height, adalogo_data);

  // Print the 135x135 pixel QR code in adaqrcode.h:
  printer.printBitmap(adaqrcode_width, adaqrcode_height, adaqrcode_data);
  printer.println(F("Adafruit!"));
  printer.feed(2);

  printer.sleep();      // Tell printer to sleep
  delay(3000L);         // Sleep for 3 seconds
  printer.wake();       // MUST wake() before printing again, even if reset
  printer.setDefault(); // Restore printer to defaults
}

void loop() {
}

The result of this code is in this image:

you can see in the picture that this part of the code, the barcode, works well:

  // Barcode examples:
  // CODE39 is the most common alphanumeric barcode:
  printer.printBarcode("ADAFRUT", CODE39);
  printer.setBarcodeHeight(100);
  // Print UPC line on product barcodes:
  printer.printBarcode("123456789123", UPC_A);

while this part fail with gibberish:

  // Print the 75x75 pixel logo in adalogo.h:
  printer.printBitmap(adalogo_width, adalogo_height, adalogo_data);

  // Print the 135x135 pixel QR code in adaqrcode.h:
  printer.printBitmap(adaqrcode_width, adaqrcode_height, adaqrcode_data);

and then this part, I marked on the picture, works..:

  printer.println(F("Adafruit!"));

Thanks,
Ran

Doesn’t look like QR code is working either.
Comment out the bitmap printing. Does the QR code work now?

This is almost certainly down to the printer firmware version.
Trying to work out how to print the self test page which will tell you the version...
Of course we don’t know the version of the official AdaFruit printer.

Edit: From the manual. What does this give you?

4.2 Printing test
Power on, press the [feed] key, for a while, relax the key, it will print out one testing sample.
Power on, press key per time, it will feed the paper.

Thanks for staying tuned in my topic here :slight_smile:

So in order for me to make the test page, the initial page on first time I open the box is with the feed button as explained. Later on if I want to make the test page again, there is a small button on the electric circuit itself on the bottom of the printer, holding that button for 1 second provide this test page printing:

I'm trying to see even any other library or other trick to print BMP pictures,
I'm using LCDAssistant program to convert BMP
to the necessary code that is being assign in another tab of the Sketch:
static const uint8_t PROGMEM adalogo_data[] = with, of course, the relevant bytes of the image.

Yes, but is the QR code printing? I want to know if it’s just the bitmap printing that doesn’t work, or is the QR code printing broken also?
Seems form your first image the QR code is NOT working, but perhaps that’s a knock on effect from the bitmap not printing.

The Adafruit Printer has a firmware update available. I can’t see any version history attached, and have no idea if it suitable for your printer. As the update page says - try at your own risk.

You may be better off contacting your printer’s supplier and ask if they have a firmware update available.

You are correct,
the QR is not printed neither. Instead it gives a chunk of gibberish there as well.

I download that update_firmware and thought to give it a try, but I think it will be challenging to do so,
as I need to find a way to connect the printer directly to the computer USB port.
So far I can only connect it to the Arduino board.

I wonder if anyone here knows other possibilities to use this printer to print images/logos, perhaps even with different code and library included, I don't mind..

Thanks!

Looking at the test page you printed, I think you have an RP07 panel thermal printer, possibly from this company.

I had a quick look to see if I could find a user manual for that printer but came up empty.

You could try contacting them to see if they will send you a driver manual.

markd833:
Looking at the test page you printed, I think you have an RP07 panel thermal printer, possibly from this company.

I had a quick look to see if I could find a user manual for that printer but came up empty.

You could try contacting them to see if they will send you a driver manual.

True! I have RP07 printer exactly!
So you think the lack of possibility to print the adafruit logo and QR code comes from the firmware and I should look for an update?

Thanks

I had a quick look on the Adafruit website at the firmware download zip file. There's a config.ini file in there that gives a few hints.

Firstly the Adafruit file seems to be for a printer from a company called Rongta Technology. That's a good start as that's the company that makes/markets the RP07 printer you have.

BUT, the config.ini file seems to indicate that the firmware is for an RP80 printer and that the firmware version is LM3S V2.1.

I'd probably hold off attempting to update your printer from this firmware until you can be sure that it is actually for your printer.

markd833:
I had a quick look on the Adafruit website at the firmware download zip file. There's a config.ini file in there that gives a few hints.

Firstly the Adafruit file seems to be for a printer from a company called Rongta Technology. That's a good start as that's the company that makes/markets the RP07 printer you have.

BUT, the config.ini file seems to indicate that the firmware is for an RP80 printer and that the firmware version is LM3S V2.1.

I'd probably hold off attempting to update your printer from this firmware until you can be sure that it is actually for your printer.

Thank you, I will contact now the manufacture.
Are there any other approaches how to print logos/pictures on thermal printer beside adafruit?
Are there any other libraries or methods that I can try maybe?

Thanks

Usually the escape sequences are based on the EEPSON standard.
But it’s hard to investigate further without the programming manual. At least then you’d know if the sequence you were trying should work or not.
Sometimes an updated firmware will add support for new features, such as QR codes or bitmap densities.
I tried a search for the manuals as well, but came up empty.
Do you not even have a link for the company you purchased from? Have you tried to contact them either for firmware update and/or programming guide?
I have some Wireless thermal printers here from an AliExpress vendor and they were very happy to provide both when I asked.

So I basically purchased this printer from a company who sells equipment and software for business regarding the cash registered and POS domains.
In their product page you can find the PDF of the manufacture with some technical details, yet not the programming manual.
this is their product link
From this store I actually purchased.

I believe that contacting them and asking about firmware update is quite a big shot, as they just distribute this product, which is originally from china, and I don't think they gonna have any clue about its maintenance. I will try though..

So far, lets say I want to take the risk of trying updating the firmware, how do I connect the printer directly to my computer USB and not just to the Arduino? Because the Adafruit firmware update software is computer based as far as I've seen.

edit:
I found those following threads here, one very old (2012):
https://forum.arduino.cc/?topic=113175

and one not so long ago:
https://forum.arduino.cc/?topic=674748

I think that the old thread experienced similar problem as me, he mentioned that it might be a problem with putting the BMP data in the memory of the Arduino? Actually, when I'm looking at the compile report it says:

Sketch uses 4896 bytes (15%) of program storage space. Maximum is 30720 bytes.
Global variables use 166 bytes (8%) of dynamic memory, leaving 1882 bytes for local variables. Maximum is 2048 bytes.

Could be the PROGMEM data isn't compiled at all?
its on different tab name adalogo.h
and contains:

#ifndef _adalogo_h_
#define _adalogo_h_

#define adalogo_width 75
#define adalogo_height 75

static const uint8_t PROGMEM adalogo_data[] = {
    0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x03, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf8,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xf8, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x3f, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x03, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,
    0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff,
    0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0x80, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x0f, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xfc, 0x0f,
    0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x0f, 0xff, 0xff,
    0x80, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xcf, 0xff, 0xff, 0x80, 0x00,
    0x00, 0x00, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00,
    0x7f, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00, 0x3f, 0xff,
    0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff,
    0xf1, 0xff, 0x3f, 0xf0, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xf1, 0xfe,
    0xff, 0xfe, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xf1, 0xff, 0xff, 0xff,
    0xc0, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xff, 0xf8, 0x00,
    0x07, 0xff, 0xff, 0xff, 0xe1, 0xff, 0xff, 0xff, 0xff, 0x00, 0x03, 0xff,
    0xff, 0xff, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xff, 0xff, 0x3f,
    0xe1, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x01, 0xff, 0xfe, 0x07, 0xe3, 0xff,
    0xff, 0xff, 0xff, 0xe0, 0x00, 0xff, 0xff, 0x03, 0xe3, 0xff, 0xff, 0xff,
    0xff, 0xe0, 0x00, 0x7f, 0xff, 0x00, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xc0,
    0x00, 0x3f, 0xff, 0xc0, 0xff, 0xc0, 0x7f, 0xff, 0xff, 0x80, 0x00, 0x1f,
    0xff, 0xf0, 0xff, 0x00, 0x3f, 0xff, 0xff, 0x00, 0x00, 0x0f, 0xff, 0xff,
    0xff, 0x00, 0x7f, 0xff, 0xfc, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0x01,
    0xff, 0xff, 0xf8, 0x00, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
    0xf0, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x00,
    0x00, 0x00, 0x1f, 0xfc, 0x7f, 0xff, 0xff, 0xff, 0x80, 0x00, 0x00, 0x00,
    0x7f, 0xf8, 0x78, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0xf0,
    0x78, 0x7f, 0xff, 0xfc, 0x00, 0x00, 0x00, 0x01, 0xff, 0xe0, 0xf8, 0x7f,
    0xff, 0xf0, 0x00, 0x00, 0x00, 0x03, 0xff, 0xc0, 0xf8, 0x3f, 0xdf, 0xc0,
    0x00, 0x00, 0x00, 0x07, 0xff, 0xc1, 0xfc, 0x3f, 0xe0, 0x00, 0x00, 0x00,
    0x00, 0x07, 0xff, 0x87, 0xfc, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x0f,
    0xff, 0xcf, 0xfe, 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff,
    0xff, 0x1f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0x1f,
    0xfc, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfc, 0x00,
    0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00,
    0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x3f,
    0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff,
    0x3f, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0x3f, 0xff,
    0xfe, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xff, 0xff, 0x3f, 0xff, 0xfe, 0x00,
    0x00, 0x00, 0x00, 0x7f, 0xff, 0xfe, 0x3f, 0xff, 0xfe, 0x00, 0x00, 0x00,
    0x00, 0xff, 0xff, 0xfc, 0x1f, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff,
    0xff, 0xf8, 0x1f, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xe0,
    0x0f, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x01, 0xff, 0xff, 0x80, 0x07, 0xff,
    0xfe, 0x00, 0x00, 0x00, 0x01, 0xff, 0xfc, 0x00, 0x03, 0xff, 0xfe, 0x00,
    0x00, 0x00, 0x01, 0xff, 0xe0, 0x00, 0x01, 0xff, 0xfe, 0x00, 0x00, 0x00,
    0x01, 0xff, 0x00, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0xf8,
    0x00, 0x00, 0x00, 0x7f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x1f, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f,
    0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xfe, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x1c, 0x00, 0x00, 0x00};

#endif // _adalogo_h_

It must be compiled as you reference it when you print it.
But it makes no odds if the bitmap data is actually correct or not.
The data doesn’t have a “format” other than being a array of bytes with the bits being on/off pixels.
You could send it any array of random bytes and you’d get some kind of graphic out.
Granted the graphic wouldn’t look like anything, but it certainly wouldn’t be random characters.

This code...

// Print the 75x75 pixel logo in adalogo.h:
printer.printBitmap(adalogo_width, adalogo_height, adalogo_data);

Gets translated by the library into an escape sequence, which basically says to the printer...
“I’m going to want you to print a bitmap, it’s 75 by 75 pixels, and here comes the raw data for it.”
Then the library sends the raw data from array “adalogo_data“ for as many bytes as necessary.

What is happening with your printer is that it’s not even understanding the first “I want you to print a bitmap” escape sequence.
When that happens the printer shrugs its shoulders, gives up, and goes back to printing the data you send it as ASCII characters.
So that explains why you’ve got a string of gibberish printing out. These are the characters equivalents of the bytes from your bitmap data.

The question is why doesn’t your printer understand the bitmap escape sequence that the AdaFruit library is using?

That question can only be answered by looking at the programming manual for firmware 1.02 of this model and comparing the required escape sequence with the one used by the library.

Alternatively you can attempt to “guess” from the EPSON documentation which bitmap printing commands the designers may have decided to support in your printers firmware. You may by chance find the one that works.

Or maybe the firmware is just bugged.

Thank you for your kind and well written explanation! I got now the idea whats happening wrong.

Ok, so regarding this:

pcbbc:
Alternatively you can attempt to “guess” from the EPSON documentation which bitmap printing commands the designers may have decided to support in your printers firmware. You may by chance find the one that works.

Do you have any idea which commands I can try and where? Should I try those commands directly in the Sketch or should it be to inject those commands in the Adafruit library files that need to be modified?

By the way, I'm still doing online research for people with similar problems, take a look at this one:

The guy seems to have different printer but suffered from same issue, then another guys suggested him his own modified library based on the one of Adafruit.
So I tried to download his git, install it as custom library in my Arduino IDE, but unfortunately I got a total gibberish, even for the text parts, not just the images...
I tried also to play with the baudrate 19200/9600, although in my test page its clearly says 19200...

Ran

As the reseller/distributor of the product, they should at least be able to supply you with a user manual detailing how to use it. You may get lucky going direct to the manufacturer to see if their tech support can send you a manual.

Whatever baudrate you have set is correct. Otherwise the other functions, such as raw text and barcodes, would not be working.

I’d start with the EPSON ESC/POS reference.

Then I’d look at the AdaFruit library and validate it is sending EPSON ESC/POS commands for the things that do work (e.g. barcodes).

Then I’d look at the bitmaps and see if they correspond to one of the bit image commands given by EPSON. Move from there to trying some of the other graphics commands to see what works and what doesn’t.
Perhaps you may have more luck with some of the bit image commands that are marked obsolete?

I’ve been doing low level escape sequences on EPSON and IBM printer products since the 1980s. This all makes perfect sense to me, but it’s kind of hard to explain exactly how I would proceed. If you’ve done low level stuff before the EPSON docs make perfect sense, if not I’d imagine you might get hopelessly lost as to what it all means.

I’d investigate further myself, but right now I only have a tablet device with me and doing any serious digging really requires a desktop (downloading libraries etc). Regardless I don’t have that printer (Or any printer attached to my Arduino for that mater), so ultimately a lot of groundwork and experimentation will be required from your end.

pcbbc:
Whatever baudrate you have set is correct. Otherwise the other functions, such as raw text and barcodes, would not be working.

I’d start with the EPSON ESC/POS reference.

Then I’d look at the AdaFruit library and validate it is sending EPSON ESC/POS commands for the things that do work (e.g. barcodes).

Then I’d look at the bitmaps and see if they correspond to one of the bit image commands given by EPSON. Move from there to trying some of the other graphics commands to see what works and what doesn’t.
Perhaps you may have more luck with some of the bit image commands that are marked obsolete?

I’ve been doing low level escape sequences on EPSON and IBM printer products since the 1980s. This all makes perfect sense to me, but it’s kind of hard to explain exactly how I would proceed. If you’ve done low level stuff before the EPSON docs make perfect sense, if not I’d imagine you might get hopelessly lost as to what it all means.

I’d investigate further myself, but right now I only have a tablet device with me and doing any serious digging really requires a desktop (downloading libraries etc). Regardless I don’t have that printer (Or any printer attached to my Arduino for that mater), so ultimately a lot of groundwork and experimentation will be required from your end.

Thank you, man!
(And thanks for other people participating here :))

I'm gonna try to investigate your approach as well, but if you found something by yourself, please let me know!

Thanks again

Looking at the AdaFruit library, they are using the following ESC/POS command...

writeBytes(ASCII_DC2, '*', chunkHeight, rowBytesClipped);

It's interesting that the EPSON reference doesn't list any codes starting with DC2 (18). Their escape sequences start with one of...
ESC (27)
FS (28)
GS (29)

Cross referencing some other codes, they do seem to agree. For example to turn on the human readable numbers under the barcodes Adafruit use...

writeBytes(ASCII_GS, 'H', 2);    // Print label below barcode

Which is indeed the correct EPSON code...
GS H Select print position of HRI characters

To try to fix the bitmaps my first try would be to change the bitmap library to...

writeBytes(ASCII_GS, '*', chunkHeight, rowBytesClipped);

Since that seems to (roughly) match the EPSOM escape command documented here...
GS * Define downloaded bit image
You may need to follow that with...
GS / Print downloaded bit image
..to actually print the downloaded bitmap.

If that didn't work then I'd be trying...
ESC * Select bit-image mode
...but note that that command takes different format data and can only print a single row of 8/24 pixels.
You will need to send multiple commands to complete the entire bitmap.

Edit:
And if you look at the Adafruit Printer User Manual on page 19/70 you will see it does support the ESC * command also (and perhaps a better explanation than in the ESPON manual).
Just looks like Adafruit chose not to use it. TBH sending the x/y size and then the entire bitmap is a lot easier than having to send a line at a time. That's probably why they chose the simpler DC2 * command. But if your printer doesn't support DC2 *...

Thanks @pcbbc!
Very much appreciate your truly research and help in this manner.
I'm away from my Arduino and printer during this week so I will be trying to implement your suggestions next week.
By the way, I've contacted the manufacture of the printer (RONGTA) addressing my problem and ask them how may I be able to print logo or picture on my RP07 printer and actually if I can upgrade the firmware to that version available in Adafruit website.
I got a very quick response and help from one guy there that provided me a printing tool for bitmaps available in this link.
The thing is that I tried to download it and my chrome browser failing the download saying "virus detected". I was scared on the first minute but then saw online that a lot of zip files are considered by windows defender as "virus". I asked for clarification from the manufacture, before trying to disable windows defender in order to get the files.
Therefore, I am not sure yet if this tool is safe or not..

Thanks,
Ran