Zum Inhalt springen
ESP8266 Projekte Fortgeschrittene · 2 Std. · Aktualisiert am 24. Juli 2026

Erhalte eine Nachricht aufs Smartphone, wenn die Post da ist

Nachricht, wenn die Post da ist mit Telegram, ESP8266 und Deep Sleep
Foto von Yannik Mika von Unsplash

Gehst du ab und an vergeblich zum Briefkasten? Das ist jetzt vorbei! Dieses Projekt sendet dir eine Telegram-Nachricht aufs Smartphone, sobald der Briefträger die Post gebracht hat.

Hierfür verwende ich einen NodeMCU ESP8266 und einen Reed-Kontakt – einen kleinen Magnetschalter. Du kannst aber natürlich auch einen anderen ESP8266 nehmen. Der Reed-Kontakt erkennt, wenn sich die Briefkastenklappe öffnet. Alternativ tut es auch ein einfacher Taster oder Mikroschalter, den die Klappe beim Öffnen betätigt.

Da im Briefkasten keine Steckdose zur Verfügung steht, versorgst du den ESP über eine Powerbank und versetzt ihn die meiste Zeit in den Tiefschlaf (Deep Sleep). Wie der Deep Sleep beim ESP8266 grundsätzlich funktioniert, erkläre ich ausführlich im Deep-Sleep-Tutorial – hier geht es direkt um die Anwendung im Briefkasten. Eine Bedingung gibt es allerdings: Der ESP8266 muss sich mit deinem WLAN verbinden können – dieses sollte also bis zu deinem Briefkasten reichen.

Diese Bauteile brauchst du

Affiliate-Links: Kaufst du über diese Links, erhält Pollux Labs eine kleine Provision – für dich ohne Mehrkosten.

Vorbereitungen

Ein paar Dinge musst du eventuell vorab erledigen – wie, erfährst du in diesen Tutorials: Richte dir zunächst einen Telegram-Bot ein, um Nachrichten vom ESP8266 auf deinem Smartphone erhalten zu können. Außerdem musst du deinen ESP8266 in deiner Arduino IDE verfügbar machen, um ihn von dort aus programmieren zu können.

Das Projekt aufbauen

Der Aufbau ist denkbar schlicht: Du verbindest die beiden Anschlüsse des Reed-Kontakts mit den Pins RST und GND deines NodeMCU – mehr braucht es nicht. Zum Testen ist ein Breadboard praktisch; im Briefkasten kannst du die beiden Drähte auch direkt anlöten.

Reed-Kontakt am ESP8266

Ein Wort zur Verkabelung, denn einfacher geht es kaum: Beim klassischen Timer-Deep-Sleep verbindet man die Pins D0 und RST, damit sich der ESP nach Ablauf der eingestellten Zeit selbst weckt. Das brauchst du in diesem Projekt nicht – dein ESP schläft mit ESP.deepSleep(0) unbegrenzt und wird ausschließlich durch das Öffnen der Briefkastenklappe geweckt (dazu unten mehr). Du lässt D0 also unverbunden. Und weil ein Reed-Kontakt beim Schließen einfach zwei Kontakte verbindet, brauchst du weder Transistor noch Diode: Der Schalter zieht den Reset-Pin direkt auf GND – genau das Signal, das der ESP zum Aufwachen braucht.

Noch ein Hinweis zum Hochladen: Ist der Reed-Kontakt beim Flashen geschlossen (also der Magnet in der Nähe), liegt der Reset-Pin dauerhaft auf GND und der Upload schlägt fehl. Halte den Magneten während des Uploads einfach fern – oder trenne kurz eine der beiden Leitungen.

Das Wecksignal für den ESP8266

Der Reset-Pin des ESP8266 ist active-low: Ein Neustart wird ausgelöst, sobald RST kurz auf GND (also LOW) gezogen wird. Genau das erledigt der Reed-Kontakt für dich. Er besteht aus zwei Kontaktzungen in einem kleinen Glasröhrchen, die sich schließen, sobald ein Magnet in die Nähe kommt. Du montierst den Magneten an die Briefkastenklappe und den Reed-Kontakt ans Gehäuse: Bewegt sich die Klappe, wandert der Magnet am Kontakt vorbei, dieser schließt kurz – und dein ESP wacht auf.

Ein wichtiges Detail beim Einbau: Der Kontakt sollte beim Öffnen der Klappe nur kurz schließen und danach wieder öffnen. Bleibt er dauerhaft geschlossen – etwa weil der Magnet direkt daneben liegen bleibt –, hältst du den ESP im Reset fest und er kommt nie zum Senden. Richte Magnet und Reed-Kontakt deshalb so aus, dass erst die Bewegung der Klappe den Kontakt für einen Moment auslöst. Ein bisschen Ausprobieren lohnt sich hier.

Verwendest du statt des Magnetschalters lieber einen mechanischen Taster oder Mikroschalter, bleibt das Prinzip identisch: Auch er muss beim Öffnen der Klappe kurz die Verbindung zwischen RST und GND herstellen.

Der Sketch

