Dieser Beitrag zeigt, wie Sensoren per Raspberry Pi angeschlossen, in das System eingebunden und ausgelesen werden.

Links:

Wikipedia: Raspberry Pi

Betriebssysteme für den Raspberry Pi: Raspberrypi.org

Tool zum Image installieren: Win32DiskImager


Installation

  1. Öffne die soeben heruntergeladene Win32DiskImager.exe. Im Feld Image File muss man nun das heruntergeladene Raspbian Image einbinden. Im nebenstehenden Feld Device muss man den Laufwerksbuchstaben auswählen auf welches das Image installiert werden soll. Wenn man sichergestellt hat, dass beide Angaben korrekt sind, klickt man auf Write und das Image wird auf die SD-Karte geschrieben.
  2. Stecke die SD-Karte nun in deinen Raspberry Pi. Bevor du den Mini-USB-Stecker zur Stromversorgung anschließt.
  3. Als erstes wählen wir den Punkt Expand Filesystem an, damit Raspbian den kompletten Speicherplatz auf der SD-Karte nutzt. Nach kurzer Zeit wird die Erweiterung bestätigt. Jedoch wird das Laufwerk erst beim nächsten Booten erweitert. Das kann, muss aber nicht, einige Zeit in Anspruch nehmen, in der der Raspberry Pi nicht reagiert.
  4. Nachfolgend können alle benutzerspezifischen Einstellungen wie Zeitzone, Tastatur, Sprache... eingestellt werden. Nach er Konfiguration startet man den Raspberry Pi neu. 
  5. Nachdem der Raspberry Pi wieder gebootet ist, aktualisieren wir den Raspberry Pi noch mittels folgender Eingabe in der Konsole. Der Standard-Benutzer hört auf den Namen pi und das Passwort lautet raspberry. Zuerst muss pi, darauffolgend raspberry (Passworteingabe wird nicht angezeigt) eingegeben werden.

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.


Temperatursensor

Installation eines DS18B20

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

 

Quelle: https://raspberrypi.stackexchange.com/questions/13329/connecting-multiple-ds18b20-digital-temperature-sensors-to-different-gpio-ports/69649


Temperaturwert auslesen

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


Temperaturwert via Python auslesen

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"


Mehrere DS18B20 Sensoren automatisch mit Python ein- und auslesen

#!/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."


Feuchtigkeitssensor

Installation eines DHT11 / DHT22

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.