Find adressen på I2C enhed
Har du købt eks. et LCD display eller en temperaturcenser der understøtter I2C standard til eks. arduino. Hvordan kan jeg finde adressen på I2C enheden?
Der er faktisk ikke så svært – Lad os starte og find adressen på I2C enhed.
Start med at forbinde enheden (LCD eller anden enhed) til arduino:
Enhed——-> Arduino uno
GND GND
VCC 3.3V
SDA A4
SCL A5
Kopier nu dette schetch til dit Arduino IDE:
// ————————————–
// i2c_scanner
// Med udgangspunkt i denne kode: https://playground.arduino.cc/Main/I2cScanner/
// Tak til alle!
//
// Dentte program tester for enheder på i2c bussen dog maks 7 bit adresser
include //For at kunne bruge stikk A4 som SDA line og A5 som SCL line skal vi importerer Wire biblioteket
void setup()
{
Wire.begin();//Initialiserer Wire biblioteket og tilslutter sig I2C bussen som enten master eller slave
Serial.begin(9600); //Start seriel”porten” så vi kan se hvad der sker under vejs.
while (!Serial); // Så læge at Serial objektet ikke er initialiseret endnu (er nødvendigt på Arduino Lepardo
Serial.println(“nI2C Scanner”); //Skriv i seriel konsollen
}
void loop() //Gennemløb dette tit!
{
byte error, address; //Klargør variabler til fejlhåndtering og adressen
int nDevices; //Klargør variabler til Device nr.
Serial.println(“Scanning…”); //Skriv i seriel konsollen
Devices = 0; //Sæt device til 0
for(address = 1; address < 127; address++ ) //Gennemløb for de 7 bit, hvilket svarer til 127
{
// i2c scanner bruger retur værdien
// af funktionen Write.endTransmission til at se
// om en enhed accepterer kommunikationen
Wire.beginTransmission(address); // Påbegynd transmision til enhed med given adressen
error = Wire.endTransmission(); //Afslut transmision og fordi funktionen endTransmission() returnerer en værdi hvis det ikke lykkedes,
//Bruger vi returværdien til at afgøre om der var en enhed på den givne adresse
//Der er ifølge https://www.arduino.cc/en/Reference/WireEndTransmission følgende returværdier:
// 0 - Det lykkedes
// 1 - Data er for lang til transmisionsbuffer
// 2 - Modtog NACK (Ikke bekræftet) ved transminsion af adresse
// 3 - Modtog NACK ved transmision af data
// 4 - Andre fejl
if (error == 0) //Hvis der ikke var en fejl, var der en enhed på adressen....
{
Serial.print("I2C enhed fundet ved addresse 0x"); //Skriv i seriel konsollen
if (address<16) //Hvis adressen er mindre end 16 som i HEX er 10
Serial.print("0"); //Tilføjes et nul før værdien som kun er på et cifre
Serial.print(address,HEX); //Skriv nu adressen, men i HEX værdi
Serial.println(" !"); //Skriv i seriel konsollen
nDevices++; //Vi har fundet en enhed og tæller antal devies op med en
}
else if (error==4) //Hvis returværdien er 4(Andre fejl)
{
Serial.print("Ukendt fejl ved addresse 0x"); //Skriv i seriel konsollen at der er en ukendt fejl
if (address<16) //Hvis adressen er mindre end 16 som i HEX er 10
Serial.print("0"); //Tilføjes et nul før værdien som kun er på et cifre
Serial.println(address,HEX); //Skriv nu adressen, men i HEX værdi
}
}//Slut for hver adresse
if (nDevices == 0) //Hvis der ikke var fundet nogle enheder..
Serial.println("Ingen I2C enheder fundetn"); //Skriv i seriel konsollen at der ikke er fundet nogle enheder
else // Ellers (Hvis der var fundet enheder..
Serial.println("donen"); //Skriv i seriel konsollen"Done"
delay(5000); // Vent 5 sekunder før der scannes igen
}
Sketchen kan også hentes her:
Upload nu sketcen til din arduino og åben serial monitor
Find adressen på I2C enhed
Her vil du kunne se adressen! Så har du fundet adressen på I2C enhed.
Du finder det samlet i min youtube video her: