Jak zeskanować adres I2C w ESPTOP 10 za pomocą Arduino IDE

Jak zeskanować adres I2C w ESPTOP 10 za pomocą Arduino IDE
ESP32 to platforma oparta na mikrokontrolerze, która może współpracować z kilkoma urządzeniami do sterowania różnymi wyjściami według danych wejściowych. Wszystkie protokoły komunikacji, takie jak UART, SPI i I2C, odgrywają znaczącą rolę w komunikacji ESP32. W tym przewodniku będziemy omawiać obwód zintegrowany lub I2C i jak skanować adres urządzenia.

Wprowadzenie do komunikacji I2C

I2C alternatywnie znany jako I2C lub IIC to synchroniczny protokół komunikacji głównej, w którym urządzenie główne sygnału może kontrolować wiele liczby urządzeń niewolników nad jednym drutem (linia SDA).

I2C Połącz działanie protokołów UART i SPI, na przykład SPI obsługuje wiele urządzeń niewolniczych kontroli nad jednym mistrzem, I2C obsługuje to również z drugiej strony UART używa dwóch linii TX i RX do komunikacji I2C również Użyj dwóch linii SDA i SCL dla Komunikacja.

Tutaj widzimy, że użyliśmy rezystorów podciągania z obiema liniami SDA, SCL. Wynika to z faktu, że domyślnie I2C wyświetla tylko dwa poziomy obwodu niskiego lub otwartego. Domyślnie I2C na wszystkich układach jest w trybie otwartego obwodu, więc aby wyciągnąć je wysoko, użyliśmy rezystora podciągania.

Poniżej używa dwóch linii I2C:

  • SDA (dane szeregowe): Linia do transmisji i odbierania danych z głównego do niewolnika i odwrotnie
  • SCL (zegar szeregowy): Linia sygnału zegara do wyboru określonego urządzenia niewolnika

ESP32 I2C Interfejsy autobusowe

ESP32 zawiera dwa interfejsy magistrali I2C przy użyciu, które komunikacja I2C jest wykonywana jako master lub niewolnik w zależności od urządzenia, które jest połączone z ESP32. Według arkusza danych ESP32 interfejs płyty ESP32 płyty I2C obsługuje następującą konfigurację:

  • Komunikacja trybu standardowego I2C z prędkością 100 kbit/s
  • Komunikacja trybu szybkiego lub zaawansowanego I2C z prędkością 400 kbit/s
  • Tryb podwójnego adresowania 7-bitowy i 10-bitowy
  • Użytkownicy mogą kontrolować interfejs I2C poprzez programowanie rejestrów poleceń
  • Interfejs magistrali ESP32 I2C jest bardziej elastyczny w kontrolowaniu

Łączenie urządzeń I2C z ESP32

Urządzenia interfejsowe z ESP32 za pomocą protokołu I2C jest bardzo proste, podobnie jak UART, potrzebujemy tylko dwóch linii do podłączenia SDA i linii zegara SCL.

ESP32 można skonfigurować zarówno w trybie głównym, jak i niewolnicy.

ESP32 I2C Tryb główny

W tym trybie stosuje się ESP32 generuje sygnał zegara, który inicjuje komunikację z podłączonymi urządzeniami niewolnikami.

Dwa piny GPIO w ESP32, które są wstępnie zdefiniowane do komunikacji I2C:

  • SDA: Pin GPIO 21
  • Scl: Pin GPIO 22

ESP32 I2C Tryb niewolnika

W trybie niewolnika zegar jest generowany przez urządzenie główne. Master to jedyne urządzenie, które napędza linię SCL w komunikacji I2C. Niewolnicy to urządzenia, które reagują na Master, ale nie mogą zainicjować transferu danych. W magistrali ESP32 I2C tylko główny może zainicjować transfer danych między urządzeniami.

Obraz pokazuje dwie płyty ESP32 w konfiguracji master-niewolnicy.

Na razie zrozumieliśmy działanie trybu I2C w ESP32, teraz możemy łatwo znaleźć adres I2C dowolnego urządzenia, przesyłając dany kod.

Jak zeskanować adres I2C w ESP32 za pomocą Arduino IDE

Znalezienie adresu I2C podłączonych urządzeń z ESP32 jest ważne, ponieważ jeśli używamy urządzeń z tym samym adresem I2C, nie możemy z nimi komunikować się na jednej linii autobusowej.

