Správa více Arduin pomocí sběrnice I2C

4.6
(11)

Zejména v projektech domácí automatizace může být praktické komunikovat mezi několika zařízeními. Jednou z běžně používaných technik je protokol I2C (nebo TWI). Protokol I2C je metoda, která umožňuje propojit několik karet „Master“ a několik karet „Slave“ a komunikovat až se 128 zařízeními. Umožňuje asynchronní spojení mezi několika komponentami, které sdílejí informace prostřednictvím „společné sběrnice“. Viděli jsme komunikaci přes sériový port (tzv. UART), který se používá k odesílání kódu do Arduina počítačem nebo k propojení dvou zařízení zejména v Bluetooth.

Vybavení

  • Počítač
  • Arduino UNO x2 nebo více
  • Přepojovací kabel M/M x3násobek počtu karet

Schéma zapojení sběrnice I2C mezi deskami Arduino

Pomocí protokolu I2C je také možné komunikovat mezi různými systémy (senzory, obrazovka LCD, Raspberry Pi atd.). Zajímavým příkladem je komunikace mezi několika deskami Arduino. K tomu musíme napsat minimálně dva programy, jeden pro kartu „Mistress“ (Master) a druhý pro karty „Slaves“.

Komunikace I2C je definována dvouvodičovou sběrnicí (někdy nazývanou TWI, Two Wire Interface) a adresou. Piny používané komunikací I2C jsou obvykle pevně stanoveny pro každé zařízení. Na jednom se posílají data (SDA Serial Data Line) a na druhém synchronizační hodiny (SLC Serial Clock Line).

Piny I2C / TWI:

  • Uno, Ethernet A4 (SDA), A5 (SCL)
  • Mega2560 20 (SDA), 21 (SCL)
  • Leonardo 2 (SDA), 3 (SCL)
  • Due 20 (SDA), 21 (SCL), SDA1, SCL1

V tomto příkladu použijeme desku Arduino Uno, takže piny A4 a A5.

Aby obě karty spolu komunikovaly, musí být správně propojeny (A4 s A4 a A5 s A5) a nezapomeňte propojit země (GND), jak je znázorněno na následujícím obrázku.

Pozor: Pokud jsou piny A4 a A5 připojeny k pinům nenapájené karty, kód v okamžiku přenosu zamrzne.

Obecně platí, že jedna karta bude informace odesílat (Writer) a druhá je přijímat (Reader).

Konfigurační kód sběrnice I2C

Knihovna Wire.h umožňuje snadno definovat sériovou komunikaci na sběrnici I2C. Funkce jsou podobné jako v knihovně Serial.

  • Wire.begin () inicializuje adresu zařízení. Function argument may be empty for master devices
  • Wire.write () allows you to send bytes.
  • Wire.requestFrom () handles the request receive function
  • Wire.beginTransmission () starts transmitting data and defines the receiver.
  • Wire.endTransmission ends data transmission
  • Wire.onRequest () handles the request receive function
  • Wire.onRecieve () manages the data reception function

Code of the „Master“ card

„Slave“ card code

Open the slave card serial monitor before the master card monitor.

In the serial monitor of the „Master“ card:

In the serial monitor of the „Slave 1“ card:

We can see that the two cards are exchanging information. Tento příklad lze velmi snadno rozšířit na více desek Arduino (Leonardo, Mini atd.) přizpůsobením zapojení a adresy součástek v kódu „Slave“.

Kód pro identifikaci zařízení připojených ke sběrnici I2C

Vhodným testem pro zjištění, zda vaše zařízení spolu dobře komunikují, je použití níže uvedeného kódu (I2CScanner) ), který vrátí všechny adresy zařízení připojených ke kartě Master.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *