Komunikacja I2C między dwoma tablicami Arduino

Komunikacja I2C między dwoma tablicami Arduino
I2C to protokół komunikacyjny używany do łączenia urządzeń z płytką MicroController Arduino UNO. Protokół wykorzystuje wspólną linię danych (SDA) i linię zegara (SCL) do komunikacji. Wbudowana biblioteka drutu w Arduino IDE umożliwia łatwą komunikację z urządzeniami I2C poprzez funkcje wysokiego poziomu i obsługuje wiele autobusów I2C.

Ten artykuł obejmuje:

  • Co to jest komunikacja I2C w Arduino
  • Piny I2C w Arduino
  • Co to jest biblioteka drutu I2C
  • Łączenie dwóch płyt Arduino za pomocą I2C jako mistrza i niewolnika
  • Schematyczny
  • Kod główny
  • Kod niewolnika
  • Wyjście
  • Wniosek

Co to jest komunikacja I2C w Arduino

I2c (Obwód zintegrowany) to popularny protokół łączenia mikrokontrolerów z peryferyjami, takimi jak czujniki i wyświetlacze. Arduino UNO, szeroko stosowana płyta mikrokontrolera, można skonfigurować do komunikacji z innymi urządzeniami za pomocą protokołu komunikacji I2C.

Niektóre główne atrakcje komunikacji I2C obejmują:

Możliwość wielu mistrzów i wielu niewolników: I2C obsługuje wiele urządzeń głównych i wielu urządzeń niewolników w jednym autobusie, umożliwiając jednocześnie komunikację między wieloma urządzeniami.

Niska liczba pinów: I2C używa tylko dwóch linii, SDA i SCL, do komunikacji, co zmniejsza liczbę wymaganych połączeń i upraszcza okablowanie.

Urządzenia adresowalne: Każde urządzenie I2C w autobusie ma unikalny adres, umożliwiający łatwą identyfikację i komunikację z określonymi urządzeniami.

Wysoka prędkość: I2C jest w stanie uzyskać wysokie szybkość transmisji do 3.4 Mbps, co czyni go odpowiednim do szybkich aplikacji do przesyłania danych.

Oszczędzanie energii: I2C pozwala na komunikację o niskiej mocy między urządzeniami, umożliwiając umieszczenie urządzeń w trybie niskiej mocy, gdy nie komunikuje się i budzą na żądanie.

Piny I2C w Arduino

W komunikacji I2C wykorzystywane są dwie linie:

  • Linia danych (SDA): Linia danych do wymiany danych między urządzeniami głównymi i niewolnikami.
  • Linia zegara (Scl): Linia zegara do synchronizacji komunikacji I2C między urządzeniami.

Master Arduino kontroluje linię zegara I2C i rozpoczyna komunikację z urządzeniami peryferyjnymi, podczas gdy urządzenia niewolników odpowiadają na żądania magistra.

W poniższej tabeli znajdziesz pinoty interfejsu I2C na różnych płytach Arduino:

Tablica Piny I2C
Arduino nano SDA-A4 | SCL-A5
Arduino Mega SDA-A4 | SCL-A5 i SDA-20 | SCL-21
Arduino Leonardo SDA-A4 | SCL-A5
Arduino Uno SDA-A4 | SCL-A5
Arduino Micro SDA-02 | SCL-03*

*Pinsy I2C mogą się różnić w zależności od wersji płyty, której używasz uprzejmie, aby zobaczyć odpowiedni arkusz danych, aby uzyskać więcej informacji.

Co to jest biblioteka drutu I2C

Biblioteka drutu I2C jest wstępnie zainstalowana w IDE, która buduje komunikację między urządzeniami I2C. Biblioteka zawiera funkcje konfigurowania i komunikacji w magistrali I2C, w tym funkcje inicjalizacji magistrali jako urządzenia głównego lub niewolnictwa, wysyłania danych i odbierania danych oraz kontrolowania prędkości zegara.

Biblioteka ułatwia komunikowanie się z urządzeniami I2C poprzez wyodrębnienie szczegółów niskiego poziomu protokołu I2C i zapewnienie prostych funkcji wysokiego poziomu, które można używać w szkicach Arduino. Na przykład zaczynać() Funkcja służy do inicjalizacji magistrali I2C jako urządzenia głównego lub niewolnika

Biblioteka obsługuje również korzystanie z wielu autobusów I2C, umożliwiając jednocześnie komunikację z wieloma urządzeniami. Jeśli masz do czynienia z wieloma czujnikami lub wyświetlaczami projektu, jest to pomocne.

Łączenie dwóch płyt Arduino za pomocą I2C jako mistrza i niewolnika

