Arduino – Adressen aller ds1820 ermitteln.

Um gezielt die Temperaturwerte eines bestimmten am Arduino angeschlossenen ds18s20 Temperatursensors auslesen zu können, benötigt man dessen Geräte-Adresse.
Wie man diese eindeutige Adresse ermittelt zeige ich in diesem Beitrag.

ds18b20

#include <OneWire.h>

OneWire ow(2); 

void setup(void) 
{
  Serial.begin(9600);
  lookUpSensors();
}

void lookUpSensors()
{
  byte address[8];
  int i=0;
  byte ok = 0, tmp = 0;

  Serial.println("--Suche gestartet--");
  while (ow.search(address))
  {
    tmp = 0;
    //0x10 = DS18S20
    if (address[0] == 0x10)
    {
      Serial.print("Device is a DS18S20 : ");
      tmp = 1;
    } 
    else 
    {
      //0x28 = DS18B20
      if (address[0] == 0x28)
      {
        Serial.print("Device is a DS18B20 : ");
        tmp = 1;
      }
    }
    //display the address, if tmp is ok
    if (tmp == 1)
    {
      if (OneWire::crc8(address, 7) != address[7])
      {
        Serial.println("but it doesn't have a valid CRC!");
      } 
      else 
      {
        //all is ok, display it
        for (i=0;i<8;i++)
        {
          if (address[i] < 9)
          {
            Serial.print("0");
          }
          Serial.print("0x");
          Serial.print(address[i],HEX);
          if (i<7)
          {
            Serial.print(", ");
          }
        }
        Serial.println("");
        ok = 1;
      }
    }//end if tmp
  }//end while
  if (ok == 0)
  {
    Serial.println("Keine Sensoren gefunden");
  }
  Serial.println("--Suche beendet--");
}

void loop(void) 
{
  //do nothing :)
}

Über Enrico S.

Programmierer, Webdesigner, Grafiker, Blogger, Screencaster, Arduino- und eMobility Enthusiast.

6 Kommentare zu “Arduino – Adressen aller ds1820 ermitteln.

  1. Pingback: Arduino – gezielt einen ds1820 Sensoren auslesen | Fluuux – TechBlog

  2. Pingback: Arduino, MySQL - Temperatur-Sensoren über Webserver auslesen

  3. Hallo, der Sketch funktioniert soweit ganz gut… 2 kleine Fehler könnte man noch im Abschnitt „//all is ok, display it“ beheben… mfG

    //all is ok, display it
    for (i=0;i<8;i++)
    {
    Serial.print("0x"); // <—– hier Hex-Kennung zuerst anzeigen
    if (address[i] <= 0xF) // <—– führende Nullen bis einschließlich 0x0F
    {
    Serial.print("0");
    }

  4. Der letzte Tip ist genial.
    Mein Kommentar gilt für DS18B20. Andere Sensoren habe ich nicht getestet.

    Bisher habe ich die Adressen zwar angezeigt bekommen, aber nach 0x kamen nicht alle Adressen eindeutig. Manche sahen so aus 00X6 oder 00X3 oder 00XB.
    Richtig hätte es 0X06 oder 0X03 oder 00X0B heißen müssen
    Bei vielen mußte ich die führende Null aus dem ersten Abschnitt in den zweiten übertragen.

    Mit dem Tip von formatC funktioniert alles tadellos.
    Danke an alle Beteiligte