Inkplate 6 peripheral mode: serial commands for images and text not working

Customer:

I sent an inquiry through the form yesterday, but due to urgency I’m emailing as well. Three years ago I ordered 5 Inkplate 6 units but only now are they being shipped. When I opened them and tried communicating with them over USB directly to my computer via terminal by sending hex messages, I think they have a firmware bug or I’m doing something wrong. However, I think I’m not doing anything wrong because I did the same with a unit I ordered before these 5, and with the same messages I communicated successfully.

Now I have a project where I need to use all 5 units but I cannot communicate with them.

I need support.

What I’ve tested:

  • When I send a message to echo, it responds OK, so the message format is correct
  • When I send .bmp it responds #H(0)*, so the message is correct since it responded
  • If the SD card is not inside it responds #H(-1)*, so the message is correct since it responded
  • When I send a string in the same format as the other messages, it displays something… (some strange character, nothing concrete I could connect to the problem)
  • When I send #R(?)* it responds whether the panel has power or not
    → if the response is 0 I send it e.g. #Q(1)* to power the panel and as soon as I send the message show #L(1)* after that I check the power #R(?)*, the response is 0. After each show the buffer goes to panel power off → is that correct?

Please support me because I didn’t expect this issue, and I didn’t check the panels before because I had good experience with the first one and didn’t test these.

I tested via USB and terminal on the computer, and I also connected it to my ATmega controller in whose environment it should work, and it behaves the same way.

Attachment omitted in migration: 868f6b0b.jpeg

Originally submitted via email support on 25 March 2025. Migrated to the forum for community visibility.

Soldered Support:

If you’re using peripheral mode, which the devices come pre-programmed with, and you send commands over Serial terminal and it responds OK, that’s a good sign that communication is working fine.

You don’t need to use #Q(1) to manually turn the panel on or off. Instead, only use the display command #L(1) to show what’s in the framebuffer (what you’ve drawn through code).

If you power up the Inkplate fresh and only send #L(1), it should clear the screen from the welcome message and display a white screen.

Try powering up the Inkplate over USB and then only send #L(1) and report if that works.

Customer:

When it powers on it has your buildings image. If you send it #L(1) then it refreshes that image.

But if you send #K(1) and then send #L(1) it clears the screen?

All the tests I described in my first email are tests over USB, and this one too.

Attachment omitted in migration: 868f6b0b.jpeg

Soldered Support:

That’s correct, it should clear the screen and make it clean with #K(1) and then #L(1). These are the commands in the documentation:

Can you explain to me where it’s failing, what doesn’t work with this code?

Alternatively, if you’re developing your own software for Inkplate, I recommend using our Arduino library to write your own sketch. That way you’ll have much easier access to all the functionality you need. Check out the tutorial here if that’s an option for you:

This peripheral mode you’re using is a bit older and hasn’t been updated for some time, so the Arduino library is much better.

Customer:

Issue 1: Fails when sending an image

  • In the attachment is the image (image1.bmp) that I’m trying to send and on the device from the first shipment this worked without problems. It’s on the SD card as shown in the attachment.
  • When there’s no SD card the device responds H(-1), excellent. When I put the card in and send the image as shown in the communication, the device responds H(0) saying it cannot load the image. I tried clearing the screen first too but no luck.

Issue 2: Sending a string

  • From the attachment I show what I sent through the terminal (I want to send the string “COA”). From the attachment image “Sending text” shows what I get. I tried moving the cursor, adding text size which is shown in the communication, but I get what’s shown in the attachment.

I don’t know where I’m going wrong. The first shipped device did all this correctly. Maybe I forgot something over time with everything I need to do.

I don’t need to develop anything special right now. I just need to send two images and two texts to meet my product’s needs, which is why I’d like to use this ready-made functionality of sending information over serial.

Thank you for your effort and understanding.

Attachment omitted in migration: 1_SDcard.jpg

Attachment omitted in migration: 868f6b0b.jpeg

Attachment omitted in migration: 2_Pokušavam poslati sliku.jpg

Attachment omitted in migration: 3_Slanje texta COA.jpg

Attachment omitted in migration: 4_Slanje stringa.jpg

Attachment omitted in migration: image1.bmp

Soldered Support:

