Nachdem vor drei Wochen beschlossen wurde, dass die Honey-Pi-Projektgruppe nun Debootstrap statt Buildroot zur Erstellung der Firmware verwendet, steht diese kurz vor der Fertigstellung. In diesem Blogbeitrag werden zunächst die verschiedenen Anforderungen der Firmware skizziert und anschließend die Umsetzung beschrieben. Dabei werden ebenfalls aufgetretene Probleme und deren Bewältigung angesprochen.
Die Firmware soll innerhalb des Projekts folgende Funktionen erfüllen:
- Bereitstellung eines Access-Points
- Bereitstellung eines Webservers, der für das Hosting des Konfigurationswebinterfaces zuständig ist.
- Ausführen von Python-Skripten zur Erfassung der Messdaten
- Senden von Messdaten an Thingspeak mit Hilfe eines Surfsticks
Bereitstellung eines Access-Points
Die Einrichtung des Access-Points ließ mich eine Zeit lang etwas verzweifeln. Nachdem ich sämtliche Packages für den Access-Point integriert hatte, mussten noch die Konfigurationsdateien angepasst werden. Die Anleitung dafür habe ich von der folgenden Seite: https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md
Nach zahlreichen Versuchen und verschiedenen Konfigurationen wollte der Access-Point aber einfach nicht starten. Ein Blick auf die vorhandenen Adapter zur Verbindung mit einem Netzwerk gab aber schließlich Aufschluss über den Sachverhalt.
Innerhalb des Firmware war kein standardmäßiger Treiber für das integrierte WLAN-Modul des Raspberry Pi’s vorhanden. Glücklicherweise hatte ich aber noch einen USB-Wlan-Stick übrig. Obwohl der Stick im Internet angepriesen wurde, weil er unter den meisten Betriebssystemen keinen zusätzlichen Treiber benötigt, musste ich dennoch einen Treiber für den Stick in die Firmware integrieren. Nach der Integration des Treibers wurde ein „wlan0“-Adapter in der Firmware angezeigt und der Access-Point mit der SSID „HoneyPi“ war nun sichtbar.
Bereitstellung eines Webservers
Nachdem der Access-Point gestartet wurde, musste nur noch die Herstellung der Verbindung gewährleistet werden. Dies sollte mit dem Tool „Dnsmasq“ erfolgen, welches für die Verteilung von IP-Adressen zuständig ist. Die Konfiguration von „Dnsmasq“ erwies sich ebenfalls als etwas schwieriger als zunächst angenommen. Nicht alle Anleitungen, die im Netz kursieren, führen zu einen positiven Ergebnis. Die Anleitung auf der Seite „https://www.randombrick.de/raspberry-pi-als-wlan-access-point-nutzen/“ führte letztendlich aber zu dem gewünschten Ergebnis. Von nun war es möglich sich mit dem „HoneyPi“-WLAN zu verbinden und das Webinterface im Browser aufzurufen, indem man „http://192.168.0.1/“ in die Adresszeile eingab.
Ausführen von Python-Skripten zur Erfassung von Messdaten
Um Messdaten zu erfassen, wurden mehrere Python-Skripte geschrieben. Die Basis bildet hierbei das „main.py“-Skript, welches alle anderen Skripte aufruft. Wird versucht, dieses Skript auszuführen, kann das GPIO-Modul allerdings nicht eingebunden werden. Installierte man das GPIO-Modul zunächst in der und kopierte den entsprechende Ordner in das Overlay-Verzeichnis, kam eine Fehlermeldung auf, die besagte, dass das GPIO-Modul in einer 64-bit-Variante installiert ist und deshalb nicht auf einem Raspberry-Pi ausgeführt werden kann (siehe Bild).
Deshalb wurde eine neue Debian-VM auf 32-bit Basis aufgesetzt und das GPIO-Package nachinstalliert. Der entsprechende Ordner wurde anschließend aus der 32-bit-VM in das Overlay-Verzeichnis der Buildroot-VM kopiert. Startete man nun das „main.py“ Skript kam dennoch eine Fehlermeldung auf. Diese besagte, dass der Ordner des GPIO-Packages nicht vorhanden ist. Nach Durchsuchen der Firmware konnte allerdings festgestellt werden, dass der Ordner des GPIO-Packages entgegen der Ausgabe der Fehlermeldung durchaus vorhanden ist (siehe Bild).
Senden von Messdaten an Thingspeak mit Hilfe eines Surfsticks
Das Package „usb-modeswitch“, welches zur Erkennung eines USB-Sticks als Modem verwendet wird, konnte erfolgreich in die Firmware integriert werden. Ein Test bezüglich der Funktionsfähigkeit des Surfsticks erfolgt in der nächsten Woche.
Warum kann das GPIO-Python-Modul nicht mit debootstrap installiert werden? Gibt es kein Debian-Paket dafür? Falls nein, können Sie in der modify-rootfs.sh einen Befehl wie „pip install rpi-gpio“ (oder so ähnlich) einbauen, um das Modul mit Python-Mitteln zu installieren.
Wie vorhin besprochen, wenn es in Raspbian wirklich kein Package für das GPIO-Python-Modul gibt, können Sie das Modul mit dem Befehl „pip install wie-das-ding-auch-immer-heißt“ in der modify-rootfs.sh installieren. Vermutlich beinhaltet das Package aber auch eine C-Library, die während der Installation kompiliert werden muss. Hierfür müssen Sie in der image.config noch das Paket „build-essential“ installieren, das eine C-Compiler und die dazugehörigen Werkzeuge beinhaltet. In der modify-rootfs.sh können Sie das Paket ggf. wieder deinstallieren, z.B. mit „apt purge build-eseential“ und „apt autoremove“.