OLED displej s bílými znaky má v porovnání s alfanumerickými LCD displeji mnoho výhod. Patří mezi například vyšší rozlišení (v tomto případě 128x64 bodů) či nižší spotřeba. Právě nižší spotřeby je dosaženo tím, že u OLED displeje svítí pouze ty body, které jsou aktivovány. Pro článek vybraný OLED displej obsahuje řídící obvod SSD1306, který obstarává komunikaci s Arduinem po rozhraní I2C či SPI, v tomto případě je použita sběrnice I2C. Co se týká velikosti, tak tento displej má úhlopříčku 0,96 palce a celková velikost modulu je 2,7 x 2,7 cm.

OLED displej I2C

Pro propojení OLED displeje s Arduino deskou je nutné propojit celkem 4 vodiče. Propojíme Vcc s +5V pinem na Arduinu, GND se zemí, SCL s pinem A5 a SDA s pinem A4. Piny SDA a SCL jsou ovládací piny I2C sběrnice a uvedené propojení s A4 a A5 platí pro desky založené na UNO, tedy Atmega328. Například Arduino Mega2560 obsahuje samostatné piny SDA a SCL.

Schéma zapojení pro OLED displej přes I2C

Pro správné přeložení a nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovnu U8Glib_OLED, návod jak na to je uveden zde. Ukázkový kód obsahuje na začátku připojení potřebné knihovny a jako další krok inicializaci OLED displeje z knihovny U8glib. Jako další je vytvořena proměnná prepis pro uchování času poslední obnovy displeje a podprogram setup v tomto případě obsahuje pouze možné otočení displeje o 180 stupňů skryté v komentáři. V nekonečné smyčce loop se nachází funkce if, která kontroluje rozdíl mezi aktuálním časem a časem posledního vykreslení displeje, kdy změnou čísla za porovnáním (v příkladu 100) můžeme volit rychlost překreslování displeje v milisekundách. Tělo této funkce pak obsahuje skupinu příkazů, které zaručí překreslení displeje a poté ještě uložení posledního času obnovení do proměnné prepis. Ve skupině příkazů překreslení OLED displeje se nachází důležité volání podprogramu vykresli, který obsahuje samotný obsah displeje. Tento podprogram je uveden pod smyčkou loop. Je v něm uvedeno nastavení písma na univerzální font a dále vypsání čtyř řádků s textem. Jak je uvedeno v komentářích, pomocí funkce setPrintPos(x,y) si vždy nastavíme souřadnici, odkud se bude tisknout a poté funkcí print vytiskneme požadovaný text.

// OLED displej přes I2C
// řadič SSD1306

// připojení knihovny U8glib
#include "U8glib.h"

// inicializace OLED displeje z knihovny U8glib
U8GLIB_SSD1306_128X64 mujOled(U8G_I2C_OPT_NONE);

// proměnná pro uchování času poslední obnovy displeje
long int prepis = 0;

void setup(void) {
  // pro otočení displeje o 180 stupňů
  // stačí odkomentovat řádek níže
  // mujOled.setRot180();
}

void loop(void) {
  // porovnání uloženého a aktuálního času
  // při rozdílu větším než 100 ms se provede
  // obnovení displeje, čas můžeme nastavit dle potřeby
  if (millis()-prepis > 100) {
    // následující skupina příkazů
    // obnoví obsah OLED displeje
    mujOled.firstPage();
    do {
      // funkce vykresli vykreslí žádaný obsah
      vykresli();
    } while( mujOled.nextPage() );
    // uložení posledního času obnovení
    prepis = millis();
  }
  
  // zde je místo pro další příkazy pro Arduino
  
  // volitelná pauza 10 ms pro demonstraci
  // vykonání dalších příkazů
  delay(10);
}
// funkce vykresli pro nastavení výpisu informací na OLED
void vykresli(void) {
  // nastavení písma, toto písmo umožní vypsat
  // přibližně 15x4 znaků
  mujOled.setFont(u8g_font_unifont);
  // nastavení pozice výpisu v pixelech
  // souřadnice jsou ve tvaru x, y
  // souřadnice 0, 0 je v levém horní rohu
  // OLED displeje, maximum je 128, 64
  mujOled.setPrintPos(0, 10);
  // výpis textu na zadanou souřadnici
  mujOled.print("Arduino navody");
  mujOled.setPrintPos(0, 25);
  mujOled.print("dratek.cz");
  mujOled.setPrintPos(0, 40);
  mujOled.print("Cas od zapnuti:");
  mujOled.setPrintPos(40, 55);
  mujOled.print(millis()/1000);
  mujOled.print(" vterin");
}

