Der Raspberry Pi ist ja mittlerweile ein bekannter und beliebter Scheckkartenplatinen-Computer mit dem sich allerlei anstellen lässt. Vom TV-Frontend mit Kodi, über Spielekonsolenemulatoren mit Retropi bis hin zum Bürorechner, ist damit fast alles möglich. In diesem Projekt möchte ich vorstellen, wie mit Hilfe des Raspberry Pi Model2 physikalische Größen wie Temperatur und Luftfeuchtigkeit gemessen und auf einem Speichermedium geloggt werden. Und zwar mit einem Feuchtesensor der Type HYT939 der am I²C Bus angeschlossen wird, genauer gesagt: mehrere I²C Feuchtesensoren am Bus…
Wir beginnen zuallererst mit der Versorgung des Raspberry PI. Im Bild ist ein Pi2 in ein einfaches Kunststoffgehäuse eingebaut und an eine 2Ah USB-Powerbank von RS-Components angeschlossen. Der Ladeanschluss der Powerbank ist vom Gehäuse nach aussen geführt. So kann der Pi wahlweise über die Powerbank (mit einer nicht rechenintensiven Anwendung bis zu 3h) oder über eine externe USB-Versorgung (z.Bsp. einem Handyladeadapter) betrieben werden. Der I²C Bus des PI (Pin 3 SDA und Pin 5 SCL sowie Pin 2,4 +5V und GND an Pin 6,14…) ist auf einen RJ Stecker im Gehäuse ausgeführt. Um später irgendwelche Statusmeldungen ausgeben zu können, sind zwei LEDs an die GPIOs 24 und 18 (an Pin18 und Pin12) angeschlossen. Ein weiterer GPIO wird über einen 22k Pulldown-Widerstand an einen Taster an 5V geschaltet. (GPIO23 an Pin16).
Für die USB Anschlüsse, Ethernet und HDMI wurden im Gehäuse passende Ausschnitte gemacht, an eine USB Schnittstelle ein Keyboard und an den HDMI Port ein Monitor angeschlossen. Die LAN Verbinung mit Internetzugang sollte auch hergestellt sein, um nach der Ersteinrichtung die benötigten Module und Updates laden zu können.
Jetzt fehlt nur noch das Speichermedium mit Betriebssystem. Der PI2 ist mit einem Micro-SD Slot ausgestattet. Ich habe hier eine 4GB Micro SD mit einem raspian-wheezy image bespielt. Um das Imagefile auf einfache Weise auf die SD-Karte zu bekommen, empfiehlt es sich, das Tool win32diskimager zu verwenden. Ist die Speicherkarte dann fertiggestellt, kann man beginnen.
Der Raspberry zeigt nach dem Einschalten kurz seinen Farbverlauf und dann beginnt auch schon der Bootprozess. Ist der dann beendet, so startet das OS am PI erstmal eine Setup-Routine.
Hier sind nun folgende Schritte durchzuführen:
- im Menu internationalisation options unter I1 die entsprechenden locals einstellen -> DE_UTF_8
- in advanced options unter A2… einen Hostname vergeben z.Bsp.:“raspisensor“, in A4… SSH enablen, in A7 …I²C enablen und „load per default“ und in A8 … „serial enable“ und „login shell“ aktivieren
- dann noch expand filesystem wählen damit der Speicherplatz der gesamten SD-Karte genutzt wird
- jetzt noch mit finish -> reboot neu starten
Jetzt fährt der PI wieder hoch und bleibt beim Login-Prompt stehen. Mit login: pi und dem passwort: raspberry loggt man sich nun ein. Mit den folgenden Kommandos werden Updates und benötigte Module installiert:
sudo apt-get update
sudo apt-get install python-smbus (installiert den system management bus)
sudo modprobe i2c_bcm2708 (kernelmodule für I²C von Hand laden)
sudo modprobe i2c_dev
lsmod (geladene Module listen)
sudo i2cdetect -y 1 (I²C ports scannen)
Es empfiehlt sich, die Kernelmodule per Autostart zu laden. Das geht wie folgt:
sudo nano /etc/modules (mit dem Nano-Editor die Datei modules öffnen …)
dann folgende Zeilen hinzufügen:
i2c_bcm2708
i2c_dev
dann mit STRG+X den Editor beenden und bei Speichern JA wählen.
danach mit:
sudo nano /etc/modprobe.d/raspi-blacklist.conf
überprüfen, ob hier bereits ein Eintrag „blacklist i2c-bcm 2708“ existiert.
Falls ja, ist der auszukommentieren oder zu löschen.
jetzt wieder neustarten mit:
sudo shutdown -r now
danach wieder einloggen und mit
lsmod
überprüfen ob die gwünschten Module korrekt geladen sind.
Da wir später die Daten von den Sensoren in eine Datei loggen wollen und diese Datei auf einem USB-Stick gespeichert werden soll, sind folgende Schritte notwendig:
- einen USB-Sick mit FAT32 Filesystem auf einem Windowsrechner formatieren
- auf dem PI das Filesystem FAT32 installieren
- den Stick in den PI stecken und die Mountlist um den Stick erweitern
Zuerst laden und installieren wir das Filesystem:
sudo apt-get -y install ntfs-3g hfsutils hfsprogs exfat-fuse
dann legen wir folgendes Verzeichnis an:
sudo mkdir /media/usbstick (usbstick dient hier als beispielname…)
sudo blkid -o list -w /dev/null
(listet die IDs der Datenträger auf -> unser Stick sollte in der Liste als vfat mit einer ID in dem Format XXXX-XXXX erscheinen)
sudo mount -t vfat -o utf8,uid=pi,gid=pi,noatime /dev/sda /media/usbstick
nun öffnen wir folgende Datei mit dem Editor:
sudo nano -w /etc/fstab
die ID des USB-Sticks von vorher tragen wir nun samt folgender Zeile ein und speichern dann wieder ab:
UUID=XXXX-XXXX /media/usbstick/ vfat utf8,uid=pi,gid=pi,noatime 0
weiter geht’s mit der Einrichtung der GPIOs und den Python libraries:
sudo apt-get install python-dev
sudo apt-get install python-rpi.gpio
Noch ein paar allgemeine Einstellungen:
sudo nano /etc/networks/interfaces (Wir wollen eine fixe IP Adresse vergeben, um später einfach per SSH auf den PI zugreifen zu können)
folgende Zeile ersetzen:
iface eth0 inet dhcp
durch:
iface eth0 inet static
address xxx.xxx.xxx.xxx
netmask yyy.yyy.yyy.yyy
gateway zzz.zzz.zzz.zzz
und wieder speichern:
Das zu Anfang gestartete Setup Script lässt sich immer über folgenden Befehl aufrufen:
sudo raspi-config
Die Systemzeit des Raspi (für meine Anwendung benötige ich auch einen Zeitstempel) lässt sich mit folgendem Befehl stellen:
sudo date „MMTThhmmJJ“
Das war´s für den Anfang. Im zweiten Teil beschreibe ich dann die Sensorhardware und die Python-Scripts, die die Sensoren dann auslesen…
An welche Pins muss ich den Fühler anschließen???
Der Raspi hat an Pin 3 und Pin 4 seiner Pinheaderleiste die I²C Anschlüsse. Hierbei ist an Pin3 SDA und an Pin4 SCL anzuschliessen.
Die Spannungsversorgung für die Sensoren kann über Pins2 und 4 (5V) und Pin6 (GND) angeschlossen werden.