ePaper Retail Price Tag Using Xiao SAMD21, with Updating of Price and Label

 

E-Ink Retail Price Tag using Seeeduino XIAO SAMD21 and ePaper Display

01 Overview

The traditional paper price tag in grocery stores is on the verge of becoming a relic of the past. This innovative switch to e-ink displays offers a multitude of benefits for both stores and customers. Firstly, it promotes sustainability by eliminating the need for constantly printing and discarding paper tags. Secondly, the system utilizes XIAO's USB for serial communication, allowing for quick and efficient updates to prices and other label information, eliminating the time-consuming task of manually changing paper tags. Finally, e-ink displays offer superior readability compared to paper — their clear, high-contrast text ensures that customers can easily see prices and other relevant information, even under bright store lighting.

In this tutorial, we will explore a tiny device — the Seeeduino XIAO SAMD21. Despite its size, XIAO offers ample pins for various components and supports multiple communication protocols. Its user-friendly Arduino compatibility makes it perfect for beginners and makers alike to explore the world of electronics.

Project Use Case

This project is for makers, small retailers, or students who want a low-power, easily updatable alternative to printed shelf labels — updating a price becomes a quick reflash instead of printing and swapping paper tags.

02 Hardware and Software Components

Gather everything below before you start.

Hardware Components

Component Description
Seeed Studio XIAO SAMD21 (Seeeduino XIAO) Compact Arduino-compatible board that drives the ePaper display and handles USB serial updates.
ePaper Breakout Board — 24-pin FPC Extension board that lets the XIAO series drive an ePaper display without soldering.
2.13" Monochrome eInk/ePaper Display (122x250) The e-ink screen that displays the price tag content.

Software Tools

Software Description
Arduino IDE Used to configure the XIAO board package and upload the ePaper sketch.
Image2Lcd Converts a BMP/JPG image into a C array (.h file) the XIAO can display on the ePaper screen.
Canva (or similar design tool) Used to design the price tag image before converting it with Image2Lcd.

03 Application Discussion

Seeed Studio XIAO SAMD21

Seeed Studio XIAO SAMD21

The XIAO SAMD21, a tiny but mighty board from Seeed Studio, is the first in a line of powerful Arduino-compatible development boards. Despite its small size, it packs a punch with a low-power processor that excels at processing tasks, making it perfect for wearable devices and other projects where space is limited and battery life is important.

XIAO SAMD21 pin diagram

The XIAO SAMD21 is packed with features, offering 14 pins for connecting various components like sensors and lights. It also includes a built-in LED for debugging and a modern USB-C port for both power and uploading code. With its versatility and compact design, the XIAO SAMD21 is a great tool for creating all sorts of electronic projects.

XIAO SAMD21 board detail

ePaper Breakout Board — 24-pin FPC

ePaper Breakout Board

The ePaper Breakout Board is an extension board built with a 24-pin FPC connector, designed for Seeed Studio XIAO series boards, allowing you to drive an ePaper display seamlessly. It also comes with an 8-pin 2.54mm header, letting you connect to any microcontroller like an Arduino Uno or Raspberry Pi.

It is suitable for a wide range of ePaper displays, from small to large sizes. Supported by different functional Seeed Studio XIAO boards and requiring no soldering, this extension board can be easily deployed in various scenarios.

2.13" Monochrome eInk/ePaper Display (122x250)

2.13 inch eInk display

This 2.13-inch e-paper display offers a high-quality, low-power option for various uses. It's clear, readable in sunlight, and uses minimal energy, making it ideal for e-readers, shelf labels, and more.

04 Hardware Setup

Follow the step-by-step build guide below.

Step 1 — Prepare the Materials

Materials laid out

Step 2 — Insert the XIAO into the XIAO Socket

Align the pins and gently insert your XIAO into the XIAO socket on the board.

Inserting XIAO into socket

Step 3 — Insert the eInk into the FPC Connector

