Beim HoneyPi-Projekt wurde in letzter Zeit einiges getan. Es wurde sich geeinigt welche Hardware-Bauteile, vor allem welche genauen Sensoren, verwendet werden. Hierbei wurde auch berücksichtigt, dass genügend freie GPIO-Pins für alle Sensoren vorhanden sind, ohne eine Pinerweiterung anzuschließen.

Softwareseitig gab es auch einige Fortschritte, insbesondere bei der Android-App. Aber auch die Firmware ist in Bearbeitung.

In diesem Blog-Beitrag werden der aktuelle Stand bezüglich der Hard- und Software des HoneyPi-Projekts vorgestellt.


Hardware

Für die smarte Bienenstockwaage, HoneyPi, wurden nun alle Bauteile und Sensoren eingekauft. Nachfolgend unsere Einkaufsliste:

  • Raspberry Pi 3 Model B
  • microSD-Karte
  • Netzteil für den Raspberry Pi
  • Autobatterie für die Stromversorgung
  • Adapter, der Autobatterie und Netzteil verbindet
  • Surf-Stick für mobiles Internet
  • DS18S20 1-Wire-Temperatursensor (für die Brutraumtemperatur)
  • BME680-Sensor zum Messen von Temperatur, Luftfeuchtigkeit, Luftdruck und Luftqualität außerhalb der Bienenstöcke
  • Wägezellen mit je 50 kg Maximallast
  • HX711 A/D-Wandler für die Waage
  • Taster zum Aktivieren des Wartungsmodus
  • diverse Widerstände
  • diverse Jumper-Kabel
  • großes Brett zum Anbringen der Waage

Bevor alle Bauteile und Sensoren zusammengebaut wurden, haben wir uns überlegt, welche genauen GPIO-Pins des Raspberry Pi wir für welchen Sensor benötigen. Folgende Pinbelegung kam dabei heraus:

  • DS18S20 (Temperatur):
    • Pin 17: 3,3 V
    • Pin 14: Ground
    • Pin 07: GPIO 4
  • BME680 (Temperatur, Luftfeuchtigkeit, Luftdruck und Luftqualität):
    • Pin 04: 5 V
    • Pin 09: Ground
    • Pin 05: SCL
    • Pin 03: SDA
  •  HX711 (A/D-Wadler für die Waage):
    • Pin 02: 5V
    • Pin 06: Ground
    • Pin 29: GPIO 5
    • Pin 31: GPIO 6
  •  Taster für den Wartungsmodus:
    • Pin 01: 3,3 V
    • Pin 11: GPIO 17

Der Schaltplan für die Wägezellen sieht folgendermaßen aus:

Auf nachfolgender Abbildung sind die montierten Wägezellen dargestellt:

Der A/D-Wandler HX711 für die Waage wurde auch auf der einen Seite mit den Wägezellen und auf der anderen Seite mit dem Raspberry Pi verbunden wie nachfolgendes Bild zeigt:

Der 1-Wire-Temperatursensor DS18S20 wurde ebenfalls mit dem Raspberry Pi verbunden (siehe nachfolgende Abbildung):

Auch der BME680-Sensor wurde am Raspberry Pi angebracht:

Und zuletzt wurde noch der Taster verlötet und am Raspberry Pi angebracht wie auf nachfolgender Abbildung zu sehen ist:


Android-Applikation

Nicht nur bei der Hardware, sondern auch bei der Entwicklung Android-App, gibt es Neuigkeiten. Für die App wurde eine Loginseite programmiert, die beim erstmaligen Öffnen der Anwendung angezeigt wird (siehe nachfolgende Abbildung). Hier wird der Benutzer aufgefordert seinen User-API-Key von ThingSpeak einzugeben. Dieser wird daraufhin überprüft und falls er korrekt ist, in den SharedPreferences von Android gespeichert. Dadurch weiß die App, ob bereits ein User-API-Key eingegeben wurde oder nicht und zeigt entsprechend eine Loginseite an oder nicht.

Nachdem der Benutzer sich angemeldet hat, werden die Elemente im Navigation Drawer (linkes Sidemenü) dynamisch erstellt. Dort werden alle ThingSpeak-Fields aller Channels des Benutzers per REST-API abgerufen und aufgelistet.

Da jedes Field einen frei wählbaren Namen besitzt, wird in der App überprüft, ob im Namen die Wörter „Temperatur“, „Luftfeuchtigkeit“, „Luftdruck“, „Luftqualität“ oder „Gewicht“ enthalten sind. Falls ja, wird ein entsprechendes Icon links neben dem Namen des Navigation-Drawer-Elements angezeigt. Außerdem wird bei einer solchen korrekten Bezeichnung des Fields gewährleistet, dass beim Öffnen der entsprechenden Detailseite die Werte messwertspezifisch dargestellt werden. So kann z. B. die Detailseite auf Temperaturwerte spezialisiert werden.

Falls das Field keines der oben genannten Wörter beinhaltet, wird kein Icon angezeigt, sondern nur der Field-Name. Da nicht bekannt ist welche Art von Messdaten solche Fields besitzen, kann auch keine spezialisierte Detailseite angezeigt werden, sondern nur eine Default-Detailseite.

Nachfolgende Abbildung zeigt, dass der Benutzer die Fields „Temperatur“, „Luftfeuchtigkeit“ und „Field Label 1“ besitzt. Temperatur und Luftfeuchtigkeit wurden mit den richtigen Icons ergänzt und verlinken auf die jeweilige spezialisierte Detailseite. Das Field „Field Label 1“ konnte konnte zu keiner spezialisierten Detailseite zugeordnet werden und erhielt dadurch kein Icon.

Später soll es dem Benutzer möglich sein, seine Fields oder auch gesamte Channels über die Einstellungsseite der App ein- oder auszuschalten. Ebenso soll er die Messwertart für jedes Field ändern können.

Beim ersten Blogpost waren noch Dummy-Daten in der App zu sehen. Nun wurden reale Daten aus einem ThingSpeak-Konto per REST-API abgerufen. Auch werden jetzt im Liniendiagramm zwei Graphen angezeigt, um die Werte von heute und gestern besser zu vergleichen. Ebenfalls ist eine Aktualisierungsfunktion in Form einer Wischgeste nach unten oder über die Aktualisierungsschaltfläche im Menü oben rechts möglich. In beiden Fällen erscheint während dem Aktualisieren ein runder Ladebalken. Diese Änderungen sind auf nachfolgender Abbildung dargestellt:

Für eine bessere Darstellung der Änderungen in der Android-App wurde folgende Bildschirmaufnahme erstellt:


Firmware

Die Firmware ist ebenfalls in Bearbeitung. Hier wurde eine Liste der benötigten Komponenten angefertigt. Zur Erstellung der Firmware wird Buildroot verwendet. Nachfolgende Tabelle zeigt die für unser Projekt benötigten Packages der Firmware:

Package Zweck
Linux Kernel Grundgerüst der Firmware
BusyBox Shell, Init-System und einfacher Webserver
hostapd Wifi Access Point Deamon
dhcpd, dhclient DHCP-Server und Client
phyton3 Interpreter für Python-Programme
php Zur Verwendung von PHP-Programmen
openssh Zum Aufbauen von SSH-Verbindungen
sudo Befehle mit Super-User-Rechten ausführen
git Quellcode von GitHub herunterladen
wchar Um nano verwenden zu können
nano Editor zum Bearbeiten von Dateien
wiringpi GPIO-Bibliothek, die insbesondere für die I2C-Pins benötigt wird
HoneyPi (4) Fortschritt der Hardware, App und Firmware