Less Power, more Fun – das ESP32-trigBoard v8 von Kevin Darrah

Der Pragmatische Architekt Michael Stal  –  7 Kommentare

Bei mobilen eingebetteten Lösungen spielt der Energieverbrauch oft eine entscheidende Rolle. Je höher der Verbrauch, desto schneller muss das Gerät wieder an die "Tankstelle". Der ESP32-Microcontroller ist diesbezüglich nicht gerade als die sparsamste Option bekannt. Kann man trotzdem ein ESP32-Board mit Niedrigenergieverbrauch bauen? Man kann! Das trigBoard v8 lässt grüßen.

Kevin Darrah hat das trigBoard V8 entwickelt, damit ein ESP32 auch Anwendungen unterstützen kann, die niedrigen Stromverbrauch erfordern. Ursprünglich war das trigBoard für solche IoT-Geräte konzipiert, die via WiFi melden, sobald sie über einen angeschlossenen Sensor das Öffnen oder Schließen eines Fensters oder einer Tür feststellen. Das Board hat sich inzwischen als Lösung herauskristallisiert, die sich durchaus auch für Problemstellungen mit anderen Sensoren eignet.

Das trigBoard v8 hatte diverse Vorgänger, die auf dem ESP8266 basierten. Es ist aber mit dem ESP32 nicht nur ein neuer Microcontroller an Bo(a)rd, sondern diverse Verbesserungen gegenüber früheren Versionen.

Als Grundlage verwendet das trigBoard v8 ein ESP32-Modul des Typs ESP32-WROOM-32D mit 16-MByte-Flash. Um den Stromverbrauch zu minimieren, erfolgt die Spannungsversorgung nicht direkt von der Versorgungsspannung zum ESP32, sondern nimmt den Umweg über eine "Wake Circuitry"(Aufweckschaltkreis).


Rückansicht des trigBoard v8.


Die Stromstärke im Standby-Modus beträgt mit einer 3V-Spannungsquelle gerade einmal 1,5 uA. Zum Vergleich: ein handelsüblicher Rauchmelder kommt auf circa 7 uA. Eine exemplarische Modellrechnung beim Einsatz einer LiPo-Batterie mit 3,7 V und 1200 mAh Kapazität fällt folgendermaßen aus: Angenommen, das trigBoard verbraucht pro Stunde etwa fünf Sekunden lang 50 mA und wartet dazwischen im Tiefschlaf auf neue Ereignisse. In diesem Fall kommt die Batterie mehr als 1,5 Jahre ohne Neuaufladung aus.

Abgebildet sind Vorder- und Rückseite des trigBoard. Anschließen lassen sich über JST-Adapter eine Spannungsquelle und ein Sensor.


Wie erreicht das trigBoard dieses Ziel? Grundsätzlich verfügt das Board neben dem ESP32 über sechs Funktionsblöcke:

  • eine Echtzeituhr des Typs RV-8263-C7 mit sehr niedrigem Energiebedarf, die nach einem Timeout prüfen kann, ob der Sensorkontakt geöffnet oder geschlossen wurde. Des Weiteren hilft sie bei der periodischen Überprüfung der Batteriespannung und kann in diesem Zusammenhang auch Meldungen versenden. Sie lässt sich zudem einsetzen, um regelmäßig Sensordaten zu lesen und zu versenden.
  • eine geschaltete Spannungsversorgung, die ausschließlich bei erkannten Ereignissen/Triggern auf 3,3 V schaltet, wodurch der Stromverbrauch gering bleibt.
  • eine ständig aktive 4,2-V-Betriebsspannung, die Sensorschaltkreise und Echtzeituhr versorgt.
  • ein pulsierend betriebener Überwachungsschaltkreis, der die Sensorzustände beobachtet.
  • ein Auto-Reset-Schaltkreis, der das einfache Programmieren des trigBoard über ein USB-Serial-Board ermöglicht – hierfür bietet Kevin Darrah eine eigene, ebenfalls energieeffiziente Lösung.
  • eine Batteriespannungsmessung, die bei der Fabrikation des Boards getestet und mit einem Korrekturoffset versehen wird.
Die sechs Funktionsblöcke des trigBoard v8