Każde urządzenie I2C musi zawierać unikalny adres, a adres od 0 do 127 lub (0 do 0x7f). Na przykład, jeśli używamy dwóch wyświetlaczy OLED tego samego numeru modelu lub produktu, będą miały ten sam adres I2C, więc nie możemy użyć obu na tej samej linii I2C w ESP32.

Aby znaleźć adres IC, weźmy przykład.

Schematyczny

Poniższy obraz pokazuje schemat schematu wyświetlania OLED z płytką ESP32 przy użyciu protokołu komunikacji I2C.

Połączenie ESP32 z OLED obejmuje:

Wyświetlacz OLED Pin ESP32
VCC 3v3/vin
GND GND
Scl GPIO 22
SDA GPIO 21

Kod
Otwórz edytor Arduino i prześlij dany kod skanowania I2C na płycie ESP32. Upewnij się, że ESP32 jest podłączony, a port COM jest wybierany.

/***************
****************
Linuxhint.com
****************
****************/
#Include /*biblioteka drutu wchodzi* /
void setup ()
Drut.zaczynać(); /*I2C Komunikacja zaczyna się*/
Seryjny.rozpocząć (115200); /*Wskaźnik transmisji zdefiniowany dla komunikacji szeregowej*/
Seryjny.println („\ ni2c skaner”); /*Skaner wydruku na monitorze szeregowym*/

void Loop ()
Błąd bajtów, adres;
int ndevices;
Seryjny.println („skanowanie…”); /*ESP32 rozpoczyna skanowanie dostępnych urządzeń I2C*/
nDevices = 0;
dla (adres = 1; adres < 127; address++ ) /*for loop to check number of devices on 127 address*/
Drut.początkowa (adres);
Błąd = drut.endtransmission ();
if (error == 0) /*Jeśli urządzenie I2C znaleziono* /
Seryjny.wydrukuj („urządzenie I2C znalezione pod adresem 0x”);/*Wydrukuj ten wiersz, jeśli urządzenie I2C znaleziono*/
if (adres<16)
Seryjny.druk („0”);

Seryjny.println (adres, hex); /*drukuje wartość sześciokątną adresu I2C*/
nDevices ++;

else if (error == 4)
Seryjny.print („Nieznany błąd pod adresem 0x”);
if (adres<16)
Seryjny.druk („0”);

Seryjny.println (adres, hex);


if (nDevices == 0)
Seryjny.println („Nie znaleziono urządzeń I2C \ n”); /*Jeśli nie ma urządzenia I2C, wydrukuj tę wiadomość*/

w przeciwnym razie
Seryjny.println („Done \ n”);

opóźnienie (5000); /*Opóźnienie sprawdzania magistrali I2C co 5 sekund*/

Powyższy kod skanuje dla dostępnych urządzeń I2C. Kod rozpoczął się od wywołania biblioteki Wire do komunikacji I2C. Kolejna komunikacja szeregowa rozpoczyna się przy użyciu wskaźnika transmisji.

W części pętli kodu skanowania I2C Dwie nazwy zmiennych, błąd I adres są określone. Te dwie zmienne przechowują adres urządzeń I2C. Następnie inicjowany jest pętla, która skanuje pod kątem adresu I2C, zaczynając od 0 do 127 urządzeń.

Po przeczytaniu adresu I2C wyjście jest wydrukowane na monitorze szeregowym w formacie szesnastkowym.

Sprzęt komputerowy

Tutaj możemy zobaczyć OLED 0.96-calowy wyświetlacz I2C jest podłączony do płyty ESP32 w pinach GPIO 21 i 22. VCC i GND wyświetlacza są połączone z ESP32 3v3 i Pin GND.

Wyjście
W wyjściu możemy zobaczyć adres I2C wyświetlacza OLED podłączonego do płyty ESP32. Tutaj adres I2C to 0x3c, więc nie możemy użyć żadnego innego urządzenia I2C z tym samym adresem, ponieważ musimy najpierw zmienić adres I2C tego urządzenia.

Z powodzeniem uzyskaliśmy adres I2C wyświetlacza OLED połączonego z płytą ESP32.

Wniosek

Znalezienie adresu I2C podczas podłączania wielu urządzeń z ESP32 jest ważne, ponieważ urządzenia, które udostępniają ten sam adres I2C, nie mogą być podłączone przez pojedynczy magistralę I2C. Korzystając z powyższego kodu, można zidentyfikować adres I2C i jeśli adres dowolnego dwóch urządzeń można go odpowiednio zmienić w zależności od specyfikacji urządzenia.