Raspberry Pi zero w als Webcam Server

Aus Laub-Home Wiki

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:

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:

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


Quellen