Adapter I2C upraszcza podłączanie popularnych modułów do mikrokontrolera. Zamiast prowadzić wiele równoległych linii sterujących, można wykorzystać dwie linie magistrali: SDA dla danych i SCL dla zegara. W praktyce oznacza to mniej przewodów, prostszy montaż i więcej wolnych pinów w projekcie.
Najczęściej spotykanym przykładem jest adapter I2C do wyświetlacza LCD 16x2 zgodnego z kontrolerem HD44780. W tym artykule wyjaśniamy, jak działa taki moduł, jakie ma piny i jak podłączyć go do Arduino Uno.
Adapter I2C - co oznacza I2C?
I2C (Inter-Integrated Circuit) to synchroniczna magistrala szeregowa do komunikacji między układami scalonymi na jednej płytce lub w obrębie jednego urządzenia. Do wymiany danych wystarczają dwie linie: SDA oraz SCL, zwykle z rezystorami podciągającymi.
Adapter I2C jest modułem pośrednim. W przypadku wyświetlacza LCD zamienia komunikację I2C z mikrokontrolera na sygnały równoległe wymagane przez wyświetlacz. Dzięki temu LCD, który normalnie zajmuje kilka lub kilkanaście pinów, można obsłużyć przez dwa przewody sygnałowe.

Wyświetlacz LCD 16x2 z modułem I2C
Protokół I2C jest powszechny, ponieważ pozwala podłączyć wiele układów do tej samej magistrali. Każde urządzenie ma adres, a kontroler inicjuje transmisję do wybranego adresu. W prostych projektach rolę kontrolera pełni zwykle Arduino lub inny mikrokontroler.
Magistrala dobrze sprawdza się przy komunikacji z układami o małej oraz średniej szybkości: ekspanderami portów, pamięciami EEPROM, czujnikami, zegarami RTC czy sterownikami wyświetlaczy.
Odległość przewodów powinna być rozsądna. I2C projektowano głównie do połączeń na płytce PCB lub między modułami umieszczonymi blisko siebie; przy długich przewodach rosną pojemność magistrali, zakłócenia i ryzyko błędów transmisji.
W porównaniu z interfejsem równoległym I2C zmniejsza liczbę połączeń, ale wymaga poprawnego adresowania urządzeń, właściwych rezystorów podciągających i zgodności poziomów logicznych.
I2C obsługuje także konfiguracje z wieloma kontrolerami. Arbitraż i wykrywanie kolizji rozstrzygają dostęp do magistrali, choć w typowych projektach stosuje się jednego kontrolera i kilka urządzeń peryferyjnych.
Adapter I2C - piny modułu

Typowy adapter LCD I2C wykorzystuje układ PCF8574 lub zgodny ekspander wejść/wyjść. To on odbiera dane z magistrali I2C i wystawia odpowiednie stany logiczne na linie sterujące wyświetlacza.
Na module znajdują się zwykle dwa zestawy wyprowadzeń. Pierwszy to 16-pinowe złącze lutowane bezpośrednio do wyświetlacza LCD. Drugi to cztery piny do połączenia z mikrokontrolerem: GND, VCC, SDA oraz SCL.
Piny GND i VCC odpowiadają za zasilanie modułu, a SDA i SCL tworzą magistralę I2C. W Arduino Uno linia SDA znajduje się na pinie A4, a SCL na A5.

Wyprowadzenia adaptera I2C
Adres modułu ustawia się za pomocą pól A0, A1 i A2. Na płytkach z układem PCF8574 typowy zakres adresów to 0x20-0x27, a w wersjach z PCF8574A często 0x38-0x3F. Konkretna wartość zależy od zastosowanego układu i od tego, które pola adresowe są zwarte.
Jeżeli kilka urządzeń ma pracować na jednej magistrali, każde z nich musi mieć unikalny adres. Pola A0, A1 i A2 pozwalają zmienić adres adaptera, dzięki czemu można podłączyć do jednej magistrali kilka podobnych modułów, o ile nie nakładają się ich adresy.

