Poate fi practic, mai ales în proiectele de automatizare a locuinței, să se comunice între mai multe dispozitive. Una dintre tehnicile utilizate în mod obișnuit este protocolul I2C (sau TWI). Protocolul I2C este o metodă care face posibilă conectarea mai multor carduri „Master” și a mai multor carduri „Slave” și comunicarea a până la 128 de dispozitive. Acesta permite conexiuni asincrone între mai multe componente pentru a face schimb de informații prin intermediul unui „autobuz comun”. Am văzut comunicarea prin intermediul portului serial (numit UART), care este utilizat pentru a trimite codul către Arduino de către un computer sau pentru a conecta două dispozitive, în special în Bluetooth.
Echipament
- Computer
- Arduino UNO x2 sau mai multe
- Cablu jumper M / M x3 ori mai mare decât numărul de plăci
Schema de conectare a magistralei I2C între plăcile Arduino
Cu ajutorul protocolului I2C, este posibilă și comunicarea între diferite sisteme (senzori, ecran LCD, Raspberry Pi, etc.). Un exemplu interesant este comunicarea între mai multe plăci Arduino. Pentru aceasta, trebuie să scriem cel puțin două programe, unul pentru placa „Mistress” (Master) și celălalt pentru plăcile „Slaves”.
O comunicare I2C este definită de un bus cu două fire (uneori numit TWI, Two Wire Interface) și o adresă. Pinii utilizați de comunicarea I2C sunt de obicei fixați pentru fiecare dispozitiv. Unul pe care se trimit datele (SDA Serial Data Line) și pe celălalt ceasul de sincronizare (SLC Serial Clock Line).
Pinii 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
În acest exemplu folosim o placă Arduino Uno, deci pinii A4 și A5.
Pentru ca cele două plăci să comunice între ele, acestea trebuie conectate corect (A4 cu A4 și A5 cu A5) și nu uitați să conectați împământarea (GND) așa cum se arată în următoarea diagramă.
Atenție: Dacă pinii A4 și A5 sunt conectați la pinii unui card nealimentat, codul se va bloca în momentul transmiterii.
În general, un card va trimite informații (Writer) și altul le va primi (Reader).
Codul de configurare a magistralei I2C
Librăria Wire.h vă permite să definiți cu ușurință comunicarea serială pe magistrala I2C. Funcțiile sunt similare cu cele din biblioteca Serial.
- Wire.begin () inițializează adresa dispozitivului. 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. Este foarte ușor de extins acest exemplu la mai multe plăci Arduino (Leonardo, Mini, etc.) prin adaptarea cablajului și a adreselor componentelor din codul „Slave”.
Cod pentru identificarea dispozitivelor conectate la busul I2C
Un bun test pentru a ști dacă dispozitivele dumneavoastră comunică bine între ele este să folosiți codul de mai jos (I2CScanner) ) care returnează toate adresele dispozitivelor conectate la placa Master.
.