So verwenden Sie mehrere I2C -Geräte mit Arduino

So verwenden Sie mehrere I2C -Geräte mit Arduino

Arduino ist ein elektronisches Tafel, das für die Gestaltung von Projekten gebaut wurde. Während des Aufbaus von Arduino -Projekten spielt Kommunikation eine wichtige Rolle. Arduino verfügt über mehrere Kommunikationsprotokolle wie serielle USAT, SPI und I2C. Diese Protokolle verbessern die Arduino -Funktionalität und -nutzung über eine große Reihe von Produkten. Wenn unser Gerät kein bestimmtes Protokoll unterstützt, haben wir den Vorteil, die anderen beiden zu verwenden. Unter all diesen I2C ist eines der fortschrittlichsten Protokolle, die in Arduino -Boards verwendet werden. Lassen Sie uns diskutieren, wie Sie das I2C -Protokoll für mehrere Geräte konfigurieren.

I2C mit Arduino

I2C, auch als Inter -Integrated Circuit bekannt. Es verwendet nur zwei Linien für die Kommunikation und eines der komplexesten Protokolle, um mit einem Arduino -Board zu implementieren. Mit I2C können wir bis zu 128 Geräte mit einer Arduino -Karte über eine einzelne Datenlinie verbinden.

I2C verwendet zwei Zeilen, die SDA und SCL sind. Zusammen mit diesen beiden Linien wird ein Pull -Up -Widerstand verwendet, um sowohl die SDA- als auch die SCL -Linie hoch aufrechtzuerhalten.

I2C -Protokolle unterstützen mehrere Master -Slave -Konfiguration. Dadurch können wir mehrere Slave -Geräte steuern.

So verwenden Sie mehrere I2C mit Arduino

Da I2C eine Master-Slave-Konfigurationsunterstützung hat, damit wir mehrere Geräte gleichzeitig steuern können. In einigen Projekten verwenden wir verschiedene Module, Sensoren und Hardware, die die I2C -Kommunikation unterstützen. All dies kann mit einem einzelnen I2C -Bus verbunden werden, wenn sie eine eindeutige I2C -Adresse haben. Wenn wir jedoch mehr als ein Gerät haben, das dieselbe i2c -Adresse teilt, kann dies für beide Geräte Probleme verursachen, und wir können sie nicht mit demselben i2c -Bus steuern. Dieses Problem kann jedoch mit a gelöst werden TCA9548A I2C Multiplexer, dieser Mux verwendet einen einzelnen I2C -Bus von Arduino und wandelt sich in 8 verschiedene Kanäle um.

Alle I2C -Adressen sind hauptsächlich von zwei Typen entweder 7 Bit oder 10 Bits. Meistens verwenden Geräte 7 Bit I2C, aber 10-Bit-I2C wird in Geräten selten verwendet. Es bedeutet also, eine 7-Bit-Adresse zu verwenden, die Arduino 128 Geräte anschließen kann.

Jetzt verbinden wir zwei verschiedene Geräte mit einzigartigen I2C -Protokollen mit Arduino Uno I2C -Linien.

Schaltplan

Die folgende Abbildung zeigt einen OLED. Während ein 16x2 LCD -Bildschirm auch mit dem gleichen i2C -Bus parallel zum OLED -Bildschirm verbunden ist. Eine wichtige Sache, die hier zu beachten ist, ist, dass der 16x2 LCD nur 4 I2C -Kabel anstelle von 8 Drähten für seine Kontrolle verwendet. Zusammen mit LCD haben wir ein I2C -Modul mit Arduino verwendet, das nur 4 Stifte für das LCD -Display benötigt: VCC, GND, SDA, SCL. Mit dem I2C -Modul mit LCD haben wir 4 digitale Pins auf Arduino gespeichert, was die gesamte Verkabelung verringert und die Arduino -Funktionalität verbessert.

So überprüfen Sie Adressen von I2C -Geräten

