E-Ink 2,13“ displej IL0373F

E-Ink displej je výstupní modul pro Arduino. Tento displej obsahuje 2,13“ velký panel s rozlišením 212x104 pixelů, který dokáže zobrazit tři barvy – bílou, černou a červenou. Díky technologii e-ink je tento displej schopný vytištěné informace držet i po odpojení napájení, a i spotřeba při přepisu obsahu není příliš vysoká, výrobce udává odběr přibližně 24,5 mW na přepis celého displeje. Řídícím kontrolérem je IL0373F, přičemž tento obvod lze najít také v displejích značky Waveshare.
Pro napájení tohoto e-ink displeje je nutné použít napětí 3,3 Voltu, přičemž i datové vodiče vyžadují toto napětí. Proto není doporučeno používat například běžnou Arduino UNO desku, která komunikuje na úrovních 5 Voltů. Je možné ale použít například tento převodník napěťových úrovní a pak můžeme využívat i desky s 5V úrovněmi. Já jsem v tomto návodu použil desku ESP32, která komunikuje na 3,3 Voltových úrovních, a proto mohu displej zapojit bez převodníku.

Pro úspěšné propojení modulu e-ink displeje a Arduino desky ESP32 je nutné zapojit celkem 7 vodičů. Propojíme VCC s 3V3 Arduina, GND se zemí Arduina, D/C s pinem D17, SDI s pinem D23, CS s pinem D5, CLK s pinem D18 a BUSY s pinem D4. Datové piny SDI a CLK odpovídají sběrnici SPI, ale pro ostatní piny můžeme zvolit i jiný volný pin. Jen je tuto volbu nutné provést také na začátku programu.

Pro úspěšné nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu GxEPD, návod, jak na to, je uveden zde. A pokud si budete chtít hrát s grafikou či různými písmy, tak budete potřebovat také knihovnu Adafruit_GFX.
Ukázkový kód obsahuje na svém začátku připojení potřebných knihoven, kde si můžete všimnout typu displeje GxGDEW0213Z16. Poté následuje nastavení čísel propojovacích pinů a vytvoření objektu pro komunikační rozhraní, který je následně použitý při vytvoření objektu samotného displeje. Zde si můžete všimnout, že u objektu pro komunikační rozhraní nejsou vypsané piny pro sběrnici SPI, pouze objekt SPI. Ten se odkazuje přímo na hardwarové SPI piny na zvolené desce, u mě ESP32.
V podprogramu setup prvním příkazem provedeme inicializaci displeje a poté nastavíme postupně rotaci displeje a font z knihovny GFX.
Nekonečná smyčka loop obsahuje jednoduchou ukázku práce s textem a objekty. Na jejím začátku vidíte první příkaz, který vyplní celý displej zvolenou bílou barvou pro smazání předchozích výsledků. V dalším kroku nastavíme barvu textu na černou a kurzor na souřadnice 0,0 (levý horní roh). Poté vytiskneme jeden prázdný řádek, čím si zajistíme správné tisknutí následujícího textu. Jak si můžete všimnout, tak tisknutí textu na displej je podobné práci se sériovou linkou. Začneme tedy vytištěním řádku textu s odřádkováním pomocí println, po kterém si přepneme barvu textu na červenou. Touto barvou následně vytiskneme načtený čas od spuštění doplněný jednotkou času. Tímto máme připravený obsah, který následně příkazem update přepíšeme na displej. Podle množství textu tento přepis trvá jednotky až desítky sekund. Pro ukázku délky výpisu jsem v dalším kroku přidal ještě 2 vytištění času, po kterém můžete vidět ukázku vytištění plného obrazce. Tento příkaz má 5 parametrů – [souřadnice X, souřadnice Y, délka v ose X, délka v ose Y, barva obrazce]. V programu tedy vidíme, že obrazec bude umístěn v pravém spodním rohu díky funkcím width() a height(), které vrací šířku a výšku displeje, od kterých odečteme 25 pixelů. A protože čtverec má rozměry pouze 24x24, tak bude mít obrazec okolo sebe místo o velikosti jednoho pixelu od okraje. Po této ukázce už následuje pouze pauza po dobu pěti sekund, po které se smyčka loop opakuje.
Pokud byste chtěli experimentovat také s obrázky a dalšími obrazci, tak doporučuji podívat se na příklady v nabídce Soubor-Příklady-GxEPD, kdy hned první program GxEPD_Example obsahuje spoustu ukázek – stačí na začátku odkomentovat displej s názvem GxGDEW0213Z16.

