Különösen az otthoni automatizálási projektekben lehet praktikus, hogy több eszköz között kommunikáljunk. Az egyik általánosan használt technika az I2C (vagy TWI) protokoll. Az I2C protokoll egy olyan módszer, amely lehetővé teszi több “Master” kártya és több “Slave” kártya összekapcsolását és akár 128 eszközzel való kommunikációt. Lehetővé teszi az aszinkron kapcsolatokat több komponens között, hogy egy “közös buszon” keresztül információt osszanak meg egymással. Láttuk a soros porton keresztül történő kommunikációt (UART-nak nevezett), amelyet arra használnak, hogy a számítógép kódot küldjön az Arduino-nak, vagy két eszköz összekapcsolására, különösen Bluetooth-on keresztül.
Készülékek
- Számítógép
- Arduino UNO x2 vagy több
- Jumper kábel M / M x3 alkalommal a kártyák száma
Az Arduino kártyák közötti I2C busz csatlakozási diagramja
Az I2C protokoll segítségével különböző rendszerek (érzékelők, LCD képernyő, Raspberry Pi stb.) között is lehetséges a kommunikáció. Érdekes példa erre a több Arduino lap közötti kommunikáció. Ehhez legalább két programot kell írnunk, egyet az “Úrnő” kártyához (Master) és egyet a “Slave” kártyákhoz.
Az I2C kommunikációt egy kétvezetékes busz (néha TWI, Two Wire Interface) és egy cím határozza meg. Az I2C-kommunikáció által használt csapok általában minden egyes eszköz esetében rögzítettek. Az egyik, amelyen az adatok küldése történik (SDA Serial Data Line), a másikon pedig a szinkronizációs órajel (SLC Serial Clock Line).
I2C / TWI csapok:
- Uno, Ethernet A4 (SDA), A5 (SCL)
- Mega2560 20 (SDA), 21 (SCL)
- Leonardo 2 (SDA), 3 (SCL)
- Due 20 (SDA), 21 (SCL), SDA1, SCL1
Ebben a példában egy Arduino Uno lapot használunk, tehát az A4 és A5 csapokat.
Azért, hogy a két kártya kommunikálni tudjon egymással, helyesen kell csatlakoztatni őket (A4-et A4-gyel és A5-öt A5-vel), és ne felejtsük el a földeléseket (GND) az alábbi ábrán látható módon csatlakoztatni.
Vigyázat! Ha az A4 és A5 csapokat egy nem táplált kártya csapjaihoz csatlakoztatjuk, a kód az átvitelkor befagy.
Általában az egyik kártya információt küld (Writer), egy másik pedig fogadja (Reader).
I2C busz konfigurációs kód
A Wire.h könyvtár segítségével egyszerűen definiálhatjuk a soros kommunikációt az I2C buszon. A funkciók hasonlóak a Serial könyvtárhoz.
- A Wire.begin () inicializálja az eszköz címét. 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. Ez a példa nagyon könnyen kiterjeszthető több Arduino kártyára (Leonardo, Mini, stb.), ha a “Slave” kódban a kábelezést és az alkatrészek címét módosítjuk.
Kód az I2C buszra csatlakoztatott eszközök azonosítására
Az alábbi kód (I2CScanner) ) segítségével jól tesztelhetjük, hogy az eszközeink jól kommunikálnak-e egymással.
Az összes, a Master kártyára csatlakoztatott eszköz címét visszaadja.