Pola adresowe A0, A1 i A2
Adapter I2C - właściwości i specyfikacja modułu
Moduł jest sterowany przez ekspander PCF8574 lub zgodny układ o podobnej funkcji.
Trzy linie adresowe pozwalają ustawić osiem adresów dla jednego wariantu układu.
Typowe moduły LCD I2C pracują z zasilaniem 5 V, zgodnym z wyświetlaczami LCD 16x2 i płytkami Arduino Uno. Przy mikrokontrolerach 3,3 V należy sprawdzić poziomy logiczne i ewentualnie użyć konwertera poziomów.
Często spotykany adres modułu to 0x27, ale nie jest to wartość gwarantowana. W zależności od układu i ustawienia zworek adapter może zgłaszać się na innym adresie, dlatego przed uruchomieniem warto użyć skanera I2C.
Standardowa magistrala I2C pracuje z szybkością 100 kbit/s, a jej szybsze odmiany osiągają 400 kbit/s, 1 Mbit/s lub 3,4 Mbit/s. Adaptery LCD z PCF8574 wykorzystuje się zwykle w trybie standardowym, bo wyświetlacz znakowy nie wymaga dużej przepustowości.
Komunikacja jest synchroniczna: dane na linii SDA są taktowane sygnałem zegarowym SCL, podobnie jak w innych interfejsach synchronicznych, choć zasady adresowania i topologia magistrali są inne niż w SPI.
Jak podłączyć adapter I2C do Arduino?

Połączenia wyświetlacza LCD
Najprostszy eksperyment polega na podłączeniu wyświetlacza LCD 16x2 z adapterem I2C do Arduino Uno. Dzięki adapterowi potrzebne są tylko cztery przewody: zasilanie, masa oraz dwie linie magistrali.
Adapter I2C - potrzebne elementy
Arduino Uno.

Arduino Uno
Wyświetlacz LCD 16x2 z adapterem I2C.
Przewody połączeniowe żeńsko-żeńskie lub żeńsko-męskie, zależnie od użytych złączy.
Biblioteka do obsługi wyświetlacza LCD przez I2C, na przykład LiquidCrystal_I2C.
Adapter I2C - przebieg eksperymentu
W tym przykładzie połączymy wyświetlacz LCD 16x2 z Arduino Uno przez adapter I2C. Adapter pełni rolę pośrednika między magistralą I2C mikrokontrolera a równoległym interfejsem wyświetlacza.
Przed uruchomieniem układu trzeba znać adres urządzenia na magistrali. Jeżeli dokumentacja modułu go nie podaje albo wyświetlacz nie reaguje, najbezpieczniej użyć prostego skanera I2C.
Po stronie LCD adapter łączy się z 16-pinowym złączem wyświetlacza. Po stronie Arduino podłącz SDA adaptera do SDA Arduino, SCL do SCL, VCC do 5 V, a GND do masy. W Arduino Uno odpowiada to zwykle połączeniom A4-SDA i A5-SCL.
Nie pomyl zasilania z liniami sygnałowymi. Odwrócenie VCC i GND może uszkodzić moduł, a brak wspólnej masy spowoduje niestabilną lub całkowicie nieudaną komunikację.
Na płytce adaptera znajduje się potencjometr regulacji kontrastu. Jeżeli po uruchomieniu widzisz tylko podświetlenie albo pierwszy rząd ciemnych pól, delikatnie obróć potencjometr. Zworka podświetlenia pozwala włączyć lub odłączyć diody LED wyświetlacza.
Krok 1.
Pierwszy krok jest szczególnie ważny dla osób, które nie znają adresu modułu. Uruchom szkic skanera I2C i sprawdź, pod jakim adresem adapter odpowiada na magistrali.
Jeżeli pola A0, A1 i A2 nie są zwarte, moduł często ma adres 0x27 albo 0x20, zależnie od wersji układu. Nie należy jednak zakładać tego w ciemno, bo na rynku występują różne warianty płytek.
Skaner I2C wysyła zapytania pod kolejne adresy i wypisuje te, które odpowiedziały. Po wgraniu szkicu do Arduino otwórz monitor portu szeregowego i zanotuj wykryty adres.

