1-Wire

Raspberry Pi

Auf dieser Seite erkläre ich euch wie ihr 1-Wire Devices an euer Raspberry Pi anschließen könnt.
Hierbei ist zu beachten, dass das Raspberry Pi über keinen Hardware 1-Wire verfügt, sondern alles softwareseitig (Bitbanging) erledigt wird.

-> Was ist der 1-Wire Bus?:

Als 1-Wire bezeichnet man eine serielle Schnittstelle, welche nur eine Datenleitung benötigt. Im Gegensatz zu vielen anderen seriellen Schnittstellen kann diese Datenleitung auch zur Versorgung der 1-Wire Devices dienen (Parasitäre Spannungsversorgung).
1-Wire verwendet kein Taktsignal und zählt damit zu den asynchronen Datenbusen.
Jedes Gerät besitzt eine 64-Bit ROM-ID, welche sich aus einer 48-Bit Seriennummer, einem 8-Bit Family Code und einer 8-Bit CRC zusammen setzt.

-> Erster Test mit einem DS18B20:

Der aktuelle Kernel besitzt bereits ein 1-Wire Modul, welches nur noch aktiviert werden muss.
Dieses Modul nutzt den GPIO 4 und dem entsprechend darf dieser GPIO nirgendwo anders verwendet werden, da sonst das Modul nicht geladen werden kann!
Als erstes werden alle notwendigen Module geladen:

Das Modul „w1-therm“ ist speziell für diesen Temperatursensor ausgelegt und wenn es benutzt wird erhält man einen kompletten Datensatz mit berechnetet Temperatur.
Nun muss der Sensor noch angeschlossen werden:

DS18B20

Anschließend könnt ihr euch mit dem Befehl

die ROM-IDs der angeschlossenen 1-Wire Devices anzeigen lassen:

1Wire(1)
Für jedes 1-Wire Device wird nun unter /sys/bus/w1/devices ein extra Verzeichnis angelegt.
In dieses müsst ihr nun wechseln:

In diesem Verzeichnis findet ihr nun eine Datei namens w1_slave.
Diese Datei beinhalten alle Daten die das Raspberry Pi aus dem Sensor ausließt. Um sie in der Konsole anzeigen zu lassen nutzt ihr den cat Befehl:

Anschließend werden alle Daten aus dem Sensor ausgelesen, in der Datei gespeichert und in der Konsole ausgegeben (hier mit dem kompletten Befehl):

1Wire(2)

Der rot eingekreiste Wert ist dabei der aktuelle Temperaturwert.

 

Dokumentation:

 

-> Zurück zu den Basteleien mit dem Raspberry Pi

