Updateprobleme - oder warum meine Temperatursensoren schon wieder nicht funktionieren

Peter Schuller RaspberryPi

Nicht lange her hatte ich endlich das Problem mit meinen Dallas DS18B20 Temperatursensoren gelöst, beim ersten Anlauf war es ein klassischer "Widerstand ist zwecklos" fail, durch einen Faden Lötzinn war mein Pullup-Wiederstand überbrückt.

Doch was sehe ich heute nachdem ich endlich mal rundum alle Updates eingespielt hatte? Naja, zumindest keine Sensoren in /sys/bus/w1/devices ...

Mit etwas Hilfe von Google fand sich die Lösung dann diesmal nicht in der Hardware sondern auf Softwareseite. Das mitinstallierte Kernelupdate bringt eine wichtige Neuerung: der Device Tree ist per Default aktiviert. Und da dieser die Nodes für 1-Wire im Default nicht enthält werden die Module nicht geladen.

Im Detail erläutert wird das ganze im offiziellen Raspberry Pi Forum.

In der TL;DR Sektion wird da auch darauf eingegangen, wie man das Problem löst, zur Datei

/boot/config.txt 

muss eine Zeile hinzugefügt werden, da ich bei meiner Verkabelung (+3,3V von Pin 1, mit Pullup zur Datenleitung auf PIN 7, also GPIO 4 und Ground an Pin 6) einen externen Pullup nutze sollte das folgendes sein

dtoverlay=w1-gpio-pullup,gpiopin=<x>,extpullup=<y>

mit dem Kommentar

where <x> and <y> are GPIO pins, obviously

Jap, offensichtlich, aber wie nummeriert? Da +3,3V keine GPIO Nummer besitzt habe ich es zuerst einmal mit den physikalischen Pinnummern, also wie folgt ausprobiert:

dtoverlay=w1-gpio-pullup,gpiopin=7,extpullup=1

Das Ergebnis: wo die Dateien sein sollten sind auch welche, aber die ID 00-3000000000 gehört definitiv keinem meiner Sensoren (DS18B20 IDs fangen an mit 28-00000, zumindest alle die ich bisher in den Fingern hatte) und der Inhalt des Verzeichnisses passt auch nicht so ganz...

Nun ja, wer liest ist schlauer, im zweiten Post des Artikels findet sich die passende README, in der folgendes steht:

File: w1-gpio-pullup-overlay.dtb
Info: Configures the w1-gpio Onewire interface module.
Use this overlay if you *do* need a pin to drive an external pullup.
Load: dtoverlay=w1-gpio-pullup,<param>=<val>,...
Params: gpiopin GPIO pin for I/O (default "4")

pullup Non-zero, "on", or "y" to enable the parasitic
power (2-wire, power-on-data) feature

extpullup GPIO pin for external pullup (default "5")

Mit diesen "Defaults" ergibt sich dann folgende Zeile, die das Problem löst:

dtoverlay=w1-gpio-pullup,gpiopin=4,extpullup=5

Da auch bei den üblichen Anbindungen für große Kabellängen (Stromversorgung via +5V, +3,3V nur als Pullup) in den meisten Beispielen online in Regel die selben Pins benutzt werden, einfach schon, weil diese nah aneinander liegen, dürfte das in den meisten Fällen helfen.