Inkplate2 peripheral mode not responding to commands

Customer:

The documentation states that Inkplate boards are delivered with peripheral mode firmware preinstalled and should respond to commands via USB serial port. However, the board does not respond to commands. I see input on the USB serial port when rebooting Inkplate2, but it does not respond to commands. I have another ESP32 (wrover-dev) board which works perfectly fine. When running the example script: List of all the founds COM ports: /dev/ttyS0 – n/a, /dev/ttyS1 – n/a, /dev/ttyS2 – n/a, /dev/ttyS3 – n/a, /dev/ttyS4 – n/a, /dev/ttyS5 – n/a, /dev/ttyS6 – n/a, /dev/ttyS7 – n/a, /dev/ttyS8 – n/a, /dev/ttyS9 – n/a, /dev/ttyS10 – n/a, /dev/ttyS11 – n/a, /dev/ttyS12 – n/a, /dev/ttyS13 – n/a, /dev/ttyS14 – n/a, /dev/ttyS15 – n/a, /dev/ttyS16 – n/a, /dev/ttyS17 – n/a, /dev/ttyS18 – n/a, /dev/ttyS19 – n/a, /dev/ttyS20 – n/a, /dev/ttyS21 – n/a, /dev/ttyS22 – n/a, /dev/ttyS23 – n/a, /dev/ttyS24 – n/a, /dev/ttyS25 – n/a, /dev/ttyS26 – n/a, /dev/ttyS27 – n/a, /dev/ttyS28 – n/a, /dev/ttyS29 – n/a, /dev/ttyS30 – n/a, /dev/ttyS31 – n/a, /dev/ttyUSB0 – USB Serial Found Inkplate on port /dev/ttyUSB0! Sending echo… No response to 'echo', something's wrong! The board itself is not dead, because it displays a different image on each reset and outputs bootup messages: rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0030,len:1344 load: ,len:13864 load: ,len:3608 entry 0x400805f0

Originally submitted via email support on 4 February 2025. Migrated to the forum for community visibility.

Soldered Support:

Are you sending commands via Serial at 115200 baud rate? Try verifying your serial settings are: 115200 baud, standard parity, ending with \n\r.

However, we recommend writing your own Arduino sketches and programming Inkplate via Arduino code. Peripheral mode works but the best features and fastest code come from using the Arduino library. Check out the Arduino library code examples for tutorials on how to use Inkplate 2.

Customer:

As you can see in my previous message, I can read input from the board just fine, so the baud rate must be correct. I also used the example Python code you provided, which sets the correct baud rate:

# Function to send a peripheral mode command via Serial and read response
def send_command_to_inkplate(inkplate, command):
 # Note the baud rate, it's always 115200
 with serial.Serial(inkplate, 115200, timeout=0.2) as ser:

yet it does not work.

Soldered Support:

Due to some hardware limitations on Inkplate 2, peripheral mode is not preinstalled. The factory sketch displays images and runs test code once when the device is first plugged in.

To use Inkplate 2 in peripheral mode, you need to upload the peripheral mode sketch:
File->Examples->InkplateLibrary->Inkplate2->Diagnostics->Inkplate2_Peripheral_Mode

Upload it and then Inkplate should respond to ‘echo’ and other commands.

To get started with Inkplate and Arduino, see: Inkplate Get Started Page — Inkplate docs documentation

Customer:

The board responds to echo, but that’s it. Display commands do not seem to work at all. I tried basic examples like burn_in_clean. Nothing happens on the display.

I know that the Inkplate2 board itself works, because it changed images with the factory program.

Attachment omitted in migration: image.png

Attachment omitted in migration: image.png

Attachment omitted in migration: image.png

Soldered Support:

Here are several things to try:

  • In the tools menu, try ‘Erase all flash before upload’
  • Upload the Basic → Black white red example just to make sure the screen refreshes
  • Try a different USB-C cable (possibly a USB-C to USB-C cable)
  • If this doesn’t work, try a different power source which can provide more current via USB-C, as Inkplate does require significant power to refresh
  • Try lowering the upload speed in the tools menu to 115200, as this can sometimes be an issue
  • If this still doesn’t work, try the most basic example:
#include "Inkplate.h"
Inkplate display;
void setup()
{
 display.begin();
 display.display();
}
void loop()
{
 // Nothing
}

If this still doesn’t work, let me know and we can continue troubleshooting.

Customer:

I programmed the board with ‘Burn in clean’ and it did not work. I unplugged Inkplate2 overnight. When I re-attached it to USB half an hour later, it immediately began to clear the screen and finally displayed the ‘Clearing done’ message as it should.

I uploaded the peripheral mode code and noticed a bug. If I do not set text color, the text set by #C()* does not show on screen. If I do set it, then it is fine. The bug is that setTextColor equivalent in peripheral mode code seems to be missing. What is the best way to report this? Open an issue on GitHub?

Soldered Support:

The restart may not have been triggered on Inkplate 2 for some reason. Unplugging from power usually helps. Is your device perhaps running on battery? That could be the cause.

The peripheral mode probably lacks this feature specifically for Inkplate2 because it uses a black-white-red color palette and not black and white, grayscale or color, so it differs from all other Inkplate models. We are working on a re-vamped version of the Inkplate peripheral mode sketch and it should include missing features like this.

You’re free to open a GitHub issue, but the best usage with Inkplate2 is to write your own Arduino sketch which does what you want.