Wyświetlacz OLED (I2C)

Wyświetlacz OLED

Wyświetlacz OLED to znakomity wyświetlacz do projektów opartych na Arduino i nie tylko, gdzie każdy piksel to osobne mikroskopijne źródło światła w technologii organicznej przez co uzyskiwany kontrast jest najlepszy spośród wyświetlaczy na rynku. Ma on wiele zalet i można go stosować tam gdzie wyświetlane informacje muszę być zawsze czytelne bez względu na to w jakich warunkach otoczenia taki wyświetlacz ma pracować. Obraz jest wyraźny w pełnym słońcu i ma bardzo dobre kąty widzenia czego nie mają wyświetlacze LCD. Wadą jest to, że wyświetlacz ten jest dość mały i monochromatyczny czyli wyświetlany obraz jest jednokolorowy. Wyświetlacze OLED tego typu wyświetlają obraz w kolorze: białym, niebieskim lub żółto-niebieskim, a dostępne rozmiary ekranów OLED to 0,96" oraz 1,3". Rozdzielczość oferowana przez te wyświetlacze to 128x32 lub 128x64 piksele. Oczywiście istnieją też inne mniej standardowe wielkości wyświetlaczy OLED, które można zastosować w projektach Arduino ale są one raczej rzadko spotykane. Istnieją również wyświetlacze OLED, które wyświetlają obraz w pełnej palecie kolorów.

Parametry wyświetlacza

  • Typ wyświetlacza: OLED

  • Napięcie pracy: od 3,3 V do 5,0 V

  • Komunikacja: I2C

  • Sterownik: SDD1306

  • Przekątna: 1,3"

  • Rozdzielczość: 128 x 64 px

  • Kolor znaków: biały, niebieski lub niebieski z żółtą górną linią

  • Kąt widzenia: powyżej 160 °

  • Temperatura pracy: od -20 °C do 70 °C

  • Wymiary: 35 x 33 mm

Opis obsługi wyświetlacza OLED

Aby podłączyć wyświetlacz do Arduino należy przygotować cztery kabelki połączeniowe. Pin GND wyświetlacza podłączamy do masy, VCC do +5V, SCL do pinu SCL oraz SDA do pinu SDA w Arduino. Czasami wyświetlacz OLED posiada pin SCK po prostu jest to pin SCL, który chińscy producenci oznaczają jako SCK i podłączamy go do pinu SCL w Arduino. Sposób podłączenia wyświetlacza OLED do Arduino przedstawia schemat poniżej. Czasami też kolejność wyprowadzeń poszczególnych pinów wyświetlacza OLED może być inna należy więc uważnie przeczytać podpisy pinów na module wyświetlacza aby go nie uszkodzić w wyniku złego podłączenia.

Po prawidłowym podłączeniu należy ustalić jaki adres na magistrali I2C posiada nasz moduł wyświetlacza. Standardowym adresem wyświetlaczy OLED tego typu, pod którym komunikują się on z mikrokontrolerem jest adres 0x3C. Zdarzają się moduły wyświetlaczy OLED, które posiadają standardowo inny adres na magistrali I2C niż 0x3C np. 0x78. Aby uruchomić wyświetlacz i używać go w naszym projekcie Arduino należy mieć pewność jaki adres posiada nasz moduł wyświetlacza OLED. Aby to sprawdzić należy wgrać standardowy program "I2C_scanner" dostępny i opisany >TUTAJ<. Po skompilowaniu, wgraniu i uruchomieniu programu wraz z podłączonym modułem OLED należy włączyć "Monitor portu szeregowego" i jeśli moduł został poprawnie podłączony i jest sprawny w oknie powinniśmy dostać informację o jego adresie na magistrali I2C jak na rysunku poniżej.

Adres na magistrali I2C takich wyświetlaczy przeważnie można zmienić na odwrocie płytki drukowanej, jednak operacja ta wymaga posiadania precyzyjnej lutownicy lub stacji lutowniczej i podstawowych umiejętności lutowania elementów elektronicznych. Poniżej znajdują się zdjęcia przykładowych różnych płytek wyświetlaczy OLED, a zmienić adres takiego wyświetlacza można poprzez przelutowanie opornika SMD lub zworki w inne miejsce. Większość płytek nie jest w żaden sposób opisana, a wszelkich informacji próżno szukać w Internecie. Pierwsza płytka poniżej jest jako tako opisana i może posiadać adres 0x78 lub 0x7A po przelutowaniu opornika w prawą stronę. Na drugiej płytce prawdopodobnie adres na magistrali I2C można zmienić przesuwając w lewo lub w prawo rezystory oznaczone jako R3 i R4. Posiadam taką płytkę (tą drugą) więc jeśli będę miał chwilę czasu sprawdzę doświadczalnie zmianę adresu I2C i zaktualizuję ten opis. Widziałem jeszcze opisy podobnej chińskiej płytki jak ta pierwsza gdzie mimo nadruku o możliwych adresach 0x78 i 0x7A zgłaszały się na magistrali I2C z adresem 0x3C lub 0x3D po przelutowaniu opornika adresu I2C.

