SSD1306 to jeden z najpopularniejszych sterowników małych wyświetlaczy OLED używanych z Arduino, ESP32, Raspberry Pi i innymi płytkami prototypowymi. Sam mikrokontroler może mierzyć sygnały i wykonywać program, ale aby pokazać wynik użytkownikowi, potrzebuje elementu wykonawczego: diody, buzzera, wyświetlacza albo interfejsu komunikacyjnego. Moduł OLED ze sterownikiem SSD1306 jest prostym sposobem na dodanie czytelnego wyjścia graficznego do projektu. W tym przewodniku wyjaśniamy, czym jest SSD1306, jak podłączyć typowy moduł do Arduino Uno i które funkcje biblioteki Adafruit przydają się na początku pracy.

Co to jest SSD1306?

Światłomierz z Arduino i wyświetlaczem OLED SSD1306

Światłomierz wykorzystujący Arduino i wyświetlacz OLED ze sterownikiem SSD1306.

SSD1306 jest jednoukładowym sterownikiem monochromatycznych matryc OLED. W praktyce nazwa ta często oznacza gotowy moduł wyświetlacza, najczęściej 128x64 px albo 128x32 px, z panelem o przekątnej około 0,96 cala lub 1,3 cala. Wyświetlacz jest monochromatyczny, więc każdy piksel świeci jednym kolorem, zwykle białym, niebieskim albo żółtym w zależności od zastosowanej matrycy. Mimo niewielkich wymiarów taki ekran pozostaje bardzo czytelny, bo OLED daje wysoki kontrast i szerokie kąty widzenia.

Sterownik SSD1306 zarządza zawartością pamięci obrazu i steruje pikselami matrycy OLED. W odróżnieniu od wielu wyświetlaczy LCD panel OLED nie potrzebuje osobnego podświetlenia: każdy piksel emituje światło samodzielnie. Dzięki temu czerń jest rzeczywiście wygaszona, a tekst i prosta grafika są dobrze widoczne nawet na bardzo małym ekranie.

Mały moduł OLED pobiera niewiele prądu, zwłaszcza gdy na ekranie świeci tylko część pikseli. Typowe płytki z SSD1306 komunikują się z mikrokontrolerem przez I2C albo SPI. W części modułów wybór interfejsu jest ustalony fabrycznie, a w innych można go zmienić zworkami lutowniczymi na spodzie płytki.

Wiele gotowych modułów ma na płytce stabilizator napięcia, elementy pomocnicze dla przetwornicy OLED oraz rezystory podciągające magistrali I2C. Dlatego często można zasilać je zarówno z układów 3,3 V, jak i 5 V, ale przed podłączeniem warto sprawdzić opis konkretnego modułu. Nie każdy wariant ma pełne dopasowanie poziomów logicznych.

Dane techniczne SSD1306

Wyświetlacz OLED I2C 128x64 ze sterownikiem SSD1306

Wyświetlacz OLED I2C 128x64 na niebieskim tle.

Moduł OLED SSD1306 widziany z bliska

Połączenie wyświetlacza OLED SSD1306 z Arduino

Moduły z SSD1306 są tanie, powszechnie dostępne i dobrze obsługiwane przez biblioteki programistyczne. Można je podłączyć do praktycznie każdego mikrokontrolera lub komputera jednopłytkowego, który obsługuje I2C albo SPI. Arduino Uno pozostaje dobrym przykładem, bo jest popularne, proste w uruchomieniu i ma wyprowadzone linie magistrali I2C. Poniżej opisujemy typowe połączenie modułu OLED SSD1306 z Arduino Uno.

Podłączenie zasilania i magistrali I2C

Moduł wyświetlacza OLED SSD1306 pod kątem

Moduł wyświetlacza OLED SSD1306 na niebieskim tle.

Do podłączenia wyświetlacza OLED SSD1306 do Arduino Uno najczęściej używa się interfejsu I2C, ponieważ wymaga tylko dwóch linii sygnałowych. Typowe połączenie wygląda następująco: GND modułu do GND Arduino, VCC do 3,3 V albo 5 V zgodnie ze specyfikacją modułu, SDA do A4 oraz SCL do A5. W nowszych płytkach Uno te same sygnały są też opisane jako piny SDA i SCL.

Schemat podłączenia wyświetlacza SSD1306 do Arduino Uno

Połączenia można wykonać przewodami bezpośrednio albo przez płytkę stykową. Ten sam schemat łatwo przenieść na inne płytki Arduino, trzeba tylko sprawdzić, na których pinach dany model ma wyprowadzone SDA i SCL. Przy module SPI liczba przewodów będzie większa, ale zasada pozostaje podobna: zasilanie, masa oraz linie komunikacyjne zgodne z opisem producenta modułu.

