OK

Při poskytování služeb nám pomáhají soubory cookie. Používáním našich služeb vyjadřujete souhlas s naším používáním souborů cookie. Více informací

Úvodní stránka » Projekty » OLED display 128x64

OLED display 128x64

Na žádost několik čtenářů jsem otestoval malý OLED display s uhlopříčkou 0,96", což pravda není moc, ale na orientační zobrazování to bohatě stačí. Velkou výhodou těchto displejů je jejich řízení, které je kompletně postaveno na I2C sběrnici, takže pro kompletní propojení např. s Arduinem potřebujete pouze 4 fyzické dráty - +5V, GND, SDA a SCL. Rozlišení tohoto displeje je 128x64 bodů, což při takto malé úhlopřičce vede k opravdu kvalitnímu a ostrému zobrazování textu nebo i jednoduchých bitmap. Na trhu jsou tyto displeje dostupné v barvě modré, bílé nebo žluto-modré. U posledně jmenované barevné kombinace je prvních 20 pixelů žlutých, zbytek se vyobrazuje modře. Pro své experimenty jsem získal displej v modré barvě a objektivně nutno přiznat, že zobrazuje naprosto perfektně a jeho praktické využití je potřeba hledat u zařízení s malými konstrukčními rozměry, kde by větší displej byl jednak zbytečný a jednak by zvětšil finální rozměry uvažovaného výrobku.

OLED modrý

Jak je patrné z obrázku, použil jsem pro komunikaci s displejem Arduino UNO a propojil je následujícím způsobem:

  • +5V --> +5V
  • GND --> GND
  • SDA displeje --> A4 Arduina
  • SCL displeje --> A5 Arduina

Pro komunikaci s displejem využijeme nativní podpory I2C sběrnice pomocí knihovny Wire.h. I2C sběrnice je právě dostupná na pinech A4 (SDA) a A5 (SCL) Arduina UNO, NANO nebo Pro Mini. Displej je +5V tolerantní, takže není potřeba provádět nějaké úrovňové konverze. 

A jako obvykle nebudeme vynalézat kolo, abychom se s OLED displejem domluvili a rovnou použijeme poměrně známou knihovnu U8glib, jejíž poslední verzi lze stáhnout zde. V době psaní tohoto článku byla dostupná verze 1.17, která podporuje celou škálu různých displejů a samozřejmě, že i "náš" OLED. Je ovšem potřeba vzít v úvahu fakt, že I2C komunikace s tímto displejem nepracuje úplně dle standardů, na které jsme u I2C zvyklí a odlišnost je zejména v tom, že displej nepotvrzuje komunikaci pomocí ACK. Autor knihovny tuto skutečnost zapracoval, takže ani toto není překážkou pro její použití. V následujícím příkladě si ukážeme, jak se s displejem domluvit.

 Firmware

Nejprve je potřeba nalinkovat knihovnu U8hlib.h a provést korektní inicializaci displeje: 


 #include "U8glib.h"

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);	// Display which does not send AC

Nadefinujeme funkci, ve které se má něco napsat a vykreslit vodorovná čára:


void draw(void) 
{   u8g.setFont(u8g_font_7x14);   u8g.setPrintPos(0, 20);    // call procedure from base class, http://arduino.cc/en/Serial/Print   u8g.print("www.arduinotech.cz");   u8g.setFont(u8g_font_fub20);   u8g.setPrintPos(10,50);    u8g.print("Ahoj!!!");   u8g.drawLine(0,60,128,60); } void setup(void)
{   // flip screen, if required   // u8g.setRot180(); }

A zde již provedeme zavolání funkce a vykreslení toho, co jsme definovali výše.


void loop(void) {
  // picture loop
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
  
  // rebuild the picture after some delay
  delay(500);
}


Na tomto příkladě je vidět, jak primitivní je práce s tímto displejem. Pochopitelně lze vykreslovat i bitmapy a jednoduché animace, k dispozici je poměrně dobře zpracovaná referenční příručka s popisem všech dostupných metod. 

OLED displej zařazuji nově do našeho e-shopu, prozatím je dostupný pouze experimentální vzorek 3ks, ve stále nabídce pak bude od dubna 2015.

Přidat komentář

Zvýrazněné položky jsou povinné.

Přehled komentářů

  1. Display (prexip, 26.4.2016 0:00:57) Odpovědět

    Moc hezká práce.

  2. Prosba o pomoc (Ivan, 15.10.2016 17:49:18) Odpovědět | Zobrazit odpovědi

    Napísal som program podľa Vášho návodu a pri verify mi vypísalo:U8GLIB_SSD1306_128x64 does not name a type.Prosím poraďte mi kde je chyba.Ďakujem Ivan

    1. Re: Prosba o pomoc (Petr, 22.11.2016 22:09:53) Odpovědět

      měl jsem stejný problém, po chvíli hledání jsem pořešil deklarací

      U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);

  3. Chyba (ivan, 28.10.2016 21:21:35) Odpovědět

    u8g.drawLine(0,60,128,60); namiesto 128 by malo byť 127. Rata sa od 0-ly. Fungovať to bude ale keby si chcel vykresliť čiaru z hora dole na 128 tak si mimo rozsah.

  4. knihovna pro ESP8266 (Jouza, 4.12.2016 11:44:17) Odpovědět

    U8glib.h nefunfuje na ESP8266, ma ale novejší:
    U8g2lib.h - na Nodemcu pin D1, D2
    pro tenhle display mi na NODEMCU funguje
    U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ D2, /* data=*/ D1, U8X8_PIN_NONE);

  5. Napájení (Honza, 22.4.2017 12:11:58) Odpovědět

    Aktuální zkušenost, při napájení z 5V Arduina běží, protože je tam ve skutečnosti o pár desetin V méně, ale při napájení skutečnými 5V nezobrazuje, musel jsem do napájení vložit diodu a je to OK.

  6. Oprava napájení (Honza, 22.4.2017 17:38:16) Odpovědět

    Tak chyba byla někde jinde, omlouvám se za poplašnou zprávu.


TOP produkty

Arduino MEGA2560

Arduino MEGA2560
424 Kč s DPH

Arduino DUE

Arduino DUE
696 Kč s DPH

Kontakt

Ing. Petr Foltýn
Kunčice pod Ondřejníkem 814, 73913
TOPlist