Bevor wir ein I2C -Gerät mit Arduino anschließen, ist es wichtig zu beachten. Einige Module haben Standard -I2C. Um dieses Problem zu lösen, haben wir eine Kabel Bibliothekscode, der über alle angeschlossenen I2C -Geräte prüft, und an welchen Adresse sie mit Arduino verbunden sind. Dies wird beim Debuggen und Verbesserung des Arduino -Schaltkreises helfen.

Code

#Include /*Draht einschließen.H Bibliothek*/
void setup ()

Kabel.Start(); /*Draht I2C -Kommunikation Start*/
Serie.Beginnen Sie (9600); /*Baudrate für serielle Kommunikation eingestellt*/
während (!Serie); /*Warten auf die serielle Ausgabe am seriellen Monitor*/
Serie.println ("\ ni2c Scanner");

Hohlraumschleife ()

Byte err, adr; /*Variabler Fehler wird mit der Adresse von i2c*/definiert
int number_of_devices;
Serie.println ("Scannen.");
number_of_devices = 0;
für (ADR = 1; ADR < 127; adr++ )

Kabel.BeginnTransmission (ADR);
err = verdrahtet.Endtransmission ();
if (err == 0)

Serie.print ("I2C -Gerät unter Adresse 0x");
if (adr < 16)
Serie.print ("0");
Serie.print (adr, hex);
Serie.println (" !");
number_of_devices ++;

sonst wenn (err == 4)

Serie.print ("Unbekannter Fehler bei Adresse 0x");
if (adr < 16)
Serie.print ("0");
Serie.println (adr, hex);


if (number_of_devices == 0)
Serie.println ("keine I2C -Geräte angehängt \ n");
anders
Serie.println ("Done \ n");
Verzögerung (5000); /*Warte 5 Sekunden auf den nächsten i2c -Scan*/

Dieser Code hilft dabei, die Anzahl der I2C -Geräte und ihre Adresse zu finden, an der sie verbunden sind. Dieser Code wird üblicherweise als I2C -Scannercode bezeichnet.

Erstens haben wir a aufgenommen "Kabel.H" Bibliothek. Dann haben wir im Setup -Teil von Code diese Bibliothek begonnen. Danach initialisieren wir die serielle Kommunikation, indem wir die Baudrate definieren 9600. Dies wird dazu beitragen, die Ausgabe über den seriellen Monitor zu sehen.

Im Schleifenabschnitt haben wir zwei Variablen definiert "irren" Und "ADR". Dann haben wir eine andere Variable definiert "Geräte" und setzen Sie es auf Null. Danach a für Die Schleife wird mit Werten zwischen 0 und 127 initialisiert.

Als nächstes geben wir die Adresse mit dem Kabel mit Kabel.begintransmission (), Der I2C -Scanner sucht nach der Bestätigung von Geräten und ihrer Adresse. Der Wertwert wird in der Variablen gespeichert "Fehler". Der Rückgabewert ist gleich 0. Als nächstes haben wir einen If -Zustand verwendet, der die I2C -Geräteadresse druckt <16. Final address of the device is printed in Hexadecimal form.

Schaltkreis

Ausgang

Die Ausgabe von Geräten, die an Arduino über I2C -Protokollen angeschlossen sind. Hier 0x3c ist die Adresse des I2C LCD während 0x27 ist die Adresse des OLED Bildschirm.

Abschluss

Verbindungsgeräte mit I2C in Arduino können eine Reihe von Stiften speichern. Mehrere Geräte können mit i2c in der Master-Slave-Konfiguration verbunden werden. Die Hauptsache ist jedoch zu beachten, dass alle Geräte eine eindeutige i2c. Wir empfehlen also, dass eine Lösung für dieses Problem darin besteht, a zu verwenden TCA9548A I2C Multiplexer, er kann einen einzelnen I2C -Bus in 8 verschiedene Kanäle umwandeln.