Temperatur messen mit dem Raspberry Pi

Für Temperaturmessungen mit dem Raspberry Pi existieren eine Reihe von Sensoren. Die gängigsten Sensoren sind der LM35, der DHT11, der DHT22 und der DS18B20, wobei sie sich durch den Temperaturbereich und die Messgenauigkeit unterscheiden.

In diesem Beitrag nutze ich den DHT22, da ich Messungen in einem Gewächshaus mit Temperatur und Luftfeuchtigkeit durchführen will. Dabei kann die Temperatur im Winter durchaus unter 0°C fallen, so dass der DHT11 nicht in Frage kommt. Eine andere Möglichkeit, die Temperatur aus einem Funksensor einer Wetterstation über einen 433 MHz Empfänger auszulesen, wird in dem Artikel Raspberry Pi 433 MHz erklärt. ...  mehr lesen

GPIOs auf dem Raspberry Pi ansteuern

Die GPIO Pins (General Purpose Input Output) bilden die Schnittstelle zwischen dem Raspberry Pi und externen Geräten wie z.B. Sensoren oder Relais. Dafür ist es notwendig Daten auf die einzelnen GPIO Pins zu scheiben oder Daten zu lesen. Der große Teil der Pins kann nur zwei Zustände annehmen. Ein (high) oder Aus (low). Weitere Pins sind z.B. für Anwendungen vorgesehen, die UART oder PWM nutzen. Die Belegung der Pins ist unter https://de.pinout.xyz/ zu sehen. Dieser Beitrag beschätigt sich mit den „einfachen“ Pins, die nur zwei Zustände annehmen können. Für das Lesen und Schreiben dieser Pins git es bei dem Raspberry Pi mehrere Varianten

Der Zugriff auf die GPIOs ist nur Benutzern gestattet, die Mitglied der Gruppe gpio sind. Wenn Sie also mit einem anderen Benutzer als dem Standardbenutzer pi die GPIOs ansteuern wollen, müssen Sie diesen der Gruppe gpio hinzufügen.

sudo usermod -a -G gpio <Benutzername>

Das ist zum Beispiel relevant, wenn Sie die GPIOs über ein PHP Script des Webservers ansteuern wollen. Der Apache Webserver läuft unter dem Benutzer www-data, der per default keine Rechte hat auf die GPIOs zuzugreifen. Hierzu müssen Sie den Benutzer www-data der Gruppe gpio hinzufügen.

sudo usermod -a -G gpio www-data

Pinbelegung

Egal wie man die GPIOs ansprechen will, es besteht immer das gleiche Problem. Es existieren für die Ansteuerung verschiedene Nummernsysteme. Zum einen das BCM-System (Broadcom SOC channel). Es wurde vom Entwickler des Chips, der auf dem Raspberry verbaut ist, entwickelt.  Und zum anderen die Wiring Pi Anschlussnummern. Dieses System wurde vom Entwickler der wiringPi Library entworfen. Beides ist nicht identisch und wird gerne mal verwechselt. Welches Nummernsystem man verwendet ist eigentlich egal. Man muss halt immer darauf achten, welches System die Software zu Grunde legt, mit der man die Pins ansteuern will. Die Pinbelegung für beide Systeme findet man auf der Seite von pinout. Alternativ kann man auf der Konsole eines neueren Raspbian auch den Befehl gpio readall eingeben. Man bekommt dann eine tabelarische Übersicht über die GPIO Pins und deren Nummer in beiden Systemen. Bei älteren Raspbian Systemen muss erst noch die wiringPi Bibliothek installiert werden, bevor dieser Befehl zur Verfügung steht.

Bash

Über die Kommandozeile können Sie mit Hilfe des Pseudo-Verzeichnisses /sys/class/gpio/ auf die GPIO-Pins zugreifen.

Als erstes muss man den gewünschten GPIO-Pin „einschalten. Dieser Befehl müssen Sie bei jedem Neustart des Raspberry durchführen.

#   Pin für Schreib- und Lesevorgänge registrieren
echo "17" > /sys/class/gpio/export                  

Als nächstes legt man fest, ob man von dem GPIO-Pin lesen möchte, oder auf dem GPIO-Pin schreiben möchte

# Pin 17 zum schreiben öffnen
echo "out" > /sys/class/gpio/gpio17/direction

# Pin 17 zum lesen öffnen
echo "in" > /sys/class/gpio/gpio17/direction

Nun kann man den Pin auf Ein oder Aus setzen

# Pin 17 einschalten
echo "1" > /sys/class/gpio/gpio17/value

# Sets pin 17 ausschalten
echo "0" > /sys/class/gpio/gpio17/value

Zum lesen des GPIO-Pins wird folgender Befehl ausgeführt. Das Ergebnis ist 1 oder 0.

cat /sys/class/gpio/gpio17/value ...  mehr lesen