// E-ink displej IL0373F

// připojení potřebných knihoven pro displej
#include <GxEPD.h>
#include <GxGDEW0213Z16/GxGDEW0213Z16.h>
#include <GxIO/GxIO_SPI/GxIO_SPI.h>
#include <GxIO/GxIO.h>
#include <Fonts/FreeMonoBold9pt7b.h>
// nastavení čísel propojovacích pinů
#define DC 17
#define SDI 23
#define CS 5
#define CLK 18
#define BUSY 4
 // displej reset nemá, proto knihovně předáme -1
#define RST -1

// vytvoření objektu io pro komunikační rozhraní
GxIO_Class io(SPI, CS, DC, RST);
// vytvoření objektu displeje
GxEPD_Class eink(io, RST, BUSY);

void setup() {
  // inicializace komunikace s displejem
  eink.init();
  // nastavení rotace displeje 0-3
  eink.setRotation(1);
  // nastavení fontu použitého pro psaní textu
  eink.setFont(&FreeMonoBold9pt7b);
}

void loop() {
  // nastavení bílého pozadí displeje
  eink.fillScreen(GxEPD_WHITE);
  // nastavení barvy textu
  eink.setTextColor(GxEPD_BLACK);
  // nastavení kurzoru na souřadnice 0,0
  eink.setCursor(0, 0);
  // odřádkování pro správné vytištění prvního řádku
  eink.println();
  // tisk textu s odřádkováním
  eink.println("->Arduino navody<-");
  eink.println("Cas od spusteni: ");
  // nastavení červené barvy pro text
  eink.setTextColor(GxEPD_RED);
  // vytištění čísla - času od spuštění
  eink.print(millis() / 1000);
  eink.println(" s.");
  // přepis textu na displej - dle množství textu
  // tento příkaz zabere jednotky až desítky sekund
  eink.update();
  // pro ukázku vytištění a přepis nového času ke stávajícímu obsahu
  eink.print(millis() / 1000);
  eink.println(" s.");
  eink.update();
  // pro ukázku vytištění a přepis nového času ke stávajícímu obsahu
  eink.print(millis() / 1000);
  eink.println(" s.");
  eink.update();
  // vytištění plného čtverce černou barvou,
  // souřadnice jsou maximální šířka a výška mínus 25 pixelů,
  // rozměry obrazce jsou 24x24 pixelů
  eink.fillRect(eink.width() - 25, eink.height() - 25, 24, 24, GxEPD_BLACK);
  eink.update();
  // pauza před novým během smyčky
  delay(5000);
}

Po nahrání ukázkového kódu do Arduino desky s připojeným e-ink displejem IL0373F získáme například tento výsledek.

E-Ink 2,13“ displej je rozhodně zajímavý modul pro Arduino. Tento displej nám umožňuje přidat grafický výstup do různých nejen bateriově napájených zařízení, kde chceme displej s minimální spotřebou a dobrou čitelností na světle. Není vhodný na časté obnovování obsahu díky delšímu přepisu a někomu může chybět podsvícení, ale na to jsou vhodné jiné displeje. E-ink se může hodit například do informačních displejů u čidel či obecně bateriově napájených zařízení, kde nám stačí přepsat obsah v řádu minut, hodin či dnů. A díky jeho velikosti se na něj vejde poměrně hodně textu či obrázků s dobrou čitelností.

Seznam použitých komponent:
https://dratek.cz/arduino/1581-esp-32s-esp32-development-board-2-4ghz-dual-mode-wifi-bluetooth-antenna-module-1493028819.html
https://dratek.cz/arduino/5048-2-13-e-ink-displej.html

Další podobné články