18 thoughts on “1-Wire
  1. Hallo Kampi,

    wie sieht die Sache bei Temperatur-Sensoren vom Typ DS18S20 aus?
    Dieser ist momentan noch der gängigere Typ und bei mir mehrfach im Einsatz.
    Gruß
    Hans Schmitz

    • Hallo Hans,

      das kann ich dir leider nicht sagen, da ich es mit diesem Sensor noch nicht probiert habe.
      Soweit ich aber weiß (keine Ahnung ob es stimmt) ist diese Möglichkeit nur für den Sensor den ich verwendet habe.

      Gruß
      Daniel

      • Hallo alle zusammen,

        tolle Website mit sehr interessanten Projekten.
        Ich habe es gerade mit dem DS18S20 ausprobiert:
        Es funktioniert alles so wie oben beschrieben.
        Bis jetzt dachte ich immer der DS18S20 ist auf 0,5°C genau.
        Wenn man ihn ausliest erhält man allerdings immer Werte die durch 1/8°C
        (0,125) teilbar sind.

        Gruß
        Ben

        • Hallo Ben97,
          in Deiner Feststellung ist ja auch noch kein Wiederspruch.
          Das eine ist eben die Genauigkeit und das andere die Auflösung
          der Temperatur.
          Im Datenblöat steht ja auch

          ± 0.5 °C Accuracy from -10°C to +85°C

          Thermometer Resolution is User Selectable
          from 9 to 12 Bits

          Gruß hanschmi

  2. Hallo kampis,

    kann ich für die Realisierung einer 1-wire Schnittstelle mit Helfe des xmega128a1 jeden beliebigen Port Pin verwenden?

    • Hey,

      beim Raspberry Pi ist 1-Wire fest auf den GPIO4 gelegt. Beim XMega kannst du es selber entscheiden, da 1-Wire nur ein Protokoll ist.

      Gruß
      Daniel

  3. Hallo,
    Ich bin totaler Anfänger auf den Gebiet , soll aber nun ein Rasp. mit 2 Temp. sensoren und ein für Luftfeuchtigkeit ausstatten und die daten Via UMTS auf ein Server spielen. Weiß da einer bescheid von euch???

      • Hallo
        Ich habe noch keine Sensoren , bin da völlig offen , sagte doch bin Anfänger.Bin für jede Hilfe/tip Dankbar. mit Den umts dacht ich an ein script was zeitgesteurert aufgerufen wird

        • Hey,

          ich kann dir nicht helfen, wenn ich nicht weiß welche Sensoren und Bauteile du verwenden willst :)
          Temperatursensoren für 1-Wire kann ich dir nennen (einfach die die im Artikel stehen). Luftdruck kenne ich keinen und mit UMTS Modulen habe ich auch noch keine Erfahrung.

          Gruß
          Daniel

          • ja ok , mit den Temp. sensoren wäre mir ja schon geholfen, für die Luftfeuchtigkeit finde ich wohl noch was. welche sensoren sollte ich nehmen, wielang kann die maximal kabellänge sein??

          • Hey,

            genau weiß ich es jetzt nicht. Aber so lang darf eine Leitung für 1-Wire nicht sein. Vielleicht 2-3m oder so.

            Gruß
            Daniel

  4. Wie kommst du auf 1 bis 2m für 1-wire? Habe erfahrung mit 25-45m (Zapfsäulenanbindung), laut Wikipedia ist da noch deutlich mehr drin:
    Leitungsanforderungen

    Die Verkabelung kann über ein einfaches Kabel bzw. eine einzelne Leitung auf einer Platine erfolgen. Mit einem passiven Pull-up-Widerstand sind so Leitungslängen von bis zu 100 m mit 150 1-Wire-Geräten möglich….

    Luftfeuchtigkeit(und Temperatur.) kannst du mit einem DHT22/AM2032 messen – hat aber leider kein 1-wire protokol, ist zeitkritischer in der abfrage (C lib notwendig) aber möglich. @wolle: warum sollst du sowas machen, wenn du keine Ahnung hast? (Soll kein Vorwurf sein, interessiert mich nur)

    • Hey,

      bei der Reichweite von 1m handelt es sich um die Verbindung zwischen Master und Slave ohne Pull Up etc. und diese Länge kann je nach Leitungkapazität etwas höher oder niedriger sein (hab ich selbst noch nicht getestet..).
      Mit einen entsprechenden Pull Up ist natürlich mehr drin.

      Gruß
      Daniel

      • Moin, Frohes Fest und so … ;)
        Du hast doch nen (passiven) 10kOhm Pullup lt. deiner obigen Schaltung.
        Problem könnten evtl. die 3,3V vom Pi sein bzw. werden bei ner größeren Kabellänge.
        Hab im Moment 5 x DS18B20 mit je 3m Kabellänge dran, mit einem 4,7kOhm Pullup – Läuft problemlos.

        Mit aktiven Pullup sind wohl bis 300m möglich – da würd ich dann aber wahrscheinlich ’nen zweiten Pi nehmen, kommt evtl. günstiger wie 300 kabel ;)

        • Hey,

          danke gleichfalls. Wie gesagt, ich habe es noch nie mit langen Kabeln getestet, daher kann ich du leider nichts genaues zu sagen. Wenn es funktioniert ist es super :)
          Ich passe die entsprechende Passage im Text an, sobald ich wieder zu Hause bin.

          Gruß
          Daniel

  5. Mit einem BSN10a klappt 1-wire problemlos mit 5 Volt auf DS1820-Seite, dann sollten höhere Kabellängen möglich sein, im an97055 (PDF-Datei, vielerorts verfügbar) von Philips ist es dokumentiert, den bsn10 fand ich woanders als Vorschlag, große Längen sind aber noch ungetestet, da anderes für meinen Pi gerade Priorität hat.
    Gruß,
    Marco

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload CAPTCHA.