Find adressen på I2C enhed

Find I2C adressen på en enhed

Har du købt eks. et LCD display eller en temperaturcenser der understøtter I2C standard til eks. arduino. Hvordan finder du adressen?

Der er faktisk ikke så svært – sådan kan du finde adressen på I2C enheden.

Start med at forbinde enheden (LCD eller anden enhed) til arduino:
Enhed——-> Arduino uno
GND GND
VCC 3.3V
SDA A4
SCL A5

LCD display
Bagsiden af et LCDE display hvor man kan se connections

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 fundet\n");  //Skriv i seriel konsollen at der ikke er fundet nogle enheder
  else                                             // Ellers (Hvis der var fundet enheder..
    Serial.println("done\n");                      //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

Her vil du kunne se de enheder den finder med de tilhørende adresser

Her vil du kunne se adressen!

Du finder det samlet i min youtube video her:

Leave a Reply

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.