Zmiana adresu I2C jest konieczna w sytuacji gdy chcemy stworzyć projekt, w którym będziemy wykorzystywać dwa różne wyświetlacze OLED i wyświetlać na nich informacje niezależnie.

Do uruchomienia wyświetlacza należy jeszcze zainstalować bibliotekę do obsługi wyświetlacza OLED i aby to zrobić należy w Arduino IDE wybrać w menu górnym opcję: "Szkic->Dołącz bibliotekę->Zarządzaj bibliotekami..." lub po prostu wcisnąć kombinację klawiszy "Ctrl+Shift+I". Najpopularniejszą biblioteką do obsługi wyświetlaczy OLED jest biblioteka "Adafruit_SSD1306.h" należy więc ją wyszukać wpisując w polu wyszukiwania frazę "SSD1306".

Z wyszukanych propozycji należy wybrać i zainstalować bibliotekę o nazwie "Adafruit SSD1306".

Po zainstalowaniu powyższej biblioteki możemy uruchomić przykładowy program, który w całości umieszczony jest na końcu tego artykułu. Biblioteka "Adafruit_SSD1306.h" jest bardzo rozbudowana, zawiera dużą ilość możliwości, obsługuje dużą liczbę różnych wyświetlaczy i w związku z tym zajmuje też sporą część pamięci mikrokontrolera. Poniższy przykład pochłania prawie 13Kb czyli 40% pamięci mikrokontrolera. Należy o tym pamiętać jeśli chcemy budować bardzo rozbudowane programy z użyciem wyświetlacza OLED bo może się okazać, że zasoby mikrokontrolera Arduino UNO są zbyt małe i należy użyć mikrokontrolera innego typu.

Przykładowy program Arduino IDE

Program należy zacząć od dołączenia biblioteki "Adafruit_SSD1306.h" do naszego programu oraz standardowej biblioteki "Wire.h" do obsługi magistrali I2C.

Następna część programu to ustawienie typu wyświetlacza OLED i jego rozdzielczości. W przykładzie użyto definicji SCREEN_WIDTH oraz SCREEN_HEIGHT za pomocą, których określono ilość pikseli wyświetlacza w poziomie oraz w pionie. W moim przykładzie użyłem wyświetlacza o rozdzielczości 128x64. Dalej w programie zadeklarowany został obiekt o nazwie "oled" dla wyświetlacza ze sterownikiem SSD1306, do którego odwołuję się w dalszej części programu.

Najważniejsze jest zainicjalizowanie wyświetlacza oled za pomocą funkcji oled.begin(SSD1306_SWITCHCAPVCC, 0x3C), gdzie jako argumenty podaje się rodzaj sterownika oraz jego adres na magistrali I2C. Jeśli wyświetlacz jest nieprawidłowo podłączony lub wybierzemy zły typ lub adres wyświetlacza program w tym miejscu zakończy działanie i będzie wykonywał pustą nieskończoną pętlę. Jeśli wyświetlacz zostanie prawidłowo zainicjalizowany to można zacząć na nim wyświetlać informacje. Najczęściej używane do tego celu funkcje to clearDisplay() do wyczyszczenia zawartości wyświetlacza, setCursor() do przesunięcia kursora w buforze ekranu na wybrane współrzędne, print() oraz println() do wypisania wskazanego tekstu w miejscu na ekranie, w którym znajduje się kursor oraz funkcja display(), która wysyła zawartość bufora na ekran OLED i dopiero po wywołaniu tej funkcji na ekranie pojawiają się informacje.

Biblioteka "Adafruit_SSD1306.h" posiada jeszcze wiele funkcji np. do skrolowania zawartości ekranu, rysowania linii poziomych i pionowych, rysowania pojedynczych pikseli ale jeśli chcemy rysować różne figury geometryczne czy grafiki oraz korzystać z zaawansowanych funkcji należy dołączyć jeszcze bibliotekę "Adafruit_GFX.h". Możliwości tej biblioteki można sprawdzić uruchamiając przykładowy program dostarczony wraz z biblioteką "Adafruit_SSD1306.h".

Poniżej znajduję się prosty przykładowy program. Program wypisuje w lewym górnym rogu wyświetlacza wyświetlacza napis "Hello World!". Program ten korzysta z dodatkowej biblioteki "Adafruit_SSD1306.h", którą należy wcześniej doinstalować do Arduino IDE.

Schemat podłączenia

Sposób podłączenia wyświetlacza przedstawiony jest na schemacie poniżej.