INHALT
Arduino I2C – Inter-Integrated Circuits (inter-chip connection) ist ein serielles Kommunikationsprotokoll über zwei bidirektionale Kommunikationsleitungen. Diese Leitungen werden auch genannt: SDA (Serial Data) – Serieller Datenbus und SCL (Serial Clock) – Taktbus. Die SDA- und SCL-Busse von Arduino werden über Widerstände an den Stromversorgungsbus herangeführt. Schauen wir uns an, was der i2c-Arduino-Bus ist.
Bestandteile:
- Arduino Uno / Arduino Nano / Arduino Mega
- 1602 LCD-Display mit I2C
- RTC-Modul DS1307 mit I2C
- Dupont-Kabel
- Bibliothek LiquidCrystal_I2C.h und iarduino_RTC.h
Arduino-Mikrocontroller verwenden zwei Pins für den I2C-Betrieb. Beim Arduino Uno und Nano entspricht die SDA-Leitung dem analogen Anschluss A4 und SCL dem analogen Anschluss A5. Beim Ardunio Mega besteht SDA aus 20 Pins und SCL aus 21 Pins. Um den I2C-Bus und die Kommunikation von Gerät zu Gerät zu erleichtern, verfügt die Arduino IDE über eine Standard-Wire-Bibliothek (muss nicht heruntergeladen und installiert werden).
I2C Kommunikation Arduino: Beschreibung, Beispiel
Jedem Gerät, das an den Mikrocontroller angeschlossen wird, wird eine eindeutige Adresse zugewiesen (es können maximal 127 Geräte angeschlossen werden). Es ist nicht möglich, die Geräteadresse über den Bus zu ändern, da sie im Chip eingebettet ist. Oft bieten die Hersteller die Möglichkeit, die Geräteadresse in einem kleinen Bereich zu ändern, wodurch es möglich ist, mehrere identische Geräte an den Arduino IIC-Bus anzuschließen.
Wie man ein Gerät an den i2c-Bus anschließt Arduino
LCD 1602 i2c | Arduino Uno | Arduino Nano | Arduino Mega |
GND | GND | GND | GND |
VCC | 5V | 5V | 5V |
SDA | A4 | A4 | 20 |
SCL | A5 | A5 | 21 |
Mit dem folgenden Programm können Sie die Adressen aller an den Arduino i2c-Bus angeschlossenen Geräte herausfinden. Wenn das Gerät nicht korrekt angeschlossen wurde, zeigt der Portmonitor eine Meldung an, dass kein Gerät gefunden wurde. Jedes Gerät, das die i2c-Kommunikation unterstützt – DS1302-Echtzeituhrmodul, BMP180-Drucksensor usw. – kann anstelle des Displays angeschlossen werden.
Programm für I2C Scanner Arduino
#include "Wire.h" void setup(){ Wire.begin(); Serial.begin(9600); } void loop(){ byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 8; address < 127; address++ ){ Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0){ Serial.print("I2C device found at address 0x"); if (address < 16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error == 4) { Serial.print("Unknow error at address 0x"); if (address < 16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); }
- Mit diesem Code können Sie alle Adressen der Geräte ermitteln, die mit dem iic-Bus verbunden sind.
- Anstelle einer LCD-Anzeige kann jedes beliebige Gerät angeschlossen werden – etwa das Echtzeitmodul DS1302 oder der Drucksensor BMP180.
Wie man mehrere Geräte an den Arduino i2c anschließt
Im Beispiel werden zwei Geräte gleichzeitig an den Arduino IIC angeschlossen – die Textanzeige 1602 und das RTC-Uhrenmodul. Nach dem Zusammenbau der Schaltung können Sie einen Busscan durchführen, aber die Adressen aller Geräte sind unterschiedlich und nur das Display kann die Adresse ändern. Für die anderen Geräte sind die Adressen vom Hersteller „fest verdrahtet“ und werden in den Standardbibliotheken verwendet.
Programm für Mehrere Geräte am I2C Arduino
#include "Wire.h" #include "SFE_BMP180.h" SFE_BMP180 pressure; #define ALTITUDE 1655.0 #include "LiquidCrystal_I2C.h" LiquidCrystal_I2C LCD(0x27,16,2); void setup(){ pressure.begin(); LCD.init(); LCD.backlight(); } void loop(){ char status; double T,P,p0,a; status = pressure.startTemperature(); if (status != 0){ delay(status); status = pressure.getTemperature(T); if (status != 0){ LCD.setCursor(0, 0); LCD.print("Temp: "); LCD.print(T,2); LCD.print(" *C"); status = pressure.startPressure(3); if (status != 0){ delay(status); status = pressure.getPressure(P,T); if (status != 0){ p0 = pressure.sealevel(P,ALTITUDE); LCD.setCursor(0, 1); LCD.print("Pres: "); LCD.print(p0,2); LCD.print(" mb, "); } else Serial.println("error retrieving pressure measurement\n"); } else Serial.println("error starting pressure measurement\n"); } else Serial.println("error retrieving temperature measurement\n"); } else Serial.println("error starting temperature measurement\n"); delay(5000); }
- Durch eine Änderung des Programms können Sie statt der Temperatur den absoluten und relativen Luftdruck anzeigen;
- In diesem Beispiel wird die Bibliothek LiquidCrystal.h für QAPASS verwendet.
Schlussfolgerung. Wir haben uns die Möglichkeit angeschaut, mehrere IIC-Geräte an den Arduino anzuschließen, was bei der Entwicklung verschiedener DIY-Projekte, wie z. B. einer Wetterstation mit einem Drucksensor auf dem Arduino, nützlich sein wird. Wenn Sie noch Fragen zum IIC-Busscanner oder zum Anschluss von Geräten mit diesem Protokoll haben, können Sie diese gerne in den Kommentaren zu diesem Beitrag stellen.
Schreibe einen Kommentar