Skip to main content

Work with EEZ Studio

This guide walks you through designing a professional user interface with the visual design tool EEZ Studio, generating LVGL code, and deploying it to a Seeed ePaper product through the Arduino IDE. The flow is the same for every supported board — the only differences are display resolution and the driver configuration constant, which we surface in tabs.

Compatible Hardware

reTerminal E1001 / E1002 / E1003 / E1004XIAO ePaper Display Board (ESP32-S3) – EE04
7.5" mono / 7.3" Spectra 6 / 10.3" mono / 13.3" Spectra 6Universal driver — pair with any of our 24-pin or 50-pin Seeed ePaper screens

What is EEZ Studio?

EEZ Studio is a modern visual programming and UI design environment originally built for test & measurement instruments and embedded devices. It combines drag-and-drop GUI design, scripting, and device integration tools, allowing developers, engineers, and makers to quickly create professional interfaces without starting from scratch.

In short, EEZ Studio acts as a bridge between hardware and software, enabling you to design, prototype, and deploy user experiences more efficiently.

Why use EEZ Studio?

  • Visual interface design — create complex UIs with a WYSIWYG editor.
  • Rapid prototyping — quickly test and validate design ideas.
  • Cross-platform — build apps that run on multiple OSs and embedded targets.
  • Hardware integration — directly connect lab instruments, IoT devices, and custom boards.
  • Open source — community-driven toolset with optional premium support.

EEZ Studio vs. SquareLine Studio

Both are GUI design tools but they target slightly different audiences:

AspectEEZ StudioSquareLine Studio
Primary purposeTest & measurement instruments, embedded systems, hardware/software integrationEmbedded GUIs, especially with LVGL
Target usersEngineers, product developers, makers, lab/test instrument designersEmbedded UI developers, hobbyists, IoT product designers
Hardware integrationDirect integration with instruments, measurement devices, automationUI generation focused, less external device integration
Open sourceCommunity-driven, transparent, extensible (premium support available)Closed-source, commercial product with licensing
WorkflowPrototype, simulate, and control real devices from one environmentPrimarily generates UI code to be compiled into an embedded project

Step 1: Install EEZ Studio

Download EEZ Studio for your operating system from the official site.


Step 2: Create an LVGL Project