Thank you for explaining the problem in more detail. You shouldn’t need to clear the screen. The peripheral mode command for drawing a bitmap from SD card is:

#H(000,000,“image1.bmp”)*

and then to display that image send #L(1)

For this to work, the image must be named “image1.bmp” and be in the root folder of the SD card.

So those are the only three things that need to be done. If you follow these exact steps and it works on your earlier Inkplate but not on this one, I’m not sure what the difference is.

Are the Inkplates the same version? Are all the boards blue with an e-radionica mark or are some purple (Soldered)? Those two versions are different from each other.

In short, this will be challenging to debug. I would really recommend you write your own Arduino sketch using this example:
https://github.com/SolderedElectronics/Inkplate-Arduino-library/blob/master/examples/Inkplate6/Advanced/SD/Inkplate6_SD_Pictures/Inkplate6_SD_Pictures.ino

This example shows how to load images from the SD card, so you can use it and add serial reading to receive a command to change the image.

Customer:

In the batch file boot_app0.bin is defined ^, but in the zip it’s not there. 1. I uploaded without it and the display behaves the same way in communication - it doesn’t accept the image and responds to the display image1.bmp H(0) 2. And when I display the text I send it shows nonsense. I repeat, I only need the functionality that’s written in the documentation to be able to load one image and send one text. Thank you.

Attachment omitted in migration: 868f6b0b.jpeg

Soldered Support:

I’ve tested it now. The boot_app0.bin is something my script automatically included but it’s not actually necessary for operation. I’ve tested it now:

Just remove that line from the script. You can use this command:

@echo off
echo === Inkplate uploader ===
echo.

REM -- Provjerite da je esptool instaliran (preko pip install esptool)
REM -- Promijenite COM port dolje ako nije COM12

set COMPORT=COM12

echo Koristi se COM port: %COMPORT%
echo.

python -m esptool --chip esp32 --port %COMPORT% --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 4MB ^
0x1000 Inkplate6_Peripheral_Mode.ino.bootloader.bin ^
0x8000 Inkplate6_Peripheral_Mode.ino.partitions.bin ^
0x10000 Inkplate6_Peripheral_Mode.ino.bin

echo.
pause

I tested and the Inkplate responds to the hello command #L(1)*

If this doesn’t work with your code that you send over Serial, you’ll need to use the Arduino sketch as I mentioned before. This serial command mode is not well supported on the device.

Attachment omitted in migration: image.png

Customer:

Yes, I was able to upload what you sent and it does work as you said with the #L(1) command, and that’s not really what’s important to me.

However, your documentation states how the rest should work.

  • It states how I could display an image that’s on the SD card through serial?
  • It states how I could send text?
  • It doesn’t say I should update anything in Arduino
  • The documentation doesn’t state that sending commands over serial is not well supported
  • On the first test Inkplate6 you sent me, all of this worked

Thank you for understanding.

Attachment omitted in migration: 868f6b0b.jpeg

Soldered Support:

The documentation is for peripheral mode control, which is currently not well supported, so we cannot guarantee it will work and we cannot remotely determine why peripheral mode commands work on one Inkplate but not on another.

The Inkplate is primarily used with the Arduino library, and your Inkplate devices currently have this Arduino code:

This is code that converts text received over Serial into drawing commands for the screen. However, as I mentioned, this code is older and has bugs, so it’s possible it won’t work for you. I tried to fix that in my previous email by sending you a binary I compiled myself to make sure you have the latest version, but if that doesn’t work either, you’ll need to use Arduino code.

To successfully use your Inkplate and have it work reliably, you’ll need to write your own Arduino code for the Inkplate. Here’s a tutorial on how to get started with it:

Here are code examples from the Arduino library related to printing text and displaying images from SD card:

Printing text: Inkplate-Arduino-library/examples/Inkplate6/Basic/Inkplate6_Grayscale/Inkplate6_Grayscale.ino at 2dd263f2f9548aadac8638413a143beddf068a64 · SolderedElectronics/Inkplate-Arduino-library · GitHub
Image from SD card: https://github.com/SolderedElectronics/Inkplate-Arduino-library/blob/master/examples/Inkplate6/Advanced/SD/Inkplate6_SD_Pictures/Inkplate6_SD_Pictures.ino

Other Arduino functions are documented here: Inkplate Arduino — Inkplate docs documentation