Po nahrání programu do Arduino desky s připojeným OLED displejem uvidíme například tento výpis:

OLED displej I2C

Pokud zakoupíte OLED displej ve variantě připojení přes SPI rozhraní, stačí zapojit displej podle následujícího schématu:

Schéma zapojení pro OLED displej přes SPI

A do Arduina nahrát tento program, změna je pouze na začátku programu, kde je navíc nastavení čísel propojovacích pinů pomocí proměnných a změněná inicializace displeje z knihovny:

// OLED displej přes SPI
// řadič SSD1306

// připojení knihovny U8glib
#include "U8glib.h"

// nastavení propojovacích pinů
#define D0 13
#define D1 11
#define DC 9
#define CS 8
#define RES 10

// inicializace OLED displeje z knihovny U8glib 
U8GLIB_SSD1306_128X64 mujOled(D0, D1, CS, DC, RES);

// proměnná pro uchování času poslední obnovy displeje
long int prepis = 0;

void setup(void) {
  // pro otočení displeje o 180 stupňů
  // stačí odkomentovat řádek níže
  // mujOled.setRot180();
}

void loop(void) {
  // porovnání uloženého a aktuálního času
  // při rozdílu větším než 100 ms se provede
  // obnovení displeje, čas můžeme nastavit dle potřeby
  if (millis()-prepis > 100) {
    // následující skupina příkazů
    // obnoví obsah OLED displeje
    mujOled.firstPage();
    do {
      // funkce vykresli vykreslí žádanou obsah
      vykresli();
    } while( mujOled.nextPage() );
    // uložení posledního času obnovení
    prepis = millis();
  }
  
  // zde je místo pro další příkazy pro Arduino
  
  // volitelná pauza 10 ms pro demonstraci
  // vykonání dalších příkazů
  delay(10);
}
// funkce vykresli pro nastavení výpisu informací na OLED
void vykresli(void) {
  // nastavení písma, toto písmo umožní vypsat
  // přibližně 15x4 znaků
  mujOled.setFont(u8g_font_unifont);
  // nastavení pozice výpisu v pixelech
  // souřadnice jsou ve tvaru x, y
  // souřadnice 0, 0 je v levém horní rohu
  // OLED displeje, maximum je 128, 64
  mujOled.setPrintPos(0, 10);
  // výpis textu na zadanou souřadnici
  mujOled.print("Arduino navody");
  mujOled.setPrintPos(0, 25);
  mujOled.print("dratek.cz");
  mujOled.setPrintPos(0, 40);
  mujOled.print("Cas od zapnuti:");
  mujOled.setPrintPos(40, 55);
  mujOled.print(millis()/1000);
  mujOled.print(" vterin");
}

OLED displej připojený přes I2C či SPI rozhraní lze použít v různých zařízeních, kde je žádoucí zobrazovat různé údaje pro uživatele bez nutnosti používat počítač pro čtení informací ze sériové linky a podobně. Tento displej vyniká dobrou čitelností a zároveň malými rozměry a je tedy vhodný pro různá ruční zařízení. Díky uvedené nízké spotřebě je také vhodný pro bateriově napájená zařízení.

Seznam použitých komponent:

http://dratek.cz/arduino/891-arduino-oled-display-bily-1420663108.html

http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html

http://dratek.cz/arduino/1227-7-ks-mini-nepajive-pole-25-kontaktu-1458405292.html

http://dratek.cz/arduino-kabelaz-propoje-rozsireni/1214-arduino-vodice-samice-samice-40-kusu-1457705007.html

FB tw

Další podobné články