- Co to jest protokół komunikacyjny I2C?
- Wymagane materiały
- Moduł I2C
- Schemat obwodu
- Kod do znalezienia adresu sterownika I2C
- Kod ESP32
W poprzednim samouczku OLED jest połączony z ESP32 za pomocą komunikacji SPI, która wykorzystuje 5 pinów. W tym samouczku łączymy 16x2 LCD z ESP32, używając tylko 2 pinów, za pomocą komunikacji I2C. Zmniejsza liczbę pinów używanych przez ESP32, dzięki czemu więcej pinów ESP32 pozostaje wolnych do łączenia różnych czujników.
Co to jest protokół komunikacyjny I2C?
Termin I2C oznacza „ Inter Integrated Circuits”. Zwykle jest oznaczany jako IIC lub I do kwadratu C lub nawet jako protokół interfejsu 2-przewodowego (TWI) w niektórych miejscach, ale wszystko oznacza to samo. I2C to synchroniczny protokół komunikacyjny, co oznacza, że oba urządzenia, które udostępniają informacje, muszą dzielić wspólny sygnał zegarowy. Ma tylko dwa przewody, SDA i SCL do udostępniania informacji, z których SCL jest używany do sygnału zegara, a SDA służy do wysyłania i odbierania danych.
Możesz kupić moduł I2C LCD, w który wbudowany jest kontroler LCD I2C1602 lub po prostu kupić kontroler I2C do interfejsu 16x2 LCD z ESP32.
Wymagane materiały
- ESP32
- Wyświetlacz LCD 16 * 2
- Kontroler LCD I2C
- Przewody
- Płytka prototypowa
Moduł I2C
Sterownik I2C jest wyposażony w układ scalony PCF8574, który zapewnia uniwersalną zdalną rozbudowę we / wy poprzez dwukierunkowy zegar szeregowy magistrali I2C (SCL) i dane szeregowe (SDA). Jest to bardzo przydatny układ scalony i może być stosowany w tablicach znaków LED, wyświetlaczach, klawiaturach, sterowaniu przemysłowym itp. Jest 8 pinów I / O, 3 piny (A0, A1, A2) dla adresu magistrali I2C oraz piny SDA, SCL.
Płyta kontrolera LCD ma wbudowany potencjometr do sterowania kontrastem wyświetlacza LCD.
Schematy pinów kontrolera IC i LCD podano poniżej.
Schemat obwodu
Poniżej przedstawiono połączenia do połączenia wyświetlacza LCD z ESP32
- podłącz pin 1-16 modułu I2C do pin 1-16 wyświetlacza LCD.
- Pin SDA modułu I2C -> pin SDA ESP32 czyli D21
- Pin SCL modułu I2C -> pin SCL ESP32 czyli D22
Podłączyłem 3 V ESP32 do 5 V I2C tylko do demonstracji, ale potrzebujemy zasilania 5 V dla modułu I2C, aby poprawnie wyświetlać dane, ponieważ ESP32 może dać tylko 3,3 V, co jest niskie dla modułu I2C i dane nie będą wyraźnie widoczne. Dlatego lepiej jest użyć zewnętrznego zasilania 5 V.
Potrzebujemy plików płytki dla ESP32, więc jeśli jesteś nowy w ESP32, najpierw postępuj zgodnie z samouczkiem Wprowadzenie do ESP32, a następnie wróć tutaj. Możesz także połączyć LCD z ESP32 bez I2C, ale zajmie to więcej pinów ESP32.
Kod do znalezienia adresu sterownika I2C
Przed przejściem do głównego kodu musimy najpierw znaleźć adres modułu I2C.
Kontroler I2C posiada wbudowany bit ADDRESS, który służy do sterowania magistralą I2C. Domyślny ADRES to 0x27, ale w niektórych przypadkach może to być 0x3f. Aby więc sprawdzić adres sterownika I2C, podłącz obwód jak na powyższym obrazku wgraj poniższy kod i otwórz monitor szeregowy, zobaczysz adres w postaci szesnastkowej.
#zawierać
Zauważ, że używamy tego adresu w naszym kodzie interfejsu LCD.
Jak widać, w kontrolerze I2C znajdują się trzy zworki / pady lutownicze oznaczone jako A0, A1 i A2. Służą do zmiany adresu modułu. Oto jak zmienia się adres z domyślnej wartości 0x27 lub 0x3F, jeśli połączysz ze sobą pola adresowe. (1 = Brak połączenia. 0 = Połączono):
A0 |
A1 |
A2 |
Adres szesnastkowy |
1 |
1 |
1 |
0x27 |
0 |
1 |
1 |
0x26 |
1 |
0 |
1 |
0x25 |
0 |
0 |
1 |
0x24 |
1 |
1 |
0 |
0x23 |
0 |
1 |
0 |
0x22 |
1 |
0 |
0 |
0x21 |
0 |
0 |
0 |
0x20 |
Kod ESP32
Najpierw potrzebujemy biblioteki LiquidCrystal_I2C dla modułu I2C LCD. Zwykła biblioteka Liquidcrsytal nie będzie działać, ponieważ używamy tutaj I2C.
Pobierz bibliotekę z
Kod jest napisany w taki sposób, że cokolwiek zostanie wpisane na monitorze szeregowym, zostanie wyświetlone na LCD. Arduino IDE zostało użyte do napisania i przesłania naszego kodu.
Najpierw musimy dołączyć bibliotekę przewodów do komunikacji I2C, która jest dostarczana z Arduino IDE.
#zawierać
Następnie dla I2C LCD dołącz plik LiquidCrystal_I2C.h, który został pobrany wcześniej.
#zawierać
Następnie ustaw adres LCD I2C na 0x27 lub adres, który otrzymałeś uruchamiając kod skanera podany powyżej dla 16-znakowego 2-liniowego wyświetlacza
LiquidCrystal_I2C lcd (0x27, 16,2);
W funkcji konfiguracji , zainicjuj komunikację szeregową i LCD dla 16 znaków 2 linie i włącz podświetlenie. Jeśli chcesz wyłączyć podświetlenie, użyj lcd .noBacklight () i zmień funkcję setCursor () zgodnie z własnymi preferencjami.
void setup () { Serial.begin (9600); lcd.init (); podświetlenie LCD(); lcd.setCursor (0,0); lcd.print ("Witaj świecie!"); opóźnienie (1000); lcd.setCursor (0,1); lcd.print („circuitdigest.com”); opóźnienie (3000);
Na wyświetlaczu LCD najpierw zostaną wyświetlone instrukcje korzystania z monitora szeregowego i wpisz znaki do wyświetlenia.
Ustaw opcję monitora szeregowego na „Brak zakończenia linii”
lcd.clear (); lcd.setCursor (0,0); lcd.print ("Użyj monitora szeregowego"); lcd.setCursor (0,1); lcd.print ("Wpisz do wyświetlenia"); }
Funkcja pętli będzie stale sprawdzać wszelkie przychodzące dane szeregowe z portu szeregowego za pomocą funkcji Serial.available (). Jeśli pojawi się komunikat, odczekaj sekundę i wydrukuj go na wyświetlaczu LCD za pomocą funkcji lcd .write () i Serial.read ().
void loop () {{// kiedy znaki nadejdą przez port szeregowy… if (Serial.available ()) {delay (100); // poczekaj chwilę, aż nadejdzie cała wiadomość lcd.clear (); // wyczyść ekran while (Serial.available ()> 0) {// przeczytaj wszystkie dostępne znaki lcd.write (Serial.read ()); // wyświetl każdy znak na LCD}}}}
Kod Compete jest podany poniżej, więc prześlij kod i otwórz monitor szeregowy. Następnie wpisz wiadomość i naciśnij Enter. Twoja wiadomość zostanie wyświetlona na wyświetlaczu LCD.
Jeśli nie otrzymasz prawidłowej odpowiedzi na wyświetlaczu LCD, sprawdź adres kontrolera I2C lub zeskanuj go ponownie powyższym kodem, aby uzyskać prawidłowy adres.