Carefully slide your e-paper display into the 24-pin FPC connector on the ePaper Breakout Board.

Inserting eInk into FPC connector eInk display seated in connector

05 Software Setup

The recommended programming tool is the Arduino IDE. You will need to configure the Arduino environment for the XIAO and add the on-board package.

Step 1 — Launch the Arduino Application

Launching Arduino IDE

Step 2 — Select Your Development Board Model

Add your board model to the Arduino IDE.

Step 3 — Enter Bootloader Mode

This avoids the port disappearing when the program fails to upload.

RST pins on XIAO
  1. Connect the Seeed Studio SAMD21 to your computer.
  2. Use tweezers or short lines to short the RST pins in the diagram twice.
  3. The orange LED lights flicker on and light up.

Step 4 — Install the Board Package

Go to Tools → Board Manager, then search for SEEEDUINO SAMD Boards and click Install.

Installing SEEEDUINO SAMD board package

Step 5 — Select the Board

Click the Board selection dropdown menu, then click on "Select other board and port..."

Selecting other board and port

Step 6 — Select the Port

Select the communication port for your XIAO, then search for and select "COM7 Serial Port (USB)" or whatever appears on your side.

Selecting COM port

Step 7 — Run the Blink Test

Go to File → Examples → Basics → Blink for testing.

Opening the Blink example

Step 8 — Update the LED Pin

Change all instances of LED_BUILTIN to 10.

Changing LED_BUILTIN to 10

Step 9 — Wire and Verify the Test LED

Connect the LED to GND and A10/D10 (MOSI) for checking.

LED wired to XIAO for blink test

06 Function Overview

Before developing a sketch, here are the ePaper library functions available.

  • void EPD_HW_Init() — Full screen refresh initialization.
  • void EPD_HW_Init_180() — Display rotation 180 degrees initialization.
  • void EPD_WhiteScreen_ALL(const unsigned char *datas) — Full screen refresh display function.
    Input Parameter: datas — the image data that needs to be refreshed.
  • void EPD_WhiteScreen_White() — Clear screen display.
  • void EPD_WhiteScreen_Black() — Display all black.
  • void EPD_DeepSleep() — Deep sleep function.
    Warning: Enter sleep mode and do not remove this call — skipping it will reduce the lifespan of the screen.
  • void EPD_Init_Part() — Partial refresh display.
  • void EPD_SetRAMValue_BaseMap(const unsigned char * datas) — Partial refresh of background display.
    Input Parameter: datas — the image data that needs to be refreshed.
  • void EPD_Dis_PartAll(const unsigned char *datas) — Full screen partial refresh display.
  • void EPD_Dis_Part(unsigned int x_start, unsigned int y_start, const unsigned char * datas, unsigned int PART_COLUMN, unsigned int PART_LINE) — Partial refresh display.
    Input Parameters:
    • x_start — the x value of the starting point.
    • y_start — the y value of the starting point.
    • datas — data that needs to be changed.
    • PART_COLUMN — the length of the area to be changed.
    • PART_LINE — the width of the area to be changed.
  • void EPD_HW_Init_Fast() — Fast refresh display.
  • void EPD_WhiteScreen_ALL_Fast(const unsigned char *datas) — Fast refresh display function.
    Input Parameter: datas — the image data that needs to be refreshed.
  • void EPD_HW_Init_Fast2() — Fast refresh display function.

07 Use of the Image2Lcd Software

How to Make a Picture

Use the built-in Paint software in Windows to create a picture with the same resolution as the screen you are using, and save it as a BMP or JPG file.

Note: Your picture resolution must match the screen you are using — for this tutorial, the 2.13-inch e-paper is 128 x 250 pixels, so do not use a size of 250 x 128. Using the wrong dimensions will cause the Image2Lcd output .h file to include extra bytes, which will distort the image.

The colors of the picture should be consistent with the standard colors of the drawing board that comes with Windows. The color of the 2.13-inch Monochrome ePaper in this tutorial should only be pure black and white.

