Wikipedia: Raspberry Pi
Betriebssysteme für den Raspberry Pi: Raspberrypi.org
Tool zum Image installieren: Win32DiskImager
sudo apt-get update && sudo apt-get upgrade
Man hat nun ein fertig eingerichtetes Raspbian auf seinem Raspberry Pi. Über das Kommando startx in der Konsole kommt man nun zur grafischen Oberfläche. Das Betriebssystem lässt sich jederzeit austauschen, indem man einfach eine andere SD-Karte hineinsteckt.
Der DS18B20 wird an die GPIO-Pins für 3,3V Spannung und Ground angeschlossen sowie an GPIO-Pin 4 für die Datenleitung. Zwischen die 5V Leitung und die Datenleitung wird 4k7 Ohm Wiederstand geschaltet.
Aktivierung des 1-Wire Buses mit folgenden Befehlen:
sudo modprobe wire
sudo modprobe w1-gpio
sudo modprobe w1-therm
Die Überprüfung erfolgt mit:
sudo lsmod
Ab Kernel 3.8 ist die Datei config.txt für das Laden der Module zuständig:
(Die Kernel Version kann mit dem Befehl cat /proc/version geprüft werden.)
sudo nano /boot/config.txt
Folgendes ergänzen:
# Temperatursensor an 1-Wire
dtoverlay=w1-gpio
gpiopin=4
Danach mit dem Befehl sudo reboot neustarten und anschließend mit sudo lsmod überprüfen ob der 1-Wire Bus aktiviert ist.
Update:
Fortunately since Raspberry Pi kernel 4.9.28, you can setup multiple gpio 1-Wire buses by executing as root e.g.:
dtoverlay w1-gpio gpiopin=4 pullup=0
dtoverlay w1-gpio gpiopin=5 pullup=0
dtoverlay w1-gpio gpiopin=6 pullup=0
sleep 5
ls -l /sys/bus/w1/devices
Das System schreibt immer den aktuellen Wert des Sensors in eine Datei. Diese befindet sich in einem durch die Sensor-Kennung bestimmten Verzeichnis:
cd /sys/bus/w1/devices
Wechseln in das Busverzeichnis:
ls
Bei einem Sensor werden nun zwei Verzeichnisse angezeigt. Ein Verzeichnis ist “w1_bus_master1”, dass wichtige Verzeichnis ist das mit einer Code-Bezeichnung, z.B. “28-0516931ed7ff”.
Mit dem folgenden Befehl kann der Inhalt der Datei “w1_slave” mit dem Sensor-Wert bzw. dem Temperatur-Wert abgerufen werden.
cat /sys/bus/w1/devices/28-0516931ed7ff/w1_slave
Mit folgender Funktion Python übers Terminal aufrufen:
sudo idle /home/pi/xxx/messprogramm.py
(xxx steht als Platzhalter für das Verzeichnis, z.B. .../pi/Documents/Python/Temp/messprogramm.py)
Dann diesen Quelltext kopieren, ins Verzeichnis speichern und via F5 ausführen:
# messprogramm.py
import os, sys, time
def aktuelleTemperatur():
# 1-wire Slave Datei lesen
file = open('/sys/bus/w1/devices/28-0516931ed7ff/w1_slave')
filecontent = file.read()
file.close()
# Temperaturwerte auslesen und konvertieren
stringvalue = filecontent.split("\n")[1].split(" ")[9]
temperature = float(stringvalue[2:]) / 1000
# Temperatur ausgeben
rueckgabewert = '%6.2f' % temperature
return(rueckgabewert)
schleifenZaehler = 0
schleifenAnzahl = 20
schleifenPause = 1
print "Temperaturabfrage für ", schleifenAnzahl,
" Messungen alle ", schleifenPause, " Sekunden gestartet"
while schleifenZaehler <= schleifenAnzahl:
messdaten = aktuelleTemperatur()
print "Aktuelle Temperatur : ", messdaten, "°C",
"in der ", schleifenZaehler, ". Messabfrage"
time.sleep(schleifenPause)
schleifenZaehler = schleifenZaehler + 1
print "Temperaturabfrage beendet"
#!/usr/bin/python
# coding=utf-8
# messprogramm.py
#------------------------------------------------------------
import os, sys, time
# Global für vorhandene Temperatursensoren
tempSensorBezeichnung = [] #Liste mit den einzelnen Sensoren-Kennungen
tempSensorAnzahl = 0 #INT für die Anzahl der gelesenen Sensoren
tempSensorWert = [] #Liste mit den einzelnen Sensor-Werten
# Global für Programmstatus /
programmStatus = 1
def ds1820einlesen():
global tempSensorBezeichnung, tempSensorAnzahl, programmStatus
#Verzeichnisinhalt auslesen mit allen vorhandenen Sensorbezeichnungen 28-xxxx
try:
for x in os.listdir("/sys/bus/w1/devices"):
if (x.split("-")[0] == "28") or (x.split("-")[0] == "10"):
tempSensorBezeichnung.append(x)
tempSensorAnzahl = tempSensorAnzahl + 1
except:
# Auslesefehler
print "Der Verzeichnisinhalt konnte nicht ausgelesen werden."
programmStatus = 0
def ds1820auslesen():
global tempSensorBezeichnung, tempSensorAnzahl, tempSensorWert, programmStatus
x = 0
try:
# 1-wire Slave Dateien gem. der ermittelten Anzahl auslesen
while x < tempSensorAnzahl:
dateiName = "/sys/bus/w1/devices/" + tempSensorBezeichnung[x] + "/w1_slave"
file = open(dateiName)
filecontent = file.read()
file.close()
# Temperaturwerte auslesen und konvertieren
stringvalue = filecontent.split("\n")[1].split(" ")[9]
sensorwert = float(stringvalue[2:]) / 1000
temperatur = '%6.2f' % sensorwert #Sensor- bzw. Temperaturwert auf 2 Dezimalstellen formatiert
tempSensorWert.insert(x,temperatur) #Wert in Liste aktualisieren
x = x + 1
except:
# Fehler bei Auslesung der Sensoren
print "Die Auslesung der DS1820 Sensoren war nicht möglich."
programmStatus = 0
#Programminitialisierung
ds1820einlesen() #Anzahl und Bezeichnungen der vorhandenen Temperatursensoren einlesen
# Temperaturausgabe in Schleife
while programmStatus == 1:
x = 0
ds1820auslesen()
print "Sensorbezeichnung und Temperaturwert:"
while x < tempSensorAnzahl:
print tempSensorBezeichnung[x] , " " , tempSensorWert[x] , " °C"
x = x + 1
time.sleep(.5)
print "\n"
# Programmende durch Veränderung des programmStatus
print "Programm wurde beendet."
Der linke Pin des Sensors wird an 3,3V von Pi (Pin1) angeschlossen, der zweite Sensor Pin über einen Widerstand (4k7 Ohm – 10k Ohm) mit einen freien GPIO des Raspberrys (z.B. GPIO4, Pin7) und der rechte Pin kommt an GND (Pin6) vom Pi. Der zweite Pin von rechts des Sensors bleibt frei.
Der Aufbau ist für DHT11 bzw. DHT22 gleich, da die Pins identisch vergeben sind.
Git-Core installieren:
sudo apt-get install git-core
WiringPi library downloaden:
git clone git:git.drogon.net/wiringPi//
mit ls überprüfen ob das Verzeichnis angelegt wurde.
Wechseln in das Verzeichnis:
cd wiringPi
Folgendes ausführen um die library zu installieren:
./build
Im Anschluss das Verzeichnis verlassen:
cd ..
lol_dht22 library downloaden:
git clone https://github.com/technion/lol_dht22
In das Verzeichnis wechseln:
cd lol_dht22
Den Befehl ./configure ausführen und danach make.
Sollte nach der Eingabe vom "make" eine Fehlermeldung (missing aclocal-1.15) kommen, dann folgenden Befehl ausführen:
autoreconf -vfi
Um die Werte auszulesen, folgenden Befehl eingeben:
sudo ./loldht 7
Die 7 ist eine Variable und spiegelt die Pin-Nummer wieder, an der, der Sensor angeschlossen ist. Pin 7 = GPIO 4.