Waveshare e-Paper Driver HAT

Waveshare e-Paper Driver HAT je výstupní modul pro Arduino či Raspberry Pi. Tento modul nám umožňuje připojit různé druhy ePaper displejů a ovládat je skrze SPI rozhraní, které je vyvedeno na modulu. Použití s Raspberry Pi je pak ještě jednodušší díky připravenému 40pin GPIO konektoru, který Raspberry Pi desky používají.
Modul se skládá ze dvou částí, adaptér a prodlužovací deska. Všechny flex konektory pro připojení displeje jsou oboustranné, takže je možné zapojit jak displeje od firmy Waveshare, tak i spoustu dalších. Některé displeje na trhu mají totiž zrcadlově otočené piny na flex kabelu.
Pro napájení modulu e-Paper Driver HAT se doporučuje použít napětí 3,3 Voltu, případně jinak podle použitého displeje. Pro větší kompatibilitu s displeji je také dvěma přepínači možné ovlivnit velikost odporu pro RESET (přepínač A/B) či typ SPI komunikace (přepínač 1/0).

Pro úspěšné propojení e-Paper Driveru a ESP32 propojíme všech 8 vodičů z adaptéru. Přípojíme BUSY na IO4, RST na IO16, DC na IO17, CS na IO5, CLK na IO18, DIN na IO23, GND na GND a VCC na 3V3. Pro ovládací piny BUSY, RST, DC a CS lze použít také jiné volné piny. Změnu je ale nutné provést také na začátku programu. Piny CLK a DIN jsou připojeny na HW SPI rozhraní (CLK=SCK, DIN=MOSI).

Pro úspěšné nahrání uvedeného ukázkového programu je nutné stáhnout knihovnu GxEPD2. Můžete ji stáhnout a naimportovat jako tento ZIP archiv nebo použít Správce knihoven v Arduino IDE.

Ukázkový kód obsahuje na svém začátku připojení potřebné knihovny a použitého fontu pro výpis textu. V uvedeném ukázkovém programu z knihovny pak můžete najít všechny podporované typy displejů v jejich dvou nebo tříbarevných variantách. Jako další najdeme v programu nastavení čísel propojovacích pinů a vytvoření objektu displeje z knihovny, kdy já jsem testoval modul s displejem 4,2“, tři barvy.
Ve funkci setup provedeme inicializaci displeje, přičemž v závorce uvedené číslo udává rychlost komunikace po Sériové lince, kam se budou vypisovat ladící informace. V dalším kroku provedeme výpis dat pomocí připravené funkce a v posledním kroku přepneme displej do stavu hibernace.
Smyčka loop v tomto programu neprovádí žádné příkazy. Funkce vypisDataEpaper obsahuje základní práci s textem. První příkaz může nastavit otáčení displeje o 90, 180 či 270 stupňů. Další příkaz nastaví vybraný font. Dále nastavíme barvu pro tištěný text a zapneme inicializaci přepisu displeje. Samotný výpis se pak děje v do-while cyklu, kde nejprve vyplníme displej bílou barvou, dále na dvě různá místa nastavíme kurzor a vytiskneme nastavený text. Pro druhý text pak ještě můžeme vyzkoušet červenou barvu.

// Waveshare e-Paper Driver HAT
// navody.dratek.cz
// Program vychází z příkladu
//  GxEPD2_HelloWorld.ino dodaného s knihovnou

// připojení potřebné knihovny ve variantě pro tříbarevný displej
// níže je zakomentované připojení černobílé varianty displejů
#include <GxEPD2_3C.h>
//#include <GxEPD2_BW.h>
// připojení fontu pro výpis textu
#include <Fonts/FreeMonoBold9pt7b.h>

// nastavení propojovacích pinů
#define BUSY 4
#define RST  16
#define DC   17
#define CS   5
// CLK = IO18, DIN = IO23

// vytvoření objektu displeje z knihovny,
// všechny podporované displeje najdete v původním příkladu z knihovny
GxEPD2_3C<GxEPD2_420c, GxEPD2_420c::HEIGHT> display(GxEPD2_420c(CS, DC, RST, BUSY));

void setup() {
  // inicializace displeje, číslo v závorce udává rychlost,
  // jakou se budou vypisovat ladící údaje na sériovou linku
  display.init(115200);
  // funkce pro vypsání dat na displej
  vypisDataEpaper();
  // přepnutí displeje do stavu hibernace
  display.hibernate();
}

void vypisDataEpaper() {
  // možné nastavení otočení displeje,
  // zadává se jako 1, 2, 3 (90, 180, 270 stupňů)
  display.setRotation(0);
  // nastavení použitého fontu
  display.setFont(&FreeMonoBold9pt7b);
  // nastavení barvy textu
  display.setTextColor(GxEPD_BLACK);
  // inicializace přepisu displeje
  display.setFullWindow();
  // následující do-while cyklus obstará výpis vybraného textu
  display.firstPage();
  do {
    // vyplnění displeje bílou barvou
    display.fillScreen(GxEPD_WHITE);
    // nastavení kurzoru (x, y), při výpisu textu
    // označuje kurzor pozici řádku, levý-dolní pixel písmen
    display.setCursor(100, 100);
    // výpis textu
    display.print("Test ePaper s ESP32");
    // přepnutí textu na červenou barvu
    display.setTextColor(GxEPD_RED);
    // nastavení kurzoru
    display.setCursor(75, 200);
    // výpis textu
    display.print("navody.dratek.cz");
  }
  while (display.nextPage());
}

void loop() {
  // zde se už nic neděje :)
};

Po nahrání uvedeného ukázkového kódu do ESP32 desky s připojeným e-Paper Driver modulem a e-Paper displejem dostaneme například tento výsledek:

Waveshare e-Paper Driver HAT je šikovný modul, který nám zjednodušuje zapojení různých e-Paper displejů jak od firmy Waveshare, tak i dalších. Jeho výhodou je taktéž dodávaný prodlužovací adaptér, který nám prodlouží propojení až na 20 cm mezi modulem a displejem. Díky tomu se může hodit do projektů jako je domácí meteostanice, elektronický kalendář a další zařízení, které nepotřebují častý přepis dat. Ten totiž může podle počtu použitých barev a velikosti displeje zabrat i nižší desítky sekund. Ohromnou výhodou ale zůstává téměř nulová klidová spotřeba, protože technologie eInk obecně spotřebovává elektrickou energii pouze při přepisování obsahu.
Pozn.: Pro tento příklad jsem použil ESP32, protože má o mnoho větší paměť oproti Arduino UNO deskám. Na těch je možné zobrazit jednoduchý text, ale velice rychle se může stát, že v průběhu dojde paměť a poté displej přestane korektně vypisovat data.
Vedle ESP32 je pak možné provozovat displej i na dalších platformách jako STM Nucleo, ESP8266, ESP32-S2 či již zmíněné Raspberry Pi.

Seznam použitých komponent:
https://dratek.cz/arduino/1581-esp-32s-esp32-esp8266-development-board-2.4ghz-dual-mode-wifi-bluetooth-antenna-module.html
https://dratek.cz/arduino/48211-e-paper-driver-hat-pro-raspberry-pi-arduino-nucleo.html

Další podobné články