Programowanie Arduino Uno i SSD1306

Moduł OLED SSD1306 z wyświetlonym tekstem

Moduł OLED z wyświetlonym tekstem.

Źródło: OpenClipArt.

Samo podłączenie przewodów to dopiero pierwszy etap. Aby sterować zawartością ekranu, trzeba użyć biblioteki obsługującej SSD1306 i wysyłającej do modułu odpowiednie komendy. Po uruchomieniu biblioteki można wyświetlać tekst, ikony, proste wykresy, menu urządzenia, komunikaty alarmowe albo ekran statusu połączenia sieciowego.

Do zaprogramowania Arduino potrzebne jest Arduino IDE oraz przewód USB do połączenia płytki z komputerem. W przypadku Arduino Uno jest to zwykle przewód USB-B, a w nowszych lub zgodnych płytkach może to być micro-USB albo USB-C. Program w Arduino IDE nazywa się szkicem i jest wgrywany bezpośrednio do mikrokontrolera.

Najczęściej używany zestaw bibliotek to Adafruit_GFX.h oraz Adafruit_SSD1306.h. Pierwsza odpowiada za podstawowe rysowanie grafiki, a druga obsługuje konkretny sterownik SSD1306. Biblioteki można zainstalować z poziomu Arduino IDE w następujący sposób.

Uruchom Arduino IDE.

Otwórz menu Szkic.

Wybierz opcję Dołącz bibliotekę.

Kliknij Zarządzaj bibliotekami, aby otworzyć Menedżer bibliotek.

W polu wyszukiwania wpisz SSD1306 i naciśnij Enter.

Wybierz pakiet Adafruit SSD1306 autorstwa Adafruit i zainstaluj najnowszą dostępną wersję.

Po zakończeniu instalacji wyszukaj Adafruit GFX Library, zainstaluj ją i uruchom ponownie Arduino IDE, jeśli program o to poprosi.

Przydatne funkcje w Arduino IDE i bibliotekach SSD1306

Mały wyświetlacz OLED ze sterownikiem SSD1306

Mały wyświetlacz OLED ze sterownikiem SSD1306.

Pierwsze próby programowania SSD1306 są znacznie prostsze, gdy zna się kilka podstawowych metod z bibliotek Adafruit. Poniższe funkcje wystarczą do wyświetlenia tekstu, narysowania prostych kształtów i sprawdzenia, czy moduł działa prawidłowo.

clearDisplay() czyści bufor ekranu, czyli ustawia wszystkie piksele jako wygaszone.

setTextSize(n) ustawia skalę tekstu wyświetlanego na ekranie OLED. Wartość 1 oznacza podstawowy rozmiar znaków, a większe wartości powiększają tekst wielokrotnie.

drawPixel(x, y, color) ustawia pojedynczy piksel w podanych współrzędnych. Na tej samej zasadzie działają funkcje rysowania linii, prostokątów i okręgów opisane w dokumentacji Adafruit GFX.

print(text) zapisuje tekst do bufora wyświetlacza, podobnie jak w przypadku drukowania tekstu do monitora portu szeregowego.

setCursor(x, y) ustawia pozycję kursora, od której biblioteka zacznie rysować kolejne znaki tekstu.

display() przesyła zawartość bufora do modułu i odświeża rzeczywisty obraz na ekranie.

Za pomocą tych metod można wyświetlić prosty napis, narysować monochromatyczną ikonę albo przygotować ekran diagnostyczny urządzenia. Dobrym pierwszym testem jest szkic, który inicjalizuje wyświetlacz pod adresem I2C 0x3C, czyści bufor, ustawia kursor i pokazuje komunikat „Hello, world”. Jeśli ekran pozostaje pusty, należy sprawdzić adres I2C, zasilanie oraz kolejność przewodów SDA i SCL.

Podsumowanie

SSD1306 to sprawdzony sterownik małych wyświetlaczy OLED, szczególnie wygodny w projektach prototypowych i urządzeniach z prostym interfejsem użytkownika. Moduły 128x64 są czytelne, energooszczędne i łatwe do podłączenia przez I2C lub SPI, a biblioteki Adafruit pozwalają szybko uruchomić tekst oraz prostą grafikę. Dlatego wyświetlacz OLED ze sterownikiem SSD1306 jest dobrym wyborem do pierwszego projektu z Arduino, ekranów statusu, czujników, liczników, zegarków i niewielkich urządzeń pomiarowych.