Postkasten-Benachrichtigung über MQTT mit ESP8266 / Letterbox notification via MQTT using ESP8266

Eines meiner ersten ESP8266-Arduino Projekte. Primitiver Aufbau, primitiver Code. Aber hey, es funktioniert ;-)

FloKra f50ec22b91 README.md noch a letztes moi herst 3 gadi atpakaļ
Postkastl_MQTT 6cbedb04b5 initial version (v5, older versions not in GIT) 3 gadi atpakaļ
Schematic 6cbedb04b5 initial version (v5, older versions not in GIT) 3 gadi atpakaļ
Schematic-Sim 6cbedb04b5 initial version (v5, older versions not in GIT) 3 gadi atpakaļ
Berechnung Batterielebensdauer Lithiumbatt.xlsx 6cbedb04b5 initial version (v5, older versions not in GIT) 3 gadi atpakaļ
Berechnung Batterielebensdauer.xlsx 6cbedb04b5 initial version (v5, older versions not in GIT) 3 gadi atpakaļ
Messung_Stromaufnahme_2016.txt 6cbedb04b5 initial version (v5, older versions not in GIT) 3 gadi atpakaļ
Messung_Stromaufnahme_2021.txt 6cbedb04b5 initial version (v5, older versions not in GIT) 3 gadi atpakaļ
README.md f50ec22b91 README.md noch a letztes moi herst 3 gadi atpakaļ

README.md

Postkastl MQTT

Postkasten-Benachrichtigung via MQTT-Version mit ESP8266 (Arduino)

Verwendet wird ein ESP-01 Modul, das kleinste verfügbare ESP8266-Modul. Dies vor allem auch aus dem Grund, dass die darauf fehlende Peripherie den Vorteil des geringeren Stromverbrauchs hat.

benutzte Libraries: ESP8266WiFi, PubSubClient

Stromversorgung

Es hat sich gezeigt, dass für die direkte Versorgung, und für lange Batterielaufzeit, 2 Stück AA-Lithium-Batterien am geeignetsten sind. Diese liefern auch bei -10°C noch genug Strom und halten lange eine hohe Ausgangsspannung. Batterielaufzeit damit deutlich über 1 Jahr.

Li-Ion Zellen eignen sich weniger. Mit Diode in Serie zur Verringerung der Spannung zwar möglich, hat aber Nachteile (die Spannung bleibt zu hoch oder wird zu niedrig, bei etwas zu hoher Versorgungsspannung zieht der ESP signifikant mehr Standby-Strom, was die Batterielaufzeit deutlich verringert. Mit (den meisten) Spannungsregler(n) wäre der Ruhestrom sowieso zu hoch.

Normale AA-Batterien funktionieren zwar, liefern aber unter 0°C zu wenig Strom.

NiMH Akkus (auch solche mit geringer Selbstentladung) haben schon Vollgeladen eine Grenzwertig geringe Ausgangsspannung und versagen ebenfalls bei niedrigen Temperaturen gänzlich.

Details siehe: Messung_Stromaufnahme_2021.txt

Programmablauf

  • GPIO0 wird nach dem Start sofort auf HIGH geschaltet. Dieser ist über eine Diode mit ESP-Pin CHIP_ENABLE/PD_CH verbunden und hält dadurch das Modul aktiv, bis dieser Pin programmatisch auf LOW geschaltet wird.
  • WiFi-Verbindung aufbauen
  • MQTT Broker verbinden und publishen

    • Topic: Postkasten (im Code anzupassen)

    • Payload (JSON-formatiert): { "event":"[EVENT]", "Vcc":"[VCC]","Batt":"[BATT]" }

    • [EVENT] = "new_post" oder "emptied"

      Abhängig vom Status des Pin GPIO3. Ist dieser HIGH wird der Postkasten gerade entleert (erfordert 2. Kontakt).

    • [VCC] = gemessene Batteriespannung in mV

    • [BATT] = Batteriestatus (OK oder LOW, minimaler Wert für "OK" durch Tests ermittelt)

  • WiFi sofort wieder trennen um Strom zu sparen

  • Einige Sekunden (im Code anpassbar, z.B. 20s) um Mehrfachauslösungen zu verhindern

  • "Den Ast absägen auf dem wir sitzen", indem GPIO0 auf LOW gezogen wird. Das ESP-Modul ist danach im Deep Sleep und verbraucht nur noch Strom im µA-Bereich.

  • Falls dies nicht funktioniert hat (z.B. Fehler in der Schaltung) wird der ESP nach einigen Sekunden programmatisch in den Deep Sleep geschaltet, aus dem ein ESP-01 Modul nicht mehr aufwachen kann, da die Schaltung des ESP-01 Moduls dies nicht ermöglicht. Aufwachen per externem Triggerkontakt ist natürlich trotzdem wieder möglich.

Schaltung

Schaltungsbeschreibung

  • ESP-01 Modul als MCU mit WiFi mit Minimalbeschaltung
  • Modul ist direkt von Batterien Spannungsversorgt, aber im Deep Sleep-Mode, da CHIP_ENABLE (Pin CH_PD) im Normalfall LOW ist
  • 2 Schaltkontakte (Schließer) aktivieren jeweils das Modul, indem CHIP_ENABLE/CH_PD über eine Diode auf HIGH gezogen wird
    • Kontakt für Einwurfschlitz über ein RC-Glied, damit die Schaltung nicht dauerhaft aktiv bleibt wenn die Klappe offen stehen bleibt, weil der Zettelhaberer mal wieder zu viel rein gestopft hat
    • Kontakt für Entleerung zieht zusätzlich GPIO3 (UART RXD) auf HIGH, damit im Programm festgestellt werden kann welcher der beiden Kontakte den ESP geweckt hat. Dieser Kontakt kann auch gänzlich weggelassen werden. Dann kann auch 1 Diode und 1 Widerstand eingespart werden sowie die Leitung zum GPIO3.
  • Diode von GPIO0 nach CHIP_ENABLE/CH_PD ist die "Selbsthalteschaltung". Dieser PIN wird im Programm als erstes auf HIGH geschaltet, dadurch bleibt das Modul aktiv bis programmatisch der GPIO0 auf LOW geschaltet wird, und geht danach wieder in den Deep Sleep.
  • (Shottky-)Diode in der Spannungsversorgung ist notwendig wenn ein Li-Ion Akku zum Einsatz kommt. Bei Versorgung aus AA-Batterien muss diese Diode durch eine Drahtbrücke ersetzt werden!
  • Deep-Sleep bedeutet, dass das Modul dann (bei korrekter Versorgungsspannung!) nur weniger µA Strom zieht. Somit ist eine lange Batterielebensdauer möglich. Im aktiven Modus (WiFi verbunden) zieht das Modul bis zu 180mA - mit kurzen Spitzen die noch deutlich darüber liegen, während dem Aufbau der Verbindung.