Tabela adresów I2C
Krok 2
Ten krok dotyczy tylko sytuacji, w której adapter nie jest jeszcze przylutowany do wyświetlacza. Gotowe moduły LCD 16x2 z adapterem I2C zwykle mają tę część wykonaną fabrycznie.
Jeżeli lutujesz adapter samodzielnie, ustaw płytkę zgodnie z opisem złącza LCD i przylutuj wszystkie 16 wyprowadzeń. Do Arduino podłącz: SDA do A4, SCL do A5, VCC do 5 V i GND do GND.
Po podłączeniu Arduino do komputera wyświetlacz powinien się podświetlić. Jeśli znaki nie są widoczne, najpierw skoryguj kontrast potencjometrem, a dopiero potem szukaj problemu w kodzie.
Sprawdzenie adresu I2C
Krok 3
W trzecim kroku przygotuj środowisko Arduino IDE do obsługi wyświetlacza. Zainstaluj bibliotekę LiquidCrystal_I2C lub inną bibliotekę zgodną z używanym adapterem i wyświetlaczem.
Krok 4
Utwórz nowy szkic. Na początku dołącz bibliotekę Wire.h, która obsługuje magistralę I2C w Arduino, oraz nagłówek LiquidCrystal_I2C.h odpowiedzialny za funkcje wyświetlacza.

Tworzenie szkicu
Krok 5
Następnie utwórz obiekt wyświetlacza, podając wykryty adres oraz wymiary modułu, na przykład 16 kolumn i 2 wiersze. Dla wielu bibliotek wygląda to podobnie do zapisu LiquidCrystal_I2C lcd(0x27, 16, 2), ale adres trzeba dopasować do wyniku skanowania.
Ustawienie adresu, kolumn i wierszy
Krok 6.
W funkcji setup() zainicjalizuj wyświetlacz. W zależności od biblioteki używa się lcd.init() albo lcd.begin(16, 2). Sprawdź przykład dołączony do zainstalowanej biblioteki, ponieważ nazwy funkcji różnią się między wersjami.

Inicjalizacja wyświetlacza
Krok 7
Włącz podświetlenie wyświetlacza funkcją lcd.backlight(), jeżeli biblioteka ją obsługuje. Jeśli podświetlenie nadal nie działa, sprawdź zworkę LED na adapterze.
Funkcja podświetlenia
Krok 8
Wyczyść ekran funkcją lcd.clear(), a następnie ustaw kursor w wybranym miejscu, na przykład lcd.setCursor(4, 0). Pierwszy parametr oznacza kolumnę, drugi wiersz; numeracja zaczyna się od zera.
Czyszczenie LCD i ustawienie kursora
Krok 9

Tekst na wyświetlaczu LCD
Ostatni krok to wypisanie tekstu. Po ustawieniu kursora użyj funkcji lcd.print() i podaj komunikat, który ma pojawić się na ekranie.
Funkcja print
Po zakończeniu programu wgraj szkic do Arduino. Jeżeli adres, połączenia i kontrast są poprawne, na wyświetlaczu LCD pojawi się ustawiony tekst.
Kompletny kod
Kompletny kod powinien zawierać inicjalizację Wire, obiekt LiquidCrystal_I2C z właściwym adresem, włączenie podświetlenia oraz wywołanie lcd.print() dla wyświetlacza LCD 16x2 podłączonego do Arduino Uno.
Adapter I2C - zastosowania
Wyświetlacze LCD znakowe i małe moduły interfejsu użytkownika.
Roboty, prototypy i urządzenia edukacyjne, w których trzeba oszczędzać piny mikrokontrolera.
Konwersja komunikacji szeregowej I2C na równoległe linie sterujące, na przykład przez ekspandery portów.
Podsumowanie
Wyświetlacze OLED są coraz popularniejsze, ale klasyczne LCD 16x2 nadal mają swoje miejsce: są tanie, czytelne i łatwe do uruchomienia. Adapter I2C usuwa ich największą niedogodność, czyli dużą liczbę potrzebnych pinów.
Dla projektanta elektroniki najważniejsze jest świadome użycie magistrali: poprawny adres, właściwe poziomy logiczne, krótkie połączenia i sprawdzona biblioteka. Jeśli przygotowujesz płytkę z wyświetlaczem, czujnikami lub innymi modułami I2C, warto uwzględnić te założenia już na etapie schematu i layoutu PCB.