Die folgenden Pins sind Teil dieser Funktionalitäten und lassen sich vom Nutzer für eigene Zwecke konfigurieren:

  • IO36-AINPUT-Batterie-Pin: dient zur analogen Messung der Batteriespannung.
  • IO0-OUTPUT-LED-Pin: schaltet die LED bei einem Low-Signal ein. Sollte mit Bedacht genutzt werden, da auch der Auto-Reset-Schaltkreis den Pin verwendet.
  • IO16-OUTPUT-Power-Latch-Pin: Dieser Pin lässt sich auf High schalten, um die Spannungsversorgung des ESP32 aufrechtzuerhalten. Sobald das Board aufwacht, schaltet das System den Pin hoch, um die Versorgung zu gewährleisten, während das Board die Ursache des Erwachens ermittelt. Sobald das trigBoard wieder in den Tiefschlaf fallen soll, lässt sich das Signal am Pin auf Low setzen.
  • IO17-OUTPUT-Kill-Power-Pin beziehungsweise UnLatch-Pin: Der Sensoreingang nutzt zwei Kontakte für Schalter (normal geöffnet, normal geschlossen). Wacht das Board auf, kann die Firmware die Signale an den Kontakten einlesen, um sie dann wieder durch Schreiben eines High-Signals zu deaktivieren.
  • IO18-INPUT-Contact-Opened-Latch-Pin: Ist das Signal Low, hat sich der Schalter am Sensoreingang von geschlossen auf offen geändert.
  • IO19-INPUT-Contact-Closed-Latch-Pin: Ist das Signal Low, hat sich der Schalter am Sensoreingang von offen auf geschlossen geändert.
  • IO23-INPUT-Contact-Status-Pin: Echtzeitstatus des Kontakts (HIGH => geöffnet, LOW => geschlossen).
  • IO27-INPUT-Wake-Button-Pin: LOW => Knopf wurde betätigt.
  • IO21 & IO22: Genutzt von der an I2C-Adresse 0x51 liegenden Echtzeituhr.

Spannungsseitig läuft das Board mit Versorgungsspannungen zwischen 1,8 V und 5 V. Die empfohlene Betriebsspannung beträgt jedoch zwischen 2,5 V und 5 V. Das trigBoard prüft beim Einlegen von Batterien deren Polarität und erleidet in den meisten Fällen keinen Schaden, sollten Batterien falsch herum angeschlossen werden.

Wichtige Pins des trigBoard sind nach außen gelegt. Durch Anlöten von Header-Leisten können Entwickler das Board prototypisch auf einem Breadboard einsetzen oder alternativ Anschlussklemmen installieren. Auf der Webseite für das trigBoard gibt es außerdem STL-Dateien, um per 3D-Drucker ein geeignetes Gehäuse zu erzeugen.

Firmware

Die bereitgestellte Firmware unterstützt mehrere Internetdienste, um Push-Meldungen zu versenden, unter anderem IFTTT, Pushsafer und Pushover. Ebenso sind eigene Lösungen möglich, die auf den Kommunikationsprotokollen TCP, UDP oder MQTT basieren. Meldungen können dabei auch mehrere Wege nehmen, zum Beispiel einen über MQTT, einen anderen über IFTTT. Notiz am Rande: Sogar der "Weck"-Knopf am Board ist optional in der Lage, das Versenden von Push-Meldungen zu initiieren.

Für das Bereitstellen neuer Firmware implementiert das Board OTA-Downloads (Over the Air). Das ist sinnvoll, weil niemand willens wäre, alle vorhandenen Boards mit einem Notebook auf den neuesten Stand zu bringen, obwohl auch das problemlos machbar ist.

Der Weckdienst

Was muss genau passieren, damit das trigBoard aus seinem Dornröschenschlaf erwacht? Entsprechende Trigger lassen sich rein softwareseitig konfigurieren. Ein auslösender Trigger könnte beispielsweise darin bestehen, dass ein Kontakt von offen auf geschlossen wechselt oder dass der Kontakt sich von geschlossen auf offen ändert. Möglich ist auch die Kombination beider Fälle, etwa "Garagentor hat sich geöffnet" und später "Garagentor wurde geschlossen". Das Aufwecken des Boards erfordert einen Abfall oder Anstieg der Spannung am Sensoreingang um 3 V. Der Zielzustand muss mindestens 200 Millisekunden anliegen, um das Board zu wecken. Da sich dieses Verhalten nicht für alle Sensoren realisieren lässt, beispielsweise für CO/Rauchdetektoren oder PIR-Sensoren, können sich Entwickler mit einem MOS-FET-Transistor oder anderen Schaltungen behelfen (sogenannter Hair-Trigger).

Eine möglichst exakte Zeitnehmung erweist sich in vielen Anwendungsfällen als relevant, weshalb das ESP32-Board eine genaue Echtzeituhr (RTC) integriert, die das Aufwecken des Boards aus dem Tiefschlaf erlaubt. Dabei kann das Board zum Beispiel periodisch die Spannungsquelle auf Restkapazität prüfen und gegebenenfalls eine Alarmmeldung versenden, sobald die Spannung unter einen bestimmten Pegel fällt.