08 Bitmap Conversion

Step 1 — Open Image2Lcd

Open Image2Lcd.7z (https://files.seeedstudio.com/wiki/eInk/xiao-expansion/Image2Lcd.7z), extract it, and open the application.

Image2Lcd application

Step 2 — Configure the Output Settings

Open the picture, select the "Output file type" as "C array (*.c)", and select the "Scan mode" as "Horizon Scan". The other parameter settings for a 2.13-inch Monochrome ePaper are as follows:

Setting Value
BitPixl Monochrome
Max Width and Height 128 x 250
Color Mode Reverse Color
Display Mode Normal
Note: Do not check the "include head data" box.

Step 3 — Save the Output File

Click "Save" to save the LCD output array as a .h file.

09 Downloading and Setting Up the Code

Step 1 — Download the Demo Code

Download the demo code (https://github.com/Allen-Kuang/e-ink_Demo/tree/main/2.13-inch%20E-paper%20-%20monocolor%20122x250/example) for the 2.13-inch E-paper - monocolor 122x250.

Step 2 — Open the Example Sketch

Once you have downloaded and extracted the demo code, navigate to and open the "2.13-inch E-paper - monocolor 122x250" folder. Move your files to this folder, then open the "example" folder and use Arduino IDE to open the "example.ino" file.

Opening example.ino in Arduino IDE

Step 3 — Replace the Demo Image File

Delete the demo.h file and replace it with the .h file you outputted from Image2Lcd, then include it in the code.

Including the outputted .h file

Step 4 — Select the Board

Click the Board selection dropdown menu, then click on "Select other board and port..."

Selecting other board and port

Step 5 — Select the Port

Select the communication port for your XIAO, then search for and select "COM7 Serial Port (USB)" or whatever appears on your side.

Selecting COM port

Step 6 — Reference Your Image in Code

Don't forget to include your outputted .h file from Image2Lcd in the following line of code:

Arduino / C++
EPD_WhiteScreen_ALL(gImage_pricetag);

Step 7 — Upload the Firmware

Click "Upload" to flash the firmware onto the XIAO.

Step 8 — Verify the Display

You should see the ePaper display refreshing with the image, as shown below:

ePaper display showing price tag

10 Updating the Price

Step 1 — Open Your Design Tool

Go to Canva or wherever you did your ePaper image design.

Opening the price tag design in Canva

Step 2 — Update the Price

Change it to your desired price.

Editing the price value

Step 3 — Reconvert and Reflash

Repeat the Bitmap Conversion and Downloading and Setting Up the Code steps above, and you're good to go.

Updated price tag on ePaper display

As shown above, the price changed from PHP 500 to PHP 1000.

11 System Demonstration

Video Demonstration

12 Conclusion

Tired of endless paper price tags? This project explores a revolutionary idea: using e-ink displays in grocery stores. These low-power, easy-to-read screens can replace paper tags, saving money and reducing waste. The Seeeduino XIAO, a tiny powerhouse, allows for quick price updates via USB — no reprinting, no paper waste, just a reflash. This project points to a smoother, more sustainable way to handle grocery store labeling using e-ink technology.

13 References

  • XIAO eInk Expansion Board Wiki
    (https://wiki.seeedstudio.com/XIAO-eInk-Expansion-Board/)
  • Seeeduino XIAO Wiki
    (https://wiki.seeedstudio.com/Seeeduino-XIAO/)
  • e-ink_Demo — GitHub
    (https://github.com/Allen-Kuang/e-ink_Demo)

14 Project Authors

  • Christian Kyle Mari Arcamo
Quality Checked by
  • Lukie-Mar Lonzaga
  • Miles Darren Bagnol
  • Elijah Joseph Orias
E-Ink Retail Price Tag using Seeeduino XIAO SAMD21 – CreateLabz

 

Xiao, Xiao seeed

Leave a comment

All comments are moderated before being published