Aby ustanowić komunikację I2C między dwoma tablicami Arduino UNO, szpilki SDA i SCL obu płyt muszą być połączone i dzielić wspólną płaszczyznę. Komunikację można osiągnąć za pomocą wbudowanej biblioteki drutu w Arduino, która zawiera funkcje konfigurowania i komunikacji w magistrali I2C.

Schematyczny

Poniżej obraz pokazuje dwie płyty Orduino podłączone w konfiguracji mistrzowskiej niewolnicy:

Kod główny

Prześlij poniżej kod do Master Arduino Board:

#Include /*biblioteka przewodu dla komunikacji I2C* /
int x = 0; /*Zainicjuj zmienną do przechowywania liczby*/
void setup ()
/*Rozpocznij autobus I2C jako Master*/
Drut.zaczynać();

void Loop ()
/*I2C Adres magistrali jest ustawiony jako 9 dla urządzenia niewolnika*/
Drut.początkowa transmisja (9);
Drut.napisz (x); /*wysyła x*/
Drut.endtransmission (); /*przestań przesyłać*/
x ++; /*Przyrost x*/
if (x> 5) x = 0; /*reset x, gdy otrzyma 6*/
opóźnienie (1000);

Kod zapoczątki obejmuje bibliotekę główną I2C. Inicjowana jest zmienna, która będzie przechowywać wartości liczb całkowitych od 0 do 5. Adres I2C dla urządzenia niewolnika jest zdefiniowany jako 9. Korzystanie z funkcji biblioteki drutu

Na tablicy głównej, zaczynać() Funkcja zainicjuje magistralę I2C jako urządzenie główne

Po skonfigurowaniu płyt mogą się ze sobą komunikować przez autobus I2C. Master Arduino żąda danych z Slave Arduino płyty i niewolnika może odpowiedzieć na żądane dane.

Kod niewolnika

Prześlij poniżej kod na płytkę Slave Arduino, z którą LED jest podłączony:

#włączać
int LED = 13; /*Pin LED dla wyjścia*/
int x = 0; /*zmienna do odbierania wartości od Master Arduino*/
void setup ()
pinmode (LED, wyjście); /*Zestaw szpilki LED jako wyjście*/
Drut.rozpocząć (9); /*I2C SLAVE Urządzenie odczytuje dane z głównego pod adresem nr 9*/
Drut.OnReceive (odbiór); /*Dołącz funkcję do wyzwalacza, gdy coś jest odbierane*/

void recevevent (int bajtes)
x = drut.Czytać(); /*Przeczytaj jedną postać z I2C Master*/

void Loop ()
/*Jeśli otrzymana wartość wynosi 0 LED LED dla 200 ms*/
if (x == 0)
DigitalWrite (LED, High);
opóźnienie (200);
DigitalWrite (LED, niski);
opóźnienie (200);

/*Jeśli otrzymana wartość wynosi 3 LED mrugnięcia dla 400 ms*/
if (x == 3)
DigitalWrite (LED, High);
opóźnienie (400);
DigitalWrite (LED, niski);
opóźnienie (400);

Kod rozpoczął się od włączenia biblioteki drutu, a następnie ustawiamy wbudowaną diodę LED na styku 13 niewolników Arduino jako wyjściowe. Następnie zmienna X definiuje się, że otrzymają dane od głównego Arduino. Korzystając z tej wartości całkowitej, mrugamy LED na konkretny znak po otrzymaniu.

W pętla(), Otrzymany znak jest następnie tłumaczony na inną prędkość migania LED w zależności od otrzymanego postaci. Jeśli warunek zostanie użyty, gdy odbierany znak z urządzenia głównego wynosi 0, dioda LED będzie mrugnij 200 ms, a jeśli odbierany znak to 3 dioda LED mrugnie z opóźnieniem 400 ms.

W przypadku dowolnych innych postaci LED pozostanie wyłączone.

Wyjście

W wyjściu możemy zobaczyć diodę LED połączoną z niewolnikami Arduino mrugnięć za każdym razem, gdy Master wysyła znak 0 lub 3.

Wniosek

Komunikacja I2C pozwala wielu urządzeniom komunikować się ze sobą za pomocą wspólnego autobusu. Tablice Arduino można skonfigurować do komunikowania się ze sobą za pomocą I2C poprzez podłączenie pinów SDA i SCL i konfigurowanie płyt jako master i niewolnika za pomocą biblioteki drutu w Arduino. Korzystanie z komunikacji wielu urządzeń i2c w ramach projektu jest zatem łatwiejsze i bardziej wydajne.