Nun zum Code. Zunächst benötigst du ein paar Bibliotheken, die du zu Beginn des Sketchs einbindest. Falls noch nicht geschehen, installiere im Bibliotheksmanager die jeweils neueste Version.

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>

Anschließend folgen einige Definitionen und Konstanten für deine Zugangsdaten zum WLAN und zu deinem Telegram Bot. Zur Erinnerung: Wie du die benötigten Daten für Telegram erhältst, erfährst du im oben genannten Tutorial.

//Deine WLAN-Zugangsdaten
const char* ssid = "NETWORK";
const char* password = "PASSWORD";

//Dein Bot-Token
#define botToken "BOT-TOKEN"  // den Bot-Token bekommst du vom Botfather)

//Deine User ID
#define userID "USER-ID"

Im letzten Schritt vor der Setup-Funktion erstellst du eine Instanz von WiFiClientSecure und initialisierst mit dieser die Verbindung zum Telegram-Bot.

WiFiClientSecure client;
UniversalTelegramBot bot(botToken, client);

Die Setup-Funktion

Im Sketch für dieses Projekt benötigst du nur die Setup-Funktion, die nach dem Start des ESP8266 abläuft. Hier startest du die Internet-Verbindung und sendest die Nachricht, dass die Post da ist, an dein Smartphone (also an deinen Telegram-Bot). Zuletzt legst du deinen Mikrocontroller wieder schlafen.

Sobald der Reed-Kontakt beim nächsten Öffnen der Klappe wieder schließt, wacht er auf und durchläuft das Setup erneut. Wie du siehst, benötigst du also keinen Loop.

Zuerst konfigurierst du den client, den du oben erzeugt hast, startest die serielle Ausgabe mit 74880 Baud (mit dieser Geschwindigkeit gibt der ESP8266 auch seine eigenen Boot-Meldungen aus – so bleibt nach jedem Aufwachen alles lesbar) und gibst dort die Nachricht aus, dass er aufgeweckt wurde:

client.setInsecure();
Serial.begin(74880);
Serial.println("Awake");

Anschließend stellst du die Verbindung zu deinem WLAN-Netzwerk her:

Serial.print("Connecting to WiFi: ");
Serial.println(ssid);

WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
  Serial.print(".");
  delay(500);
}

Serial.println("");
Serial.println("Connected!");

Zuletzt sendest du eine Nachricht an deinen Telegram-Bot mit der Funktion bot.sendMessage() – wartest kurz, sorgst mit Serial.flush() dafür, dass die serielle Ausgabe wirklich noch rausgeht, und legst den ESP8266 wieder schlafen:

bot.sendMessage(userID, "Deine Post ist da!", "");

delay(2000);
Serial.println("Going to sleep");
Serial.flush();  // wartet, bis die serielle Ausgabe wirklich raus ist
ESP.deepSleep(0);

Für den Tiefschlaf verwendest du die Funktion ESP.deepSleep() mit dem Parameter 0. Diese Null sorgt dafür, dass dein Mikrocontroller ohne zeitliches Limit in den Schlaf versetzt wird – das heißt, er wird erst wieder durch das Schließen des Reed-Kontakts an der Klappe aufgeweckt. Mehr zu den Feinheiten des Deep Sleep – wie du Werte über den Schlaf rettest oder warum ein NodeMCU im Schlaf deutlich mehr Strom zieht als der nackte Chip (wichtig, wenn dein Melder lange mit einer Powerbank laufen soll) – findest du im Deep-Sleep-Tutorial.

Und das war es auch schon – eigentlich ganz einfach. Hier nun der gesamte Sketch zum Rauskopieren.

//Libraries
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>

//WiFi Credentials
const char* ssid = "NETWORK";
const char* password = "PASSWORD";

//Telegram Bot Credentials
#define botToken "BOT-TOKEN"
#define userID "USER-ID"

WiFiClientSecure client;
UniversalTelegramBot bot(botToken, client);

void setup() {
  client.setInsecure();
  Serial.begin(74880);
  Serial.println("Awake");

  //Connecting to WiFi
  Serial.print("Connecting to WiFi: ");
  Serial.println(ssid);

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(500);
  }

  Serial.println("");
  Serial.println("Connected!");

  bot.sendMessage(userID, "Deine Post ist da!", "");

  delay(2000);
  Serial.println("Going to sleep");
  Serial.flush();
  ESP.deepSleep(0);
}

void loop() {
}

Wie geht es weiter?

Du hast nun einen Post-Melder, der über einen Reed-Kontakt das Öffnen der Briefkastenklappe erkennt. Je nachdem, wie dein Briefkasten aufgebaut ist, kann auch ein mechanischer Taster passen – oder, wenn du lieber Bewegung im Kasten erkennen möchtest, ein PIR-Sensor (der braucht dann allerdings einen kleinen Transistor, um den Reset auszulösen).

Vielleicht fallen dir aber auch noch ganz andere Lösungen ein, um zu erkennen, dass dein Briefkasten geöffnet wurde. Nerdiger und ambitionierter wäre zum Beispiel eine Variante, die KI nutzt. Auf Pollux Labs kannst du die Grundlagen von Künstlicher Intelligenz auf Mikrocontrollern lernen.