Ein Problem durch das Design für niedrigen Energieverbrauch resultiert aus Szenarien wie dem folgenden: Jemand läuft aus dem Haus, öffnet die Tür und schließt sie gleich wieder hinter sich. In diesem Fall könnte es sein, dass das trigBoard zwar das Öffnen der Tür bemerkt, nicht aber das Schließen. Als Ausweg kann ein periodischer Alarm der Echtzeituhr fungieren, der den aktuellen Status der Tür detektiert, also ob sie nach wie vor offen oder geschlossen ist.

Konfiguration

Für die Anpassung des trigBoards an eigene Bedürfnisse kombinieren Nutzer Google Chrome mit einem Konfigurationswerkzeug, um alle Boardparameter und -einstellungen auf einem per Bluetooth angeschlossenen trigBoard durchzuführen. Als Basis fungiert dabei ein Host mit macOS, Linux oder Windows 10. Das Konfigurationsprogramm ist über GitHub beziehbar.

Der hauptsächlich in Processing-Code geschriebene Configurator läuft auf mac OS, Linux oder Windows 10 unter dem Chrome-Browser.


Der Entwickler oder Nutzer kann im Configurator jede Änderung der Konfiguration vornehmen.


Softwareentwicklung für das trigBoard

Die Software für das trigBoard entstand unter der Arduino IDE mit dem entsprechenden Boardsmanager. Es handelt sich um ein ESP32 Dev Module mit folgenden Einstellungen in der IDE:

  • Upload Speed: 921600
  • CPU Frequency: 80 MHz (WiFi/BT)
  • Flash Frequeny: 80 Mhz
  • Flash Mode: QIO
  • Flash Size: 16 MByte (128 Mb)
  • Partition Scheme: Minimal SPIFFS (1,9 MByte App with OTA/190 KB SPIFFS)
  • Core Debug Level: None
  • PS-RAM: Disabled

Benutzt haben Firmware-Entwickler die Arduino IDE Version 1.8.10. Zusätzlich benötigt die Firmware

  • ESP32 Arduino Core v1.0.4
  • die MQTT-Bibliothek PubSubClient v2.7.0
  • die Arduino-Json-Bibliothek v6.13.0
  • die PushSafer-Arduino-Library auf GitHub
Eigene Adaptionen der Firmware sind über die Arduino-IDE möglich.

Testequipment

Um eigene Experimente durchzuführen, habe ich folgende Komponenten eingesetzt:

  • trigBoard v8
  • Batteriehalter für zwei AAA-Batterien zur Stromversorgung des trigBoards (sowohl der Batteriehalter als auch der Kontakt/Magnet sind für den Anschluss an das trigBoard mit JST-Steckverbindern ausgestattet)
  • eine FTDI-Schnittstelle, um das trigBoard über USB mit dem Computer (macOS, Linux, Windows 10) zu verbinden
  • ein USB-A nach Micro-USB-Kabel
  • einen Aleph-PS-1523WG-Kontakt plus Magnet (siehe Bild unten), was erlaubt, das Öffnen oder Schließen von Türen, Fenstern und Ähnlichem zu testen

Der folgende Versuchsaufbau stellt fest, ob eine Tür (oder ein Fenster) geöffnet oder geschlossen wird:

Bei einem eigenen Experiment prüft das trigBoard mittels Magnetkontakten, ob eine Tür geöffnet oder geschlossen wird.

Das trigBoard ist so konfiguriert, dass es Türöffnen oder Türschließen über den Dienst Pushover meldet:

Der Dienst Pushover läuft auf iOS- und Android-Apps. Er empfängt die Meldungen des trigBoard und leitet sie weiter.

Zusammenfassung

Es geht also doch, wenn ein Elektronikexperte Hand anlegt. Das trigBoard v8 verbindet die Vorteile des ESP32 mit denen des Niedrigenergiebetriebs. Sicherlich ist das trigBoard kein Mittel für alle Fälle, sondern speziell darauf getrimmt, Lösungen mit geringem Stromverbrauch zu ermöglichen. Genau das macht es, und zwar nicht nur richtig, sondern richtig gut. Mit umgerechnet 25,29 Euro (US-$ 29,99) gehört das Board mit Sicherheit nicht zu den Schnäppchen (Bezugsquelle: tindie), aber – den entsprechenden Einsatzzweck vorausgesetzt – ist es auf jeden Fall sein Geld wert.

Ich möchte Kevin Darrah an dieser Stelle dafür danken, dass er diesem Blog ein Testexemplar des trigBoards bereitgestellt hat.