At the top of the EEZ Studio interface, click CREATE. Select the LVGL template on the left:

  • Name — give your project a name (we'll use EEZ_UI in this article).
  • LVGL Version — pick 9.x from the dropdown.
  • Location — choose where to save the project files.

Project Settings

Click the ⚙️ icon on the toolbar to open Project Settings.

Under General → Build:

  • LVGL include: enter lvgl.h so generated code references LVGL correctly during build.

Under General → Display, set the resolution for your hardware:

  • Display width: 800
  • Display height: 480

(7.5" mono on E1001 and 7.3" Spectra 6 on E1002 share the same 800×480 resolution.)

Step 3: Design the UI

UI design directly determines the user experience. EEZ Studio lets you rapidly assemble interfaces by dragging and dropping components and using Styles, Fonts, Bitmaps, Themes, and Groups to control the visual result.

Recommended online resources:

The right-hand sidebar:

  • Styles — visual attributes for unifying and reusing interface elements.
  • Bitmaps — backgrounds, icons, logos.
  • Fonts — text rendering and multilingual support.
  • Themes — light/dark and other top-level styles.
  • Groups — layout helpers.

Example layout (Hello World + Panel + Image + Line + Label)

For this tutorial we'll build a simple homepage from five components:

  • Panel
  • Label
  • Line
  • Checkbox
  • Image

Step 1. Change the canvas background colour — select the canvas, check Color, pick a hex value.

Step 2. Drag a Panel onto the canvas, adjust its width/height, and pick a colour.

Step 3. Add bitmaps via the right-hand Bitmaps panel, name them, then drag the Image widget to the canvas and bind your bitmap.

Step 4. Add a Line from the Visualiser group and configure its Points.

Step 5. Add a Label, pick the colour, then add fonts via the right-hand Fonts panel.

Step 4: Generate Code

After the design is complete:

  1. Save — click the floppy disk icon next to OPEN.
  2. Preview — click Run to launch the simulator and preview the UI.
  3. Compile / Build — click the ✓ icon to check for errors, then the wrench icon to generate UI code, image data, and font data.

A green Build successful message confirms code generation. The output goes to the src/ui folder of your project (you can rename it to src/EEZ_UI if you prefer).

Step 5: Set up the Arduino IDE

To deploy the EEZ Studio output to your Seeed ePaper device, set up the Arduino IDE with ESP32 support.

tip

If this is your first time using Arduino, refer to Getting Started with Arduino first.

  1. Install the Arduino IDE.


  2. Add ESP32 board support: in File → Preferences, add to Additional Boards Manager URLs:

    https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
  3. Install the ESP32 package: Tools → Board → Boards Manager, search for esp32, install the Espressif Systems package.

  4. Select the board for your hardware:

    Tools → Board → ESP32 Arduino → XIAO_ESP32S3

  5. Connect the device via USB-C and select the correct serial port from Tools → Port.

Step 6: Install the Seeed_GFX Library

We use the Seeed_GFX library, which provides comprehensive support for Seeed display devices.

  1. Download from GitHub:


  2. Sketch → Include Library → Add .ZIP Library and select the downloaded ZIP.

    note

    If you previously installed TFT_eSPI, temporarily remove or rename it from your Arduino libraries folder to avoid conflicts — Seeed_GFX is a fork of TFT_eSPI with additional features for Seeed displays.

  3. Open the right example sketch:

    • For colour displays: File → Examples → Seeed_GFX → ePaper → Colorful → HelloWorld
    • For monochrome displays: File → Examples → Seeed_GFX → ePaper → Basic → HelloWorld
  4. Create a driver.h file in the same folder as your sketch (use the new-tab arrow in Arduino IDE).

  5. Go to the Seeed GFX Configuration Tool, select your hardware, copy the generated configuration, and paste it into driver.h. The exact contents differ per hardware:

For reTerminal E1001 (7.5" black & white, UC8179):

#define BOARD_SCREEN_COMBO 520 // reTerminal E1001 (UC8179)

For reTerminal E1002 (7.3" full colour, UC8179C):

#define BOARD_SCREEN_COMBO 521 // reTerminal E1002 (UC8179C)

Step 7: Deploy the EEZ Studio Project to Arduino

Add the EEZ Studio output and the platform driver helpers to your sketch folder, then upload.

Required driver files (all hardware)

Download these helper files and place them next to your .ino:

For EE04 you also need lv_conf.h and the LVGL library — see the EE04 tab below.

Copy the EEZ_UI output

Copy the generated EEZ_UI folder (from your EEZ Studio project's src/) into the Arduino libraries folder (typically ~/Documents/Arduino/Libraries).

Sketch and upload

Reference sketch — three buttons (KEY0/KEY1/KEY2) cycle three pages: HOME, Workstation, Plant.

Complete reference code: E1002-EEZStudioCode.zip

#include <TFT_eSPI.h>
#include <lvgl.h>
#include <ui.h>
#include "e1002_display.h"

const int BUTTON_KEY0 = 3;
const int BUTTON_KEY1 = 4;
const int BUTTON_KEY2 = 5;

int32_t page_index;

bool lastKey0State = HIGH;
bool lastKey1State = HIGH;
bool lastKey2State = HIGH;

e1002_driver_t e1002_driver;

void setup()
{
String LVGL_Arduino = "Automotive Dashboard Demo - LVGL ";
LVGL_Arduino += String('V') + lv_version_major() + "." + lv_version_minor() +
"." + lv_version_patch();
Serial.begin(115200);
Serial.println(LVGL_Arduino);
Serial.println("Initializing 6-color e-paper display...");
e1002_display_init(&e1002_driver);

pinMode(BUTTON_KEY0, INPUT_PULLUP);
pinMode(BUTTON_KEY1, INPUT_PULLUP);
pinMode(BUTTON_KEY2, INPUT_PULLUP);

lastKey0State = digitalRead(BUTTON_KEY0);
lastKey1State = digitalRead(BUTTON_KEY1);
lastKey2State = digitalRead(BUTTON_KEY2);

ui_init();
page_index = SCREEN_ID_HOME;
loadScreen((ScreensEnum)page_index);
Serial.println("Boot: Main Screen");
}

void loop()
{
lv_timer_handler();
ui_tick();
delay(50);

bool currentKey0State = digitalRead(BUTTON_KEY0);
bool currentKey1State = digitalRead(BUTTON_KEY1);
bool currentKey2State = digitalRead(BUTTON_KEY2);

if (lastKey0State == HIGH && currentKey0State == LOW) {
page_index = SCREEN_ID_HOME;
loadScreen((ScreensEnum)page_index);
Serial.println("Switched to Main Screen");
delay(50);
}

if (lastKey1State == HIGH && currentKey1State == LOW) {
page_index = SCREEN_ID_WORKSTATION;
loadScreen((ScreensEnum)page_index);
Serial.println("Switched to Plant Screen");
delay(50);
}

if (lastKey2State == HIGH && currentKey2State == LOW) {
page_index = SCREEN_ID_PLANT;
loadScreen((ScreensEnum)page_index);
Serial.println("Switched to Setting Screen");
delay(50);
}

lastKey0State = currentKey0State;
lastKey1State = currentKey1State;
lastKey2State = currentKey2State;

if (e1002_display_should_refresh(&e1002_driver))
{
Serial.println("Refreshing e-paper display...");
e1002_display_refresh(&e1002_driver);
Serial.println("Display refresh complete");
}

delay(10);
}

Notes:

  • e1002_display_init() initialises the e-ink display hardware.
  • pinMode(..., INPUT_PULLUP) configures button pins with internal pull-ups.
  • ui_init() and loadScreen() initialise LVGL and load a specific screen.
  • lv_timer_handler() processes LVGL timers and animations.
  • The if (lastKeyXState == HIGH && currentKeyXState == LOW) blocks debounce a HIGH→LOW edge and update the page.
  • e1002_display_should_refresh() / e1002_display_refresh() manage e-ink refresh on demand.

Resulting screens

Home PageWorkstation PagePhoto Page

Reference & Resources

Tech Support & Product Discussion

Thank you for choosing our products! We are here to provide you with different support to ensure that your experience with our products is as smooth as possible. We offer several communication channels to cater to different preferences and needs.

Loading Comments...