So scannen Sie die I2C -Adresse mit Arduino Nano

So scannen Sie die I2C -Adresse mit Arduino Nano
Arduino Nano ist eine kompakte Mikrocontroller -Karte, die ATMEGA328 verwendet, um Anweisungen zu verarbeiten. Es hat einen ähnlichen Formfaktor wie das Arduino Uno und ist mit allen Hardware und Sensoren kompatibel für UNO kompatibel. Mit Arduino Nano können wir I2C -Geräte mit den SDA- und SCL -Stiften einstellen. Jedes I2C -Gerät muss an eine bestimmte I2C -Adresse angeschlossen werden.

Heute werden wir diskutieren, wie wir mehrere I2C -Geräte mit Arduino Nano verbinden und ihre I2C -Adresse mit dem Arduino IDE -Code scannen können.

Einführung in die I2C -Kommunikation

Das Arduino-Nano kann mit anderen Geräten mit dem I2C-Protokoll (Inter-Integrated Circuit) kommunizieren. Die Daten werden über zwei Drähte mit dem I2C -Protokoll ausgetauscht. Es wird in der Elektronik häufig verwendet, da mehrere Geräte eine begrenzte Anzahl von Verbindungen teilen können, ohne dass ein separater Kommunikationskanal erforderlich ist.

Um i2c auf dem Arduino -Nano zu verwenden, wird die SDA (Datenstift) und SCL (Taktpfund) verwendet. In den meisten Arduino Nano Boards sind diese Stifte A4 bzw. A5. Sie müssen auch die Kabelbibliothek in Ihre Skizze einbeziehen und die I2C -Kommunikation mit dem Kabel initialisieren.begin () Funktion.

I2C ist ähnlich bei der Arbeit an UART und SPI. Zum Beispiel hat auch wie das SPI -Protokoll I2C auch Unterstützung für einzelne Master- und mehrere Sklavengeräte. In ähnlicher Weise ähnelt I2C irgendwie auch aufgrund der beiden Kabel für die Kommunikation der UART. UART verwendet zwei Drähte für die Kommunikation, die TX und RX sind. I2C verwendet auch zwei Drähte SDA und SCL für Kommunikation und Datenübertragung.

Das obige Bild stellt die Steuerung von zwei Sklavengeräten mit einem einzigen Master dar. Hier ist ein Pull -Up -Widerstand sowohl mit SDA als auch mit SCL verbunden. I2C gibt Signale mit zwei Ebenen mit niedrigem und offenem Schaltkreis an. I2C auf Arduino Nano befindet sich im offenen Schaltungsmodus. Ziehen Sie den Widerstand auf, den wir verwendet haben.

Arduino Nano verwendet zwei Zeilen für die I2C -Kommunikation:

  • SDA (Seriendaten) - A4 Pin: Leiten Sie die Daten zwischen Master und Sklave aus
  • SCL (Serienuhr) - A5 Pin: So senden Sie Signal an einen bestimmten Slave ein Taktsignal wird verwendet

So scannen Sie die I2C -Adresse in Arduino Nano mit Arduino IDE

Die I2C -Adresse eines Geräts muss eindeutig sein, da es verwendet wird, um das Gerät im I2C -Bus zu identifizieren. Wenn ein Gerät Daten im I2C -Bus sendet oder empfängt, wird dies mit seiner eindeutigen I2C -Adresse verwendet. Wenn zwei Geräte im selben I2C -Bus die gleiche Adresse haben, ist es unmöglich, zwischen ihnen zu unterscheiden, was zu Kommunikationsfehlern und unzuverlässigen Verhaltensweisen führt.

Um sicherzustellen, dass jedes Gerät in einem i2C -Bus über eine eindeutige Adresse verfügt, wird I2C -Geräten normalerweise vom Hersteller eine feste Adresse zugewiesen. Diese Adressen sind typischerweise 7-Bit- oder 10-Bit-Werte, abhängig vom spezifischen I2C-Protokoll, das verwendet wird.

Geräte, die das I2C -Protokoll verwenden, haben eindeutige Adressen von 0 bis 127. Wenn wir beispielsweise einen LCD -Bildschirm mit derselben I2C -Adresse haben, können wir zwischen ihnen nicht mit demselben Arduino -Board kommunizieren.

Jetzt werden wir zwei I2C -Geräte mit Arduino Nano einbinden und die I2C -Adresse mit dem Arduino -Code finden.

Schematisch
Das folgende Bild zeigt einen Schema von Arduino Nano mit OLED- und I2C -LCD. SDA Pin befindet sich bei A4 und der SCL Pin entspricht A5 von Arduino Nano.

Die Verbindungsstifte von Arduino Nano mit OLED und I2C LCD sind:

OLED -Anzeige Arduino Nano Pin
VCC 3v3
GND GND
Scl A5
SDA A4
I2C LCD -Display Arduino Nano Pin
VCC 5v
GND GND
Scl A5
SDA A4

Code
Offen.

#include /*Drahtbibliothek importiert* /
void setup ()

Kabel.Start(); /*I2c Kommunikation beginnt*/
Serie.Beginnen Sie (9600); /*Baudrate für UART -Kommunikation*/
während (!Serie); /*Warte auf die serielle Ausgabe*/
Serie.println ("\ ni2c Scanner");

Hohlraumschleife ()

Byte err, adr; /*Variable, um die I2C -Adresse zu speichern*/
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 nach jedem i2c -Scan*/

Der Code begann mit der Drahtbibliothek, mit der Nano I2C -Kommunikation mit Geräten festgelegt wird. Die nächste Baud -Rate wird für die serielle Kommunikation definiert.

In der Schleifenabschnittsvariable irren Und ADR ist definiert. Zwei Variablen speichern die I2C -Adresse nach dem Scannen. A für die Schleife wird definiert, die die I2C -Adressen von Geräten scannt, die an Arduino Nano angehängt sind.

Nach dem Scannen der I2C -Adresse wird sie auf dem Arduino -Serienmonitor gedruckt. Die angezeigte I2C -Adresse wird im Hex -Format sein.

Hardware
Das folgende Bild zeigt die OLED 0.96-Zoll-I2C-Display und I2C-LCD-Bildschirm sind mit Arduino Nano an den GPIO-Pins A4 und A5 verbunden. VCC und GND beider Displays sind mit Arduino Nano 3v3/5V und GND -Pin verbunden.

Ausgang
Der Serienmonitor zeigte die I2C -Adresse der OLED- und I2C -LCD -Anzeigen an. Beide haben separate I2C -Adressen, was bedeutet, dass wir sie zusammen auf demselben Arduino Nano Board verwenden können.

Wenn wir jedoch Geräte mit derselben i2C -Adresse haben, können wir ihre Adresse ändern. Suchen Sie nach dem Datenblatt eines bestimmten Sensors.

Sowohl OLED- als auch LCD -I2C -Adressen werden unter Verwendung von Arduino Nano erhalten.

Abschluss

Scannen einer i2c. Dieser Artikel enthält den I2C -Scancode, den eine der I2C -Geräteadressen verwendet werden kann, die mit der Nano -Karte verbunden ist.