Raspberry Pi zero w als Webcam Server
Der Raspberry Pi zero w eignet sich hervorragend als IoT Device, bestückt mit dem Camera Modul v2, dem DHT22, für Temperatur und Luftfeuchtigkeit und einem Helligkeitssensor BH1750. Die Daten werden dann mittels MQTT Protokoll an die openHAB Smart Home Zentrale geschickt und ausgewertet. Zusätzlich wird das Webcam Bild noch um die Sensoren Werten erweitert und mittels Webservice verfügbar gemacht. Ein weiterer Nebeneffekt wird sein das die Bilder gespeichert werden und dann als TimeLapse dienen können.
Achtung: Projekt OnHold da Raspberry Pi OS Bullseye noch keinen Support für das Camera Modul hat:
Vorrausetzungen
Die folgende Hardware kam bei mir zum Einsatz:
- Raspberry Pi zero w
- Raspberry Pi zero w offizielles Gehäuse
- Raspberry Pi Camera Modul v2
- SDHC-Card (SanDisk micro-SDHC Extreme 32GB A1C10 V30 UHS-I U3)
- Micro USB Ladekabel
- GPIO Hammer Header (ohne Löten!)
- DHT22 Temperatur und Luftfeuchtigkeitssensor
- BH1750 Helligkeitssensor
des Weiteren nutze ich meine openHAB Docker Installation auf einem anderen Raspberry Pi. Ansonsten Bedarf es nur noch einem WLAN Netz in das wir den Raspberry Pi zero w einbinden können.
Stromverbrauch des Raspberry Pi zero w
Wie immer bei solchen Projekten ist es interessant zu wissen wieviel Strom verbraucht wird:
- Netzteil ohne Raspberry Pi: 0,1 Watt
- Raspberry Pi zero w IDLE: 0,7 Watt
- Raspberry Pi zero w unter Volllast (
stress --cpu 1
): 1,3 Watt - Raspberry Pi zero w inkl. aller Sensoren IDLE: 0,7 Watt
- Raspberry Pi zero w inkl. aller Sensoren IDLE - Bluetooth disabled: 0,6 Watt
- Raspberry Pi zero w inkl. aller Sensoren IDLE - Bluetooth disabled & HDMI disabled: 0,4 Watt
- Raspberry Pi zero w beim Auslesen der Sensoren: 1,1 Watt
- Raspberry Pi zero w beim Zugriff auf das Camera Modul: 2,6 Watt
Installation Raspbian
Als erstes nehmen wir die microSD Karte und bespielen diese mit Raspbian Linux. Hierzu könnt ihr einfach nach folgendem Artikel vorgehen:
Nachdem die SD Karte vorbereitet ist und der Pi mit ihr gebootet hat, kann man sich via pi user dem Passwort raspberry
über SSH einloggen.
ssh pi@raspberrypi
Dann könnt ihr einfach das Script nutzen um den Pi zu konfigurieren
cd && wget https://raw.githubusercontent.com/alaub81/rpi_autoconf/main/rpi_autoconf.sh
chmod 700 rpi_autoconf.sh
nano rpi_autoconf.sh
Hier habe ich die folgenden Einstellungen verwendet:
## Pi's setup configuration
# Pi User new Password
PIPASSWORD="YOURPASS1234"
# Root User new Password
ROOTPASSWORD="YOURPASS1234"
# Raspberry Pi's hostname
PIHOSTNAME="YOURRASPI"
# the wifi Country
WIFICOUNTRY="DE"
# your Raspberry Pi's timezone
TIMEZONE="Europe/Berlin"
## True or False
# Disable Swap File (be carefull with that!)
SWAPDISABLE="True"
# Deinstallation of the avahi Daemon
AVAHIUNINSTALL="True"
# Deactivate USB Hub to save power (not working on Pi zero)
USBDISABLE="True"
# Disable Bluetooth to save power
BTDISABLE="True"
# Disable HDMI to save power
HDMIDISABLE="True"
# Disable Soundcard
SOUNDDISABLE="True"
# Minimizie Syslog Messages a little bit
SYSLOGBLOCK="True"
# /tmp as tmpfs mounting
TMPTMPFS="True"
# tmpfs Size (recommended: 16M for pi zero / 128M for Pi 4)
TMPFSSIZE="16M"
## Interface Configuration
## 0 Enable / 1 Disable
# i2c bus
I2CBUS="0"
# spi bus
SPIBUS="1"
# one wire bus
ONEWIRE="1"
# Raspberry Pi's camera module
CAMERA="0"
nach dem konfigurieren das Script einfach starten:
/home/pi/rpi_autoconf.sh
Nach dem reboot könnt ihr euch dann also root via SSH einloggen:
ssh root@yourpisnewhostname
Nachdem wir nun eine via SSH over Wifi verfügbare Installation haben und mittels SSH Client auf dem neuinstallierten Raspberry Pi sind, können wir fortfahren.
Optional: Mail Versand
Da ich gerne sehe, wenn zum Beispiel ein cronjob schief läuft oder damit ich sehe ob mein Systembackup einwandfrei lief, habe ich noch mittels MSMTP den Mailversand konfiguriert. Hier die Anleitung dafür:
Zusammenbau und Anschluss der Sensoren
Für einen ersten Test schließen wir als erstes zusammen, bevor wir es in das Gehäuse packen. Ganz mutige können aber auch gerne schon alles komplett zusammenbauen :-) Hier auf jeden Fall die Anleitungen wie es am Ende auch komplett zusammengebaut sein wird.
GPIO "Hammer" Header
Ich nutze vom Paket den Female Header und mache ihn verkehrt herum an den Pi Zero, damit er auf der Gegengesetzten Seite aus dem Gehäuse schaut. Den Female Header habe ich gewählt, weil man mit diesem das Gehäuse besser abdichten kann.
Ich konnte den Female Header ganz einfach mit ein wenig Kraft auf den Pi zero drücken und musste nicht wie in der Anleitung steht einen Hammer nutzen.
Raspberry Pi Camera Modul v2
Das Raspberry Pi camera Modul wird mittels dem beim Gehäuse beiliegendem Kabel ganz einfach an den Pi angeschlossen. Die Kontaktflächen zeigen immer zur Platine:
Sensoren
Die beiden Sensoren werden nun am GPIO Header angeschlossen. Hierfür habe ich Jumper Kabel benutzt, die Male auf Female sind. Einfach für den DHT22 Sensor 3 Kabel zusammen lassen und dann noch einen 5er Pack für den BH1750 Sensor.
Die Pin Belegung ist dann wie folgt:
Raspberry Pi GPIO Pin | Sensor | Sensor Pin |
---|---|---|
2 | DHT22 | +
|
11 (GPI17) | out
| |
9 | -
| |
1 (3v3 power) | BH1750 | VCC
|
6 (Ground) | GND
| |
5 (GPIO3 / SCL) | SCL
| |
3 (GPIO2 / SDA) | SDA
| |
14 (Ground) (kann auch weg bleiben) | ADDR
|
hier die Pinbelegung des Raspberry Pi zero w
Das Ergebnis sieht dann so aus:
-
BH1750
-
DHT22
-
Pi zero
-
Pi zero
Gehäuse
Nun bauen wir alles in das Gehäuse ein. Dafür werden der Pi und das Kamera Modul ganz einfach in das Gehäuse eingeklickt. Die SD Karte sollte hierbei allerdings schon bespielt sein, da man diese nicht wechseln kann, wenn der Pi zero im Gehäuse steckt. Das ist im Vorangegangen Kapitel bereits beschrieben: Installation Raspbian
Micro USB Stromzufuhr
Zu guter Letzt packen wir alles noch an den Strom. Hierfür wird der MicroUSB Port verwendet, aber Vorsicht. es ist der, der zum Kamera Modul zeigt, also der äußere von beiden.
Installation Camera Modul v2
Solltet ihr das Modul noch nicht aktiviert haben, dann kann dies über den folgenden Befehl geschehen (ein Restart ist nötig):
raspi-config nonint do_camera 0
reboot
Nachdem das Kamera Modul aktiviert ist, installieren wir die benötigte Python Library:
apt install -y python3-picamera
Einen ersten Test kann man mit dem folgenden Befehl ausführen. Das test.jpg
dann einfach via SCP auf euren Rechner ziehen.
libcamera-still -o test.jpg
Raspberry Pi Camera Modul fokussieren
Da das Raspberry Pi camera Modul v2 keinen Autofokus hat, muss man diesen manuell auf die Bedürfnisse einstellen. Dafür ist a) Geduld und b) Fingerspitzengefühl benötigt.
An den beiden roten Markierungen ist die Linse mit etwas Klebstoff fixiert worden. Diesen kann man ganz vorsichtig mit einem scharfen, spitzen Messer wegkratzen. Wenn man dies getan hat, kann man die Linse auch wieder ganz behutsam mit einer Pinzette mit und gegen den Uhrzeigersinn herausdrehen.
- Gegen den Uhrzeigersinn = Nähere Objekte werden scharfgestellt
- Im Uhrzeigersinn = Entfernte Objekte werden fokussiert, bzw. scharfgestellt
Vorsicht ist geboten, nicht zu weit gegen den Uhrzeigersinn drehen, da sonst die Linse komplett ab geht und sehr schwer ist wieder einzubauen. Ebenfalls Achtung das ihr die Linse nicht verkratzt. Man braucht definitiv keinen Kraftaufwand um die Linse zu drehen!
Das Ergebnis schaut ihr euch am besten immer mit dem oben Stehendem raspistill
Befehl an.
Installation der Sensoren
Auch hier, solltet ihr i2c noch nicht aktiviert haben, dann bitte mit dem folgenden Befehl aktivieren:
raspi-config nonint do_i2c 0
Um die beiden Sensoren auslesen zu können benötigen wir zusätzlich ein paar Pakete und Python Libraries:
apt install -y python3 python3-pip python3-paho-mqtt python3-smbus i2c-tools
# i2c-tools python3-rpi.gpio libgpiod2 -y
pip3 install --user adafruit-circuitpython-bh1750 Adafruit_DHT
Nun können wir einen ersten Test wagen. Hierfür einfach die folgenden Scripte downloaden und ausführen:
Für den Lichtsensor:
bh1750-adafruit.py
cd /usr/local/sbin
wget https://raw.githubusercontent.com/alaub81/rpi_sensor_scripts/master/bh1750.py
chmod +x bh1750.py
bh1750.py
Ausgabe sollte so aussehen:
7.50 Lux
Für den Temperatur/Luftfeuchtigkeits Sensor:dht22-adafruit.py
(hier bitte falls ein anderer GPIO Pin als GPIO4 verwendet wird im Script dementsprechend anpassen.)
cd /usr/local/sbin
wget https://raw.githubusercontent.com/alaub81/rpi_sensor_scripts/main/dht22-adafruit.py
chmod +x dht22-adafruit.py
dht22-adafruit.py
Ausgabe sollte so aussehen:
Temperature: 23.4 °C Humidity: 51.3 %
Mehr Informationen zu den beiden Sensoren findet ihr hier:
iot.py
apt install python3-pil
Optional: Tuning
Ich habe mich nun noch ein wenig mit der Optimierung des Systems auseinander gesetzt. Als erstes, da es sich um ein 24/7 System handelt natürlich um den Stromverbrauch. Der Bluetooth Chip kostet tatsächlich fast 0,1 Watt. Ich habe irgendwo den wert 0,088 Watt gelesen, jedoch ist mein Messgerät nicht ganz so genau. HDMI bringt weitere 0,2 Watt. Also falls noch nicht getan, oder mit dem Script den Pi installiert und dort in der Konfiguration bereits die Punkte aktiviert waren, könnt ihr euch die folgende Artikel anschauen:
Zum Schluss kann man noch die Status LED deaktivieren. Da ich den Pi sowieso nicht in Sichtweite habe und man die LED im Gehäuse nicht sieht, deaktiviere ich diese über die config.txt
.
/boot/config.txt
# Disable the ACT LED on the Pi Zero.
dtparam=act_led_trigger=none
dtparam=act_led_activelow=on
USB Power deaktivieren wie bei den anderen Pis ist beim zero leider nicht möglich.
Optional: Backup
Möchte man am ende das System sichern, kann man das folgende verwenden.
openHAB / HABPanel Integration