Dzisiaj omówimy, w jaki sposób możemy połączyć wiele urządzeń I2C z Arduino Nano i skanować ich adres I2C za pomocą kodu IDE Arduino.
Wprowadzenie do komunikacji I2C
Arduino nano może komunikować się z innymi urządzeniami za pomocą protokołu obwodu międzyintegrowanego (I2C). Dane są wymieniane przez dwa przewody za pomocą protokołu I2C. Jest szeroko stosowany w elektronice, ponieważ pozwala wielu urządzeniom udostępniać ograniczoną liczbę połączeń bez potrzeby osobnego kanału komunikacyjnego.
Aby użyć I2C na Arduino nano używane SDA (PIN DANE) i SCL (PIN CLOCK). Na większości tablic nano, te piny to odpowiednio A4 i A5. Będziesz także musiał dołączyć bibliotekę drutu do szkicu i zainicjować komunikację I2C za pomocą przewodu.Funkcja początkowa ().
I2C jest podobny w pracy do UART i SPI. Na przykład, podobnie jak SPI Protocol I2C ma również obsługę pojedynczych głównych i wielu urządzeń niewolników. Podobnie I2C jest w jakiś sposób podobny do UART również z powodu dwóch przewodów do komunikacji. UART używa dwóch przewodów do komunikacji, czyli TX i RX, I2C używa również dwóch przewodów SDA i SCL do komunikacji i przesyłania danych.
Powyższy obraz reprezentuje kontrolowanie dwóch urządzeń niewolników za pomocą jednego mistrza. Tutaj rezystor podciągający jest podłączony zarówno do SDA, jak i SCL. I2C daje sygnały o dwóch poziomach niskim i otwartym obwodzie. I2C na Arduino Nano jest w trybie otwartego obwodu. Podciągnij rezystor, którego użyliśmy, pociągnie I2C na wysoki poziom.
Arduino Nano używa dwóch linii do komunikacji I2C:
Jak skanować adres I2C w Arduino Nano za pomocą Arduino IDE
Adres I2C urządzenia musi być wyjątkowy, ponieważ służy do identyfikacji urządzenia w magistrali I2C. Gdy urządzenie wysyła lub odbiera dane w magistrali I2C, robi to przy użyciu unikalnego adresu I2C. Jeśli dwa urządzenia w tym samym autobusie I2C mają ten sam adres, nie będzie możliwe rozróżnienie między nimi, co prowadzi do błędów komunikacyjnych i nierzetelnego zachowania.
Aby upewnić się, że każde urządzenie w magistrali I2C ma unikalny adres, urządzenia I2C są zwykle przypisywane stałym adresowi przez producenta. Te adresy są zazwyczaj 7-bitowe lub 10-bitowe, w zależności od określonego protokołu I2C.
Urządzenia korzystające z protokołu I2C mają unikalne adresy od 0 do 127. Na przykład, jeśli mamy ekran LCD z tym samym adresem I2C, nie będziemy w stanie komunikować się między nimi za pomocą tej samej płyty Arduino.
Teraz będziemy interfejs dwa urządzenia I2C z Arduino Nano i znajdziemy adres I2C za pomocą kodu Arduino.
Schematyczny
Poniżej obraz pokazuje schemat Arduino nano z wyświetlaczem LCD OLED i I2C podłączonym w A4 i A5 Pin Arduino Nano. SDA PIN jest na A4, a pin SCL odpowiada A5 Arduino Nano.
Pinki połączeń Arduino nano z OLED i I2C LCD to:
Wyświetlacz OLED | Arduino Nano Pin |
---|---|
VCC | 3v3 |
GND | GND |
Scl | A5 |
SDA | A4 |
Wyświetlacz LCD I2C | Arduino Nano Pin |
---|---|
VCC | 5v |
GND | GND |
Scl | A5 |
SDA | A4 |
Kod
Otwórz Arduino IDE, podłącz nano płytę i prześlij dany kod, aby zeskanować adres I2C na ekranie LCD OLED i I2C.
#Include /*biblioteka druciana importowana* /
void Setup ()
Drut.zaczynać(); /*I2C Komunikacja zaczyna się*/
Seryjny.rozpocząć (9600); /*stawka za kradzieży dla komunikacji UART*/
chwila (!Seryjny); /*Poczekaj na wyjście szeregowe*/
Seryjny.println („\ ni2c skaner”);
Void Loop ()
bajt err, ADR; /*zmienna do przechowywania adresu I2C*/
int number_of_devices;
Seryjny.println („Skanowanie.");
numer_of_devices = 0;
dla (ADR = 1; ADR < 127; adr++)
Drut.początkowa transmisja (ADR);
err = drut.endtransmission ();
if (err == 0)
Seryjny.drukuj („urządzenie I2C pod adresem 0x”);
if (ADR < 16)
Seryjny.druk („0”);
Seryjny.Drukuj (ADR, Hex);
Seryjny.println (" !");
numer_of_devices ++;
else if (err == 4)
Seryjny.print („Nieznany błąd pod adresem 0x”);
if (ADR < 16)
Seryjny.druk („0”);
Seryjny.println (ADR, hex);
if (numer_of_devices == 0)
Seryjny.println („nie załączone urządzenia I2C \ n”);
w przeciwnym razie
Seryjny.println („Done \ n”);
opóźnienie (5000); /*Poczekaj 5 sekund po każdym skanowaniu I2C*/
Kod rozpoczął się od włączenia biblioteki drutu, która pomaga Nano w ustaleniu komunikacji I2C z urządzeniami. Kolejny wskaźnik transmisji jest zdefiniowany dla komunikacji szeregowej.
W zmiennej sekcji pętli błądzić I ADR definiuje. Dwie zmienne będą przechowywać adres I2C po skanowaniu. A dla pętli jest zdefiniowane, które skanują adresy I2C urządzeń dołączonych do Arduino Nano.
Po skanowaniu adresu I2C zostanie wydrukowany na monitorie szeregowym Arduino. Wyświetlany adres I2C będzie w formacie sześciokątnym.
Sprzęt komputerowy
Poniżej obrazu pokazuje OLED 0.96-calowy wyświetlacz I2C i ekran LCD I2C jest podłączony do Arduino Nano w Pins GPIO A4 i A5. VCC i GND obu wyświetlaczy są podłączone do Arduino Nano 3V3/5v i Pin GND.
Wyjście
Monitor szeregowy wyświetlał adres I2C wyświetlaczy LCD OLED i I2C. Oba mają osobne adresy I2C, co oznacza, że możemy je używać razem na tej samej płycie Arduino Nano.
Jeśli jednak mamy urządzenia z tym samym adresem I2C, możemy zmienić ich adres. Aby to szukać arkusza danych określonego czujnika.
Zarówno adresy OLED, jak i LCD I2C są uzyskiwane za pomocą Arduino nano.
Wniosek
Skanowanie adresu I2C przed podłączeniem wielu urządzeń I2C z Arduino jest ważne, ponieważ dwa urządzenia z tym samym adresem nie mogą komunikować się przez pojedynczy autobus I2C. Ten artykuł zawiera kod skanowania I2C za pomocą którego można znaleźć dowolny z adresów urządzeń I2C.