Der ESP8266 verfügt je nach Bestückung des verwendeten ESP-Moduls über ein Flash Speicher, der von 512 Byte bis zu 16KByte reichen kann.
Beim ESP wird hiervon fester Bereich von 4096 Byte für eine „qasi“ EEProm reserviert, welches vom Programm gelesen und auch beschrieben werden kann. Diese Daten bleiben wie das Programm nach einem Neustart erhalten.
Die Größe dieses für den EEProm reservierten Bereichs ist in der spi_flash.h unter SPI_FLASH_SEC_SIZE (4096) definiert.
EEproms eignet sich perfekt zum speichern non Daten bzw. von Daten Strukturen, die nach einem Neustart des ESP wieder zur Verfügung stehen sollen.
Da es sich hierbei aber immer noch um eine Flash Ram handelt und diese vom Hersteller mit einer maximalen beschreibbarkeit von ca. 10.000 mal angegeben werden, sollten hier nur Daten gespeichert werden, die keiner häufigen oder gar zyklischen Änderung unterliegen.
Deshaln eignet sich dieser Speicher auch nicht für Messdaten, für Konfigurationsdaten, die sich aber nur selten ändern, ist er perfekt.
Verwendung
Die definition erfolgt als Arduino-typischer Klassenkonstruktor mit der Klasse EEPROMClass, diese stellt eine Reihe vordefinierter Funktionen bereit, die für das Handling mit dem EEProm notwendig sind.
Mit „void EEPROMClass::begin(size_t size)“ wird das Objekt zunächst initialisiert.
Dabei wird ein interner Puffer mit Namen _datain der angegeben Größe angelegt.
In diesen Bereich, der nun als EEPROM deklarierte ist, wird nun der Puffer eingelesen.
Alle nachfolgende Lese- bzw. Schreib Operationen in disem Zwischenpuffer.
Dieser Zwischenpuffer wird erst dann in den Flash Speicher übertragen, wenn man dies mit der Methode EEPROM.commit();anfordert oder das Programm die Operation mit einem EEPROM.end(); abschließt.
Die internen Variablen _dirty vermerkt, ob eine Änderung des Dateninhalts stattgefunden hat. Ein Zurückschreiben des Pufferinhalts erfolg deshalb nur dann, wenn auch eine Änderung stattgefunden hat.
Die Methode getDataPtr() liefert den Zeiger auf den internen Pufferspeicher. Bei einem Aufruf dieser Methode wird _dirty gesetzt, da der Pufferinhalt über diesen Zeiger abgeändert werden könnte.
Der Kalssenaufruf EEPROMClassbenötigt beim Konstruktor die Angabe der Speicheradresse (Sektornummer) in EEPROM.cpp, _SPIFFS_endergibt sich aus der in der IDE festgelegten SPIFFS-Konfiguration.
Die vordefinierte Instanz der Klasse EEPROM wir folgt angelegt:
Um z.B. Konfigurationsdaten in Verbindung mit dem EEPROM zu lesen und zu speichern, bietet es sich an die Daten in einer Structur zu verwalten.
typedef struct {
int PHysteresisH1 = 10; // Fall Back Hysteresis für Relais
int PThresholdH1 = 100; // Schwellwert für Relais
int PHysteresisL1 = 10; // Fall Back Hysteresis für Relais
int PThresholdL1 = 50; // Schwellwert für Relais
int PRelaisStateL1 = 0; // 0- NO / 1- NC
int PRelaisStateH1 = 0; // 0- NO / 1- NC
int PRelaisStateErr = 1; // 0- NO / 1- NC
int PSerialOutState = 0; // 0- OFF / 1- ON
int PWifiState = 0; // 0- OFF / 1- ON
int PMode = 0; // 0= relative / 1= Absolut Druck
int PACMode = 0; // 0= keine Autocalibration / 1= Autokalibration
int PDeltaAC = 10; // Maximale Abeichung Druckdifferenz
int PCalibrationTime = 5000; // Calibration Counter Time in ms
unsigned long PHoldTime = 500; // Für Abfallverzögerung in ms
} PSettings;
PSettings psettings;
Um Speicherplatz zu sparen, sollte der Pufferspeicher nicht größer als notwendig initialisiert werden. Die Maximale Größe beträgt 4096.
Lesen von Daten aus dem Pufferspeicher
EEPROM.begin(1024); // Puffergröße die verwendet werden soll
EEPROM.get(512, psettings); // Anfangsadresse bei der die definierte Structur abgelegt ist
EEPROM.end(); // schließen der EEPROM Operation
Schreiben von Daten in den Pufferspeicher und anschließende Übernahme in den Flash mit commit()
EEPROM.begin(1024);
EEPROM.put(0, settings); //Schreiben einer zweiten Structur ab Adresse 0
EEPROM.commit();
EEPROM.end();
Beim der Einbinden von ISR Routienen in den Quellcode des ESP kann es zu einer Fehlermeldung des Compilers kommen.
need to add the ICACHE_RAM_ATTR macro to interrup service routines (ISRs)
Das ICACHE_RAM_ATTR und ICACHE_FLASH_ATTR sind Linkerattribute. Bevor Sie Ihren Programmcode kompilieren, können Sie festlegen, ob die Funktion im RAM oder FLASH gespeichert werden soll (normalerweise legen Sie nichts fest: kein Cache).
Der ESP8266 ist Multitasking und der ESP32 verfügt über 2 Kerne. So können Sie Ihren Code als Multithreading ausführen, da er das RTOS verwendet.
Und jetzt das Problem: Der gesamte Flash wird für das Programm und die Speicherung verwendet. Das Lesen und Schreiben in den Flash kann aber nur über einen Thread erfolgen. Wenn Sie versuchen über 2 verschiedene Threads gleichzeitig auf den Flash zuzugreifen, kann es bei einem Konflikt zu abstürzen Ihres ESP kommen.
Sie können Ihre Funktion anstelle des Flashs, aber auch im RAM ablegen. Selbst wenn Sie etwas in das EEPROM oder den Flash schreiben, kann diese Funktion aufgerufen werden, ohne auf den Flash zuzugreifen.
Mit ICACHE_RAM_ATTR stellen Sie die Funktion in den RAM.
und
mit ICACHE_FLASH_ATTR stellen Sie die Funktion in den FLASH, z.B. um RAM zu sparen.
Interrupt-Funktionen sollten deshalb immer mit dem ICACHE_RAM_ATTR Linkerattribute versehen werden.
Funktionen, die häufig aufgerufen werden, sollten kein Cache-Attribut verwenden.
Wichtig:
Greifen Sie NIEMALS innerhalb eines Interrupts auf Ihren Flash Speicher zu!
Da der Interrupt jeder Zeit während eines Flash-Zugriffs auftreten kann.
Wenn Sie also gleichzeitig versuchen, auf den Flash zuzugreifen, kommt es zu einem Absturz und das kann manchmal auch erst nach einer lägerer Betriebszeit geschehen.
Da Sie nur 32 KB IRAM (Instruction RAM) haben, sollten Sie versuchen, nur Interrupt-Funktionen in den RAM zu stellen.
Nicht alle Ihre Funktionen, auch wenn dies mit Linkerattributen möglich ist.
Weiter Eingangsspannungsbereich von 8 – 27V, 12V Batteriebetrieb möglich
Konfiguration aller Modulparameter direkt am Timekeeper möglich.
Großes 1024 Pixel LED DOT-Matrix Display für die Anzeige der gemessenen Zeiten
Konfiguration über Taster am Modul oder die Blynk APP
Konfigurierbare Ruhelagen NO (normally open), NC (normally closed) der angeschlossenen Sensoren
Zeitanzeige am Display, über die Blynk App oder das Web-Interface
Für viele verschieden Messverfahren einsetzbar (Lichtschranken, Druckschlauchmessung oder Potentialfreie Eingangskontakte
Viele verschieden Messmodis auswählbar (Einzelzeiten, Rundenzeiten, Zwischenzeit, EinzelInitiator Messung uvm.)
Unterdrückung von mehrfach Auslösungen beim Überfahren bei Schlauchmessverfahren.
OTA Firmware Update
Time Display Funktion für Alge Comet Zeitmessmodule (ab Version VX.04)
Einstellung der Display Helligkeit für Energieeinsparung z.B. bei Battereibetrieb (ab Version VX.05)
Zeitdifferenz korrekt (ab Hardware Version 2, Software Version 1.27)
Allgemeines
Die hier beschriebene Zeitmessung „Timekeeper“ entstand auf Anfrage für eine Zeitmessung zu Trainingszwecke für eine Gleichmäßigkeitsprüfung, wie sie bei Oldtimer Rennen zur Wertung durchgeführt wird.
Aufgabenstellung:
Beim Durch- bzw. Überfahren eines Startinitiators sollte eine neue Zeitmessung begonnen werden, diese sollte mit dem Durch- bzw. Überfahren des Zielinitiators enden. Die Zeitnahme sollte in drei verschiedenen Modi erfolgen können, eine reine Zielzeiterfassung, eine Ziel- und Zwischenzeiterfassung (was einen weiteren Zeitmesseingange für die Zwischenzeit notwendig machte) und die Erfassung von zwei Rundenzeiten (LAP1 und LAP 2).
Die gemessenen Zeiten sollten durch eine große Anzeige, die gut aus dem Fahrzeug, nach Beendigung der Zeitnahme abzulesen wäre. Des Weiteren sollte die Möglichkeit bestehen, die gemessenen Zeiten zusätzlich in einer APP auf dem Smartphon angezeigt zu bekommen.
Eine Webserver Ansicht, die alternativ zur APP Ansicht benutzt werden könnte, wurde ebenfalls angestrebt.
Die Anforderungen wurden in diesem Projekt kurzbeschrieben wie folgt realisiert: Die gesamte Zeitmessung erhielt ein robustes Aluminium Gehäuse mit einer verspiegelten Plexiglasscheibe, hinter der eine gut lesbare LED DOT Matrix Anzeige angebracht wurde. Die Auflösung des Displays beträgt 1024 Led Bildpunkte.
Um die drei Initiatoren direkt per M12 Steckverbinder anzuschließen, wurden auf der Rückseite des Gehäuses drei Buchsen angebracht, die einen direkten Anschluss von Industrie Laserlichtschranken (z.B. der Firma Leutze) ermöglichen. Aus diesem Grund wird das Modul mit einem =24V/2A Stecker Netzteil versorgt, dass sogleich die Versorgungsspannung für die angeschlossenen Initiatoren wie auch der internen Elektronik bereitstellt.
Die Zeiterfassung erfolgt Mikrocontroller gestützt, mit einem ESP8266. Dieser Baustein bietet alle Voraussetzungen, die für die Realisierung des Projektes und eine Anbindung über ein WIFI Netzwerk notwendig sind. Die dabei erzielte Messgenauigkeit beträgt +/-1 ms.
Eine Externe Antenne sorgt für eine optimale Reichweite des Moduls.
Um die ermittelten Zeiten direkt auf einem Smartphone anzuzeigen, wurde eine Anbindung an die BLYNK APP realisiert. Da diese APP ist sowohl für Android als auch für IOS erhältlich ist. Sie überzeugte durch ihr offenes und flexibles Konzept und ist zudem eine sehr kostengünstige Lösung für den Endkunden.
Durch den Kauf von zusätzlicher Energie, kann die App leicht und flexibel um weitere Anzeigen und Funktionen erweitert werden.
Ist keine Internetverbindung möglich oder vorhanden, arbeitet das Timekeeper Modul somit nach der Initialisierung im Standalone Modus, die ermittelten Zeiten werden auf dem Display angezeigt.
Zusätzlich können die gemessenen Zeitinformation in diesem Betreibsmodus aber auch über ein integriertes Webinterface abgerufen und angezeigt werden. Hierfür wird ein interner Access Point geöffnet, mit dem man sein Smartphon verbinden kann, um auf die ermittelten Zeiten zuzugreifen.
Ist eine Anbindung an ein lokales WLAN und somit eine Internet Verbindung vorhanden, bietet das Modul weitere Optionen für die Bedienung und die Zeitanzeige.
Es ist dann z.B. möglich die neusten Firmware Updates vom Webserver des Herstellers direkt in das Modul zu laden und zu installieren.
Ein integrierter NTP-Zeitservice stellt dann die aktuelle Uhrzeit und das Datum zur Verfügung. Wird mit dem Modul länger als 90 Sekunden keine neue Zeitmessung mehr durchgeführt wird diese dann automatisch auf dem Display angezeigt.
Die Auswahl verschiedener Funktionen erfolgt über dem MODE-Taster auf der Rückseite des Moduls. Damit kann ein Menü aufgerufen werden, um die Funktionsweis des Moduls zu konfigurieren.
Die M12 Buchsenanschlüsse sind kompatible mit der von uns empfohlenen Leuze Laserlichtschranken von Typ PRKL 25 4.1 200-S12 und können somit direkt angeschlossen und betrieben werden.
Steckerbelegung Lichtschranken:
Draufsicht M12 Buchse:
Blynk Applikation:
Webansicht:
Kundenreferenzen des Auftraggebers:
Folgende Links wurden uns vom Kunden, der die Entwicklung des Timekeeprer bei uns beauftragt hat zur Verfügung gestellt.
09.10.2023 HW Versionen 2, Firmware Version 1.29 Korrekturwertfaktor für Abweichung der Millis() bei der Zeitnahme eingebaut. Integration des Korrekturwertfaktors der Millis() in das Webinterface HTML Code überarbeitet und Fehlerbeseitigung beim Time Div Überarbeitung Lokaler AP Fehlerbeseitigung
07.08.2023 HW Versionen 2, Firmware Version 1.28 Ab dieser Version wird der Hostname des Timkeepers dem Router mitgeteilt, so das dieser dort im Klartext zu sehen ist!
27.06.2022 HW Versionen 2, Firmware Version 1.27 Alle Einstellungen, die ursprünglich über die BLYNK App vorgenommen werden konnten, wurden in dieser Version nun in die Weboberfläche integriert. Da der Anbieter der BLYNK App die Unterstützung seines Dienstes bis Ende 2022 abgekündigt hat! Desweiteren wurden die Settings um ein Eingabefeld zur Zeitdifferenz korrekt erweitert, diese erlaubt einen Abgleich mit anderen Messsystemen.
Ältere Versionen: Aufgrund einer Server Umstellung unseres Providers, können OTA-Updates nun nur noch ab Version 1.x6 durchgeführt werden! Für eine Firmware Update Ihrer älteren Timekepper Version, muss Ihr Gerät zu uns eingeschkickt werden! Wünschen Sie ein Update, fordern Sie bitte ein Angebot bei uns an.
18.04.2021: Alle HW Versionen, Firmware Version 03
Einstellen der Display Helligkeit.
– Überarbeitung der Interrupt Routiene bei der Zeiterfassung für eine höhere Genauigkeit. – Neuen Menüpunkt zum abschalten der WIFI Verbindung (Zeiteinsparung beim Starten, wenn kein WIFI verfügbar). – Anzeige Fortschrittsanzeige während deines Firmwareupdates. – Verbesserung der Systemsabilität. – Geänderte Hardware bei den DOT Matrix Displays von Maxim, unterscheidung über die Hardware Version des Timekeeper Moduls bei OTA-Update
15.12.2020: Version 1.02 – Neue „Hold Ini“ Zeitnahmefunktion. Misst die Zeitdauer, die der Initiator aktiv war. – Eine Änderung der Zeitnahmemethode direkt am Timekeeper wird nun auch rückwärts in der Blynk App Blynk App aktualisiert. – Wenn kein NTP Zeitserver Server erreichbar ist, wird die Uhrzeit / Datum Anzeige am Timekeeper Modul abschalten. – Erweiterte Webdarstellung, Listenansicht mit bis zu zwanzig Einträge und einem CSV Export Funktion.
08.05.2019: Version 1.01 „Single Ini“ Zeitnahmefunktion mit nur einem Initiator, Trenddarstellung der Zeitdifferenz und Umgestaltung der Bedienelemente. Erweiterung der Blynk App um ein Eingabefeld für die Entfernung zwischen dem Start- und Ziel Initiator sowie die Integration einer Anzeige der daraus berechneten Geschwindigkeit.
20.04.2019: Version 1.00 Timekeeper finale Version 1.00, Firmware released.
In diesem Projekt entsteht eine Batterie betriebener WLAN Dash Button in robuster Ausführung.
Die Elektronik soll in einem Gehäuse aus Metall untergebracht werden und eine Schutzart von IP64 erfüllen (Schutz gegen Spritzwasser und Staub).
Ein Dash Button ist eine kleine Mikrocontroller gestützte Schaltung, die bei Anforderung mit einem lokalen WLAN Netzwerk eine Verbindung herstellen kann, um so Daten an einen beliebigen Server zu senden.
Um einen Dash Button in ein bestehendes WLAN Netzwerk zu integrieren, startet der Dash Button im AP-Modus, nach dem Verbinden z.B. mit einem Smartphone oder Laptop, wird automatisch ein Captive Portal auf dem Endgerät geöffnet.
Hier können anschließend folgende Credentials definiert werden:
SSID des lokalen WLAN Netzwerks
Passwort des lokalen WLAN Netzwerks
Hostname des Ziel-Servers
URL
Dash Token, ein ein-eindeutiger Schlüssel für die Aktion die der Dash Button auslösen soll
Aufbau der Hardware
Der Dash Button soll unabhängig von einer externen Energieversorgung arbeiten können. Das bedeutet, dass die Energieversorgung mit Batterien realisiert wird, die im Gehäuse untergebracht werden.
Deep Sleep Modus
Softwaretechnisch wird hierfür die sogenannte Deepsleep Funktion des Mikrocontrollers verwendet. In diesem Modus hat die Schaltung eine Stromaufnahme <70uA, was eine lange Lebensdauer der Batterien im Standby garantiert.
Nach Herstellerangaben, liegt der Deepsleep Ruhestrom bei ca. 10uA. Gemessen wurde beim Dashbutton jedoch eine Ruhestromaufnahme von ca. 60 uA. Dies muss jedoch noch genauer untersucht werden, da hier eine Messfehlertoleranz des Multimeters anzunehmen ist.
Parameter
Typische Stromaufnahme
Einheit
Tx 802.11b, CCK 11Mbps, Pout=+17dBm
170
mA
Tx 802.11g, OFDM 54Mbps,, Pout=+15dBm
140
mA
Tx 802.11n, MCS7, Pout=+13dBm
120
mA
Rx 802.11b 1024 byte packet lenght, -80dBm
50
mA
Rx 802.11g 1024 byte packet lenght, -70dBm
56
mA
Rx 802.11n 1024 byte packet lenght, -65dBm
56
mA
Modem-Sleep
15
mA
Light-Sleep
0,5
mA
Power save mode DTIM 1
1,2
mA
Power save mode DTIM 3
0,9
mA
Deep-Sleep
10
uA
Power OFF
0.5
uA
Eine Standard ESP-07 enthält einen Flash RAM von 1M, für die Programmierung wird ein SPIFFS von 64 K voreingestellt.
Direkt auf dem Modul befinden sich zwei LED’s , die rote LED ist direkt mit der Versorgungsspannung verbunden. Diese LED verursacht auch im Deepsleep Modus einen schadhaften Ruhestrom von ca. 15 mA und muss deshalb entfernt werden.
Die blaue LED ist mit TxD verbunden und zeigt die Aktivität an diesem Pin an.
Änderung des Energieversorgungsskonzeptes
Bei den Tests mit verschiedenen Primärquellen hat sich gezeigt, das mit dem ersten Layoutentwurf immer nur ein relativ kleiner Teil der zu Verfügungstehenden Kapazitäten entnommen werden kann. Deshalb wird nun in einer überarabeitenen Hardware Revision ein StepUp Booster vom Typ NCP1402SN33T1eingesetzt.
Dieser Baustein hat eine sehr niedrige Anlaufspannung von ca. 0.8V. Werden zwei AA-Battereien in Reihe betrieben, kann jede Zelle bis zu einer Spannung von 0.4V entladen werden, was knapp 90% der Gesamtkapazität der Zellen entspricht.
Der Baustein hat einen sehr niedrige Standby Stromaufnahme von nur 10uA und er stellt am Ausgang einen konstante Spannung von 3.3V zur Verfügung.
Das Schaltungsdesigne wird auch dahingehend geändert, dass auf den Standbystrom des NCP1402SN33T1und den Deep Sleep Modus des ESP6288 verzichtet werden kann, da die Summe der beiden Ruhestromaufnahmen dann doch einen beträchtlichen Anteil von ca. 70 uA aus mahen würden.
Zu Einsatz kommt ein Mos Fet Transistor, der gleich zwei Aufgaben erfüllt. Zum einen dient er dem Verpolungsschutz, wenn die Batteriene versehentlich falsch eingelegt wurden und schützt so die Schaltkreise vor der Zerstörung.
Und zum anderen, wird er als Schalter für die Sapannungsversorgung verwendet.
Mit dem Betätigen des Tasters wird der Mos Fet leitend und stellt die Versorgungsspannung des Schaltkreises zur Verfügung. Ms nach dem starten des ESP 8266 steuert dieser dann übereinen Ausgang den Mos Fet an und verhindert so das sie Versorungsspannung nach dem loslassen des Taster wieder abgeschaltet wird.
Sobald alle nötigen Programmaktionen abgearbeitet wurden, gibt der ESP 8266 den Schaltausgang des Mos Fet’s wieder frei und die Spannungsversorgung wird abgeschaltet.
Batterie Kapazität
Die Richtwerte für Alkalien Batterien schwanken lt. Herstellerangaben in folgenden Bereichen:
AAA 1000 - 1500 mAh
AA 2000 - 3000 mAh
D 12000 - 20000 mAh
Eine Duracell Plus soll lt. Herstellers Angaben bis zu 2.9 Ah haben, was einer Laufzeit im Deepsleep Modus von mehreren Jahren entspräche.
Für Batterietests bietet das Layout unter anderem auch die Möglichkeit den Dash Button mit einer Knopfzelle zu betreiben.
Es hat sich jedoch gezeigt, dass eine Standard LR2032 nicht in Frage kommt, da bei diesem Typ bei einer Pulsbelastung die Spannung kurzfristig auf 2,8V einbricht. Was deutlich außerhalb der Spezifizierten Parameter des ESP8266 liegen würde.
Deshalb wurde für den Test eine Lithium Ionen Zelle z.B. Typ LIR 2032 (35mAh) verwendet. Da diese Typen auch bei einer Pulsbelastung in der für den ESP8266 definierten Spezifikation bleibt.
Der Nachteil dieser kleinen Bauform liegt jedoch in der kurzen Standbyzeit, die bei rund 60 uA Ruhestromaufnahme gerade mal für ca. 25 Tage reicht.
Bei der Verwendung von zwei in Reihe geschalteten AA-Zink Kohle Batterien ist der Arbeitsspannungsbereich für den Betrieb eines ESP8266 sehr eingeschränkt. Bei neuen Batterien liegt die Spannung bei ca. 3,2 V. Nach einer Entladung von ca. 5% liegt die Spannung nur noch bei 3,0V. Somit erscheint der Einsatz solcher Batterietypen als wenig sinnvoll.
Eine weitere denkbare Option wäre der Verwendung von drei in Reihe geschalteten AA-Zellen, um das Spannungsniveau in einen besseren Auslastungsbereich zu bekommen. Hier bei müsste dann jedoch wieder ein Spannungsregler eingesetzt werden, der zusätzliche Verluste mit sich bringt, was die Lebensdauer aber bei der verhältnismäßig geringen Einschaltzeit kaum einschränken dürfte.
So wird nun im dritten Anlauf für dieses Projekt angenommen, dass entweder zwei paralell geschaltete LiFEPO4 AA Akkus zum Einsatz kommen oder drei AA-Zellen die in Reihe geschaltet werden. Oder die Dritte Option ein LIPO Akku mit einer Ausgangsspannung von 3.7V.
Die Platine erhält einen 3,3 V low drop Spannungsregler der Firma Mikrochip, vom Typ MIC5219-3.3BM5 LG33 3.3V –40°C to +125°C SOT-23-5.
Dieser Baustein besitzt einen Enable Eingang, der es erlaubt die komplette Schaltung abzuschalten ohne das ein merklicher Ruhestrom fließt.
Durch den Einsatz dieses Reglers kann ein ein Eingangsspannungsbereiche zwischen 3 – 5v abgedeckt werden. Darurch sind alle drei Varianten der oben beschriebenen Spannungsversorgungen möglich.
LiFEPO4 AA Akkus liefern eine Spannung von 3,4 V / 700 mA, was einer Batteriekapazität von 100% entspräche.
Durch eine Parallelschaltung von zwei LiFePO4 Akkus kann somit die Kapazität auf 1400 mAh erhöht werden.
Hierbei läge die Ausnützung der Batteriekapazität bei etwa 60% (800 mAh), im Vergleich zu drei Zink-Kohle Batteriene. Deren Entladeschlussspannung bei 1v liegt, was bei drei in reihe geschaltenenen Zellen ca. 3V entspricht = minimale Eingangsspannung der EPS lt. Spec.
Es ergäbe sich rein rechnerisch eine Standbybetriebszeit von ca. 1,5 Jahren.
Ein großer Vorteil bei der Verwendung von LiFePO4 Zellen liegt darin, dass die Zellen wiederaufladbar sind und somit viele Male wieder verwendet werden können.
Ein gravierender Nachteil der Parallelschaltung von zwei Zellen liegt jedoch in einer Verpolung.
Wenn die Zellen von nicht fachkundigem Personal gewechselt werden sollen, kann es durch die Parallelschaltung der beiden Zellen bei einem falschen Einlegen zu einem Kurzschluss kommen, der dann zur thermischen Zerstörung der Akkus und letztendlich des Dashbuttons führen würde.
Um eine lange Lebensdauer von Akkus zu gewährleisten, sind diese unbedingt vor einer Tiefentladung zu schützen. Deshalb ist in der Firmware des DashButtons ein Schwellwert von 2,9 V programmiert, ab dem sich der Dash Button nicht mehr starten lässt. Die LED geht kurz an, blinkt für 1 Sekunde sehr schnell und geht dann sofort wieder aus!
Laut Herstellerangaben darf sich die Betriebsspannung eines ESP 8266 in einem Bereich von 3,0V – 3,6V bewegen (Typisch 3,3V).
Somit entspräche eine Batteriespannung von 3,0V gleich 0% Batteriekapazität, was einen sofortigen Batteriewechsel nötig machen würde!
Server Software
Die Server Software bietet die Möglichkeit, neben den Nutzinformation (Token) auch Informationen zur aktuellen Batteriespannung, Hard- und Software Version und eine Statusinformation des DashButtons zu liefern.
Die Betriebsspannung wird mit dem Parameter &vbatt=x.xxx an den Server übergeben.
Er gibt die Batteriespannung in Volt an.
Beispielberechnung für die Batteriekapazität:
Bei Betrieb mit einer Li Fe PO4 Zelle , wird am Messeingang des Mikrocontrollers etwa eine Betriebsspannung von 3,3V erreicht.
Was in diesem Fall einer prozentualen Batteriekapazität von 100 % entspräche.
Die minimale Betriebsspannung sollte 3,0V nicht unterschreiten, was somit die 0% der Batteriekapazität fest legt.
Im folgenden Beispiel wird angenommen, dass die Batterie noch eine Spannung von 3,15V (50%) liefert:
Wird der Parameter nicht übergeben, wird der Wert im Server automatisch auf -1 gesetzt. Was soviel bedeutet, dass der Batteriestatus nicht ermittelt werden konnte bzw. nicht bekannt ist.
In der Server Software kann für jeden DashButton der verwendete Batterietyp ausgewählt werden. Somit kann die Berechnung der Batteriekapazität anhand einer hinterlegten Herstellerkennlinie erfolgen, was eine genauere Anzeige der tatsächlichen Kapazität ermöglicht.
Mit diesen Informationen kann in der Serverapplikation ein Mechanismus angestoßen werden, der den Admin rechtzeitig darüber informiert, wann ein Batteriewechsel erforderlich wird.
Das Layout bietet die Möglichkeit, verschieden Batterietypen in verschiedenen Leistungsklassen und Größen zu verwenden.
Externe Antenne
Um eine stabile Funkverbindung etablieren zu können, muss bei der Verwendung eines Metall- bzw. metallisierten Gehäuses eine externe Antenne verwendet werden!
Bei einem Standard ESP-07 Modulen ist bereits ein Anschluss für eine externe Antenne vorhanden. Wird der externe Antennenanschluss verwendet, muss die Verbindung zur internen (aufgelöteten) Antenne unterbrochen werden. Hierfür ist der Null Ohm Wiederstand neben dem Antennenanschluss zu entfernen.
Wurde die interne Antenne entfernt,ist zwingend darauf zu achten, dass das Modul nicht ohne eine angeschlossene externe Antenne betrieben wird. Da dies zur Zerstörung des ESP-Moduls führen kann.
Programmierung
Die Programmierung des Mikrocontrollers erfolgt über einen Programmieranschluss, der auf der Platine vorhanden ist.
Diese Schnittstelle ist notwendig, um erstmalig eine Firmware in den Mikrocontroller laden zu können.
Hierbei ist zu beachten, dass die Lötbrücke J1 die im Bild mit einem Stern gekennzeichnet ist, nicht geschlossen sein darf. Da im Auslieferungsstand der Pin GPIO16 auf low liegt und somit eine Dauer Reset anliegen würde.
Im Programm darf somit der GPIO16 nicht mit pinMode() konfiguriert werden.
Funktionsweise des Tasters und der LED
Das Layout bietet je nach Bestückung die Möglichkeit einen Taster und eine LED in SMD Technik oder aber auch bedrahteten Bauelemente zu verwenden. Somit ist es auch möglich andere Bedientasten z.B. mit Kabelanschlüssen ein zu löten.
Befindet sich das Modul im Deepsleep Modus, kann es durch einen Tastendruck aufgeweckt werden.
Je nachdem wie lange der Taster gedrückt gehalten wir, werden unterschiedliche Funktionen aufgerufen:
Drücken bis eine Verbindung ausgebaut wurde – Test Modus (Status 0).
Drücken über einen Zeitraum von 10 Sekunden – WIFI Setup (Status 1).
kurzes Drücken des Tasters – löst eine Bestellung aus (Status 2).
Anschließend versucht das Gerät eine Netzwerkverbindung zum lokalen AP zu etablieren, was durch ein langsames blinken der LED signalisiert wird.
Kann keine Verbindung hergestellt werden, beginnt die LED schnell zu blinken und man hat die Möglichkeit für 240 Sekunden eine Verbindung zu diesem Dash Button aufzubauen und die Konfiguration vor zu nehmen.
Erfolgt in dieser Zeit kein Login auf dem Dash Button, wird der Mikrocontroller wieder in den Deepsleep Modus versetzt, um die Batterie nicht unnötig zu strapazieren.
Ist der Verbindungsaufbau zum lokalen WLAN geglückt, wird die Nutzinformation (Dash Token) an den in den Credentials definierten Server verschickt.
Wurde der Empfang der Information vom Server bestätigt, leuchtet die Status LED für drei Sekunden kontinuierlich.
Wird der Empfangs nicht vom Server bestätigt, wird dies durch schnelles Blinken der LED für drei Sekunden angezeigt.
Anschließend wechselt der Mikrocontroller wider in den Deepsleep Modus.
Je nachdem welches Ereignis am Dashbutton ausgelöst wurde, wird eine entsprechende Statusinformation im Parameter &status=x dem HTTP Put Request übergeben. Wird der Parameter nicht mit übergeben, wird der Wert im Server automatisch auf -1 gesetzt, was soviel bedeutet das der Status nicht bekannt ist.
Server Applikation für den DashButton
Die Serverapplikation kann auch direkt mit dem Webbrowser getestet werden. Hierfür wird in die Adresszeile der folgende Aufruf eingegeben:
Host:
Ist die IP-Adresse des Servers z.B. 192.168.1.123
URL:
Ist eine Pfadangabe (optional für den augenblicklichen Stand) soll später der Einordnung der Einträge dienen, z.B. für die Standorte.
token: Ist ein 32 stelliger ein eindeutiger Schlüssel des betreffenden Dash Buttons.
vbatt:
Gibt die Batteriespannung in Volt an.
hv:
Gibt die aktuelle Hardware Revision des DashButton an.
sv:
Gibt die aktuelle Firmware Version des DashButton an.
status:
Information über den Auslöser des Ereignisses.
0 – Test (Button wurde kürzer als drei Sekunden gedrückt)
1 – Settings (Die Einstellungen wurden aufgerufen, durch langes drücken des Tasters)
2 – Order (Ein Bestellauftrag wurde abgesetzt)
3 – Für weitere Statusinformationen reserviert
Weitere Ideen:
Der Dash Token sollte im Prinzip ein 32 Byte Hashcode sein, der einen Prüfsumme oder einen CRC Check enthält, um die Authentizität des Tokens auf dem Server verifizieren zu können.
Es wäre denkbar, dass sich ein Dash Button der längere Zeit nicht betätigt wurde, automatisch aktiviert (z.B. alle 24h) und seinen Batteriestatus an den Server sendet.
Der Parameter „status“ würde das Ereignis dann als Test identifizieren.
Hierbei wäre zu bedenken, dass ein zyklisches Verbinden mit dem WLAN und das Senden dieser Statusinformationen die Batterielebensdauer zusätzlich verkürzen würde.
Privater Hobby Blog
Diese Website benutzt Cookies!
Wenn Sie die Website besuchen möchtest bzw. einfach weiter scrollen,
gehen wir automatisch von Ihrem Einverständnis aus.OKNeinDatenschutzerklärung