ESP32 S3 Kamera - Intelligente Video-Türklingel mit einem Taster
Eine gekaufte Türklingel mit Kamera kostet viel Geld und benötigt ein kostenpflichtiges Konto. Diese hier kostet nur ein paar Euro und benötigt nichts außer Ihrem WLAN.
Ein Besucher drückt den Taster. Der ESP32 S3 macht ein Foto und sendet es mit Telegram an Ihr Handy, zusammen mit einem Link zum Live-Video. Sie sehen sich das Foto sofort an und tippen auf den Link, wenn Sie sehen möchten, was gerade passiert. Die kleine LED auf dem Board antwortet dem Besucher, sodass er weiß, dass die Klingel funktioniert hat.

Was Sie bauen werden:
- Einen Klingeltaster, der ein Foto des Besuchers macht
- Eine Telegram-Nachricht mit dem Foto und einem Link zum Live-Video
- Eine Live-Video-Seite, die jeder mit dem Link auf einem Handy oder Computer öffnen kann
- Eine LED, die dem Besucher antwortet, damit er weiß, dass die Klingel funktioniert hat
- Eine Ruhezeit, damit ein Kind, das den Taster zehnmal drückt, nicht zehn Fotos sendet
Erforderliche Hardware
Oder Sie können die folgenden Kits kaufen:
| 1 | × | DIYables Sensor-Kit (18 Sensoren/Displays) |
※ Notiz:
Das ESP32 S3 Kamera-Board hat 40 Pins, aber der Schraubklemmenblock und das Breakout-Board haben 44 Pins. Sie funktionieren trotzdem zusammen. Setzen Sie das Kamera-Board in die Mitte des 44-Pin-Boards, sodass links 2 Pins und rechts 2 Pins frei bleiben.
Mit dem Schraubklemmenblock können Sie Drähte mit einem Schraubendreher anschließen, ganz ohne Löten. Das Breakout-Board bietet Ihnen einfache Stiftleisten für ein Steckbrett.
Wie es funktioniert
Das ganze Projekt besteht aus sechs Schritten:
| Schritt | Was passiert |
|---|---|
| 1 | Ein Besucher drückt den Taster |
| 2 | Die LED geht an, sodass der Besucher sieht, dass die Klingel funktioniert |
| 3 | Die Kamera macht ein Foto |
| 4 | Der ESP32 S3 sendet das Foto UND den Live-Video-Link mit Telegram an Ihr Handy |
| 5 | Die LED blinkt zweimal. Der Besucher weiß, dass die Nachricht unterwegs ist. |
| 6 | Sie tippen auf den Link, wenn Sie die Tür live beobachten möchten |
Die Nachricht auf Ihrem Handy sieht so aus:
ArduinoBot
Warum ein Foto UND ein Link?
Ein Foto und ein Live-Video sind für unterschiedliche Dinge gut:
| Foto in der Nachricht | Live-Video-Link | |
|---|---|---|
| Kommt von selbst an | Ja | Nein, Sie müssen darauf tippen |
| Funktioniert von überall | Ja, immer | Nur zu Hause, außer Sie richten eine Portweiterleitung ein |
| Zeigt einen Moment | Ja | Nein, es zeigt das Jetzt |
| Zeigt, was der Besucher als Nächstes tut | Nein | Ja |
| Kostet Akku und WLAN | Ein paar Sekunden | Solange Sie zuschauen |
Das Foto sagt Ihnen also, dass jemand da ist, und der Link lässt Sie sehen, was er gerade tut. So funktioniert eine echte Video-Türklingel.
※ Notiz:
Das Live-Video stoppt nach 60 Sekunden von selbst. Das ist Absicht. Während jemand das Video ansieht, ist das Board beschäftigt und kann den Taster nicht erkennen. Das Zeitlimit stellt sicher, dass die Türklingel immer wieder zum Leben erwacht. Um es zu ändern, ändern Sie die Zeile #define STREAM_SECONDS 60.

Die LED spricht mit dem Besucher
Eine Türklingel ohne Antwort ist eine schlechte Türklingel. Niemand weiß, ob sie funktioniert hat, also drücken die Leute immer wieder. Die kleine Farb-LED, die bereits auf dem Board sitzt, gibt für jede Situation eine Antwort:
| Was die LED tut | Was es bedeutet |
|---|---|
| 3-mal Blinken beim Einschalten des Boards | Die Türklingel ist bereit |
| Bleibt an | Das Foto wird aufgenommen und gesendet. Bitte warten. |
| 2 langsame Blinker | Das Foto wurde gesendet. Jemand wird kommen. |
| 5 schnelle Blinker | Etwas ist schiefgelaufen. Kein WLAN, oder Telegram hat abgelehnt. |
| 1 langer Blinker | Sie haben zu früh nach dem letzten Klingeln gedrückt. |
※ Notiz:
Dieser Teil lässt das Projekt fertig wirken. Der Code umfasst nur wenige Zeilen, aber ein Besucher, der eine Antwort erhält, drückt den Taster nicht zwanzigmal.
Warum ein Taster Hilfe braucht
Ein Drucktaster besteht aus zwei Metallstücken. Wenn sie sich berühren, prallen sie in den ersten Millisekunden viele Male gegeneinander. Ohne Schutz sieht ein Druck wie fünf Drücke aus, und Ihr Handy erhält fünf Fotos.
Sie könnten den Wartecode selbst schreiben, aber die Bibliothek ezButton erledigt das bereits. Drei Zeilen sind die ganze Arbeit:
Dann fragen Sie einfach, ob jemand ihn gedrückt hat:
※ Notiz:
isPressed() ist nur in dem Moment wahr, in dem der Taster heruntergedrückt wird, nicht solange er gehalten wird. Ein Druck erledigt die Arbeit also einmal, auch wenn ein Besucher den Taster drei Sekunden lang gedrückt hält.
※ Notiz:
button.loop() muss die erste Zeile in Ihrer eigenen loop() sein. Es ist die Zeile, die den Pin liest und das Warten übernimmt. Vergessen Sie sie, funktioniert der Taster nie.
Erstellen Sie Ihren Telegram-Bot
Sie benötigen ein Bot-Token und eine Chat-ID. Das dauert drei Minuten.
Schritt 1: Erstellen Sie Ihren Bot
- Installieren Sie Telegram auf Ihrem Handy und erstellen Sie ein Konto.
- Suchen Sie in Telegram nach @BotFather. Er hat ein blaues Häkchen.
- Öffnen Sie den Chat mit BotFather und schreiben Sie ihm so:
BotFather
- Kopieren Sie das Bot-Token aus der letzten Nachricht und bewahren Sie es sicher auf.
Schritt 2: Finden Sie Ihre Chat-ID
- Suchen Sie in Telegram nach dem Namen Ihres neuen Bots und öffnen Sie den Chat.
- Senden Sie eine beliebige Nachricht an Ihren Bot, zum Beispiel hello. Dieser Schritt ist notwendig. Telegram erlaubt einem Bot nicht, Ihnen zu schreiben, bevor Sie ihm geschrieben haben.
ArduinoBot
- Öffnen Sie diese Adresse in Ihrem Webbrowser. Setzen Sie Ihr eigenes Bot-Token anstelle von <YOUR_BOT_TOKEN> ein:
- Der Browser zeigt einen langen Text. Suchen Sie nach "chat":{"id":. Die Zahl dahinter ist Ihre Chat-ID.
※ Notiz:
Zeigt der Browser {"ok":true,"result":[]} ohne Inhalt an? Dann haben Sie Ihrem Bot noch keine Nachricht gesendet. Gehen Sie zurück zu Schritt 2, senden Sie hello an Ihren Bot und laden Sie die Adresse erneut.
※ Notiz:
Zeigen Sie Ihr Bot-Token niemals jemandem und stellen Sie es niemals auf eine Website oder auf GitHub. Wenn es bekannt wird, senden Sie /revoke an BotFather, und Sie erhalten ein neues.
Der Live-Video-Link
Der Link in der Telegram-Nachricht stammt aus einer Zeile am Anfang des Codes:
| Was Sie dort eintragen | Was der Link wird | Wo er funktioniert |
|---|---|---|
| Nichts (leer) | http://192.168.0.2/stream, die Adresse des Boards | Nur zu Hause, im selben WLAN |
| Ihre eigene Adresse | http://my-house.duckdns.org:8080/stream | Von überall auf der Welt |
Der Code wählt selbst:
※ Notiz:
Beginnen Sie mit der leeren Einstellung. Testen Sie zuerst alles zu Hause. Erst wenn die Türklingel gut funktioniert, denken Sie darüber nach, sie für das Internet zu öffnen.
Warum der Link außerhalb Ihres Zuhauses möglicherweise nicht funktioniert
Die Adresse des Boards, zum Beispiel 192.168.0.2, ist eine private Adresse. Sie existiert nur innerhalb Ihres Hauses. Ihr Handy findet sie, wenn es in Ihrem eigenen WLAN ist, aber das Internet kann sie überhaupt nicht sehen. Der Link funktioniert also zu Hause und tut nichts, wenn Sie unterwegs sind.
Um den Link von außen zu öffnen, benötigen Sie eine öffentliche Adresse: die Adresse Ihres Routers zusammen mit einer Portweiterleitung, damit der Router den Besucher an das Board weiterleitet. Jeder Router macht das etwas anders, schauen Sie daher im Handbuch Ihres Routers nach oder fragen Sie Ihren Internetanbieter.
Wenn Sie sie haben, tragen Sie diese Adresse in den Code ein:
※ Notiz:
Die meisten Router erhalten von Zeit zu Zeit eine neue öffentliche Adresse, und Ihr Link funktioniert dann nicht mehr. Ein kostenloser DDNS-Name, zum Beispiel von DuckDNS oder No-IP, zeigt immer auf Ihr Haus, sodass Sie http://my-house.duckdns.org:8080 eintragen und es vergessen können.
Schützen Sie es mit einem Passwort
Wenn Sie Ihre Kamera für das Internet öffnen, kann jeder, der die Adresse findet, Ihre Tür beobachten. Programme durchsuchen den ganzen Tag das gesamte Internet nach offenen Kameras.
Schalten Sie daher immer, wenn Sie PUBLIC_ADDRESS verwenden, das Passwort ein:
Der Webbrowser fragt beim ersten Mal danach und merkt sie sich danach.
※ Notiz:
Dies ist ein einfaches Passwort, das über http und nicht über https gesendet wird. Es hält einen Fremden auf, der Ihre Adresse findet, ist aber nicht stark genug für eine Bank. Für eine Haustür ist es ein fairer Kompromiss. Möchten Sie mehr Sicherheit? Dann öffnen Sie die Kamera überhaupt nicht für das Internet und schauen Sie das Live-Video nur an, wenn Sie zu Hause sind.
Die Bibliotheken installieren
Dieses Projekt benötigt zwei Bibliotheken.
DIYables ESP32 WebServer erstellt die Live-Video-Seite:
- Öffnen Sie die Arduino IDE.
- Klicken Sie auf das Symbol Libraries in der linken Leiste.
- Geben Sie DIYables ESP32 WebServer in das Suchfeld ein.
- Suchen Sie die Bibliothek von DIYables.io und klicken Sie auf INSTALL.
- Search for DIYables ESP32 WebServer created by DIYables.io and click the Install button.
ezButton liest den Taster und kümmert sich um das Prellen:
- Geben Sie ezButton in dasselbe Suchfeld ein.
- Suchen Sie die Bibliothek von ArduinoGetStarted.com und klicken Sie auf INSTALL.
- Search for ezButton created by ArduinoGetStarted.com and click the Install button.
Arduino IDE Einstellungen für die ESP32 S3 Kamera
Die Kamera funktioniert nicht mit den Standardeinstellungen der Arduino IDE. Sie müssen einige Punkte im Menü Tools ändern, bevor Sie den Code hochladen.
| Menüpunkt in Tools | Diese Option wählen |
|---|---|
| Board | ESP32S3 Dev Module |
| Flash Size | 16MB (128Mb) |
| PSRAM | OPI PSRAM |
| Partition Scheme | Huge APP (3MB No OTA/1MB SPIFFS) |
| CPU Frequency | 240MHz (WiFi) |
| USB Mode | Hardware CDC and JTAG |
| Upload Mode | UART0 / Hardware CDC |
| Upload Speed | 921600 |
| USB CDC On Boot | Enabled |
ESP32 S3 Code
Ändern Sie Ihr WLAN, Ihr Bot-Token und Ihre Chat-ID am Anfang des Codes.
Die Einstellungen, die Sie ändern können:
| Name | Startwert | Was es bewirkt |
|---|---|---|
| PUBLIC_ADDRESS | leer | Der Link in der Nachricht. Leer bedeutet die Adresse des Boards. |
| USE_PASSWORD | false | Setzen Sie es auf true, wenn Sie die Kamera für das Internet öffnen |
| QUIET_TIME | 10000 | Millisekunden Wartezeit bis zum nächsten Klingeln |
| STREAM_SECONDS | 60 | Das Live-Video stoppt nach so vielen Sekunden von selbst |
| DEBOUNCE_TIME | 50 | Millisekunden Wartezeit, weil der Taster prellt |
Schnelle Schritte
- Neu beim ESP32 S3? Absolvieren Sie zuerst unsere Anleitung Erste Schritte mit dem ESP32 S3.
- Erstellen Sie Ihren Telegram-Bot und finden Sie Ihre Chat-ID. Siehe die Schritte oben.
- Installieren Sie die Bibliotheken DIYables ESP32 WebServer und ezButton.
- Ziehen Sie das USB-Kabel ab und verdrahten Sie dann das Taster-Modul wie in der Tabelle oben.
- Kopieren Sie den obigen Code und fügen Sie ihn in die Arduino IDE ein.
- Ändern Sie WIFI_SSID, WIFI_PASSWORD, BOT_TOKEN und CHAT_ID. Lassen Sie PUBLIC_ADDRESS vorerst leer.
- Ändern Sie die Einstellungen im Menü Tools. Siehe die Tabelle oben.
- Kompilieren Sie den Code und laden Sie ihn auf das ESP32 S3 Board hoch, indem Sie in der Arduino IDE auf die Schaltfläche Upload klicken.

- Öffnen Sie den Seriellen Monitor in der Arduino IDE.

- Drücken Sie einmal die Taste RESET. Die LED blinkt dreimal, sodass Sie wissen, dass die Türklingel bereit ist.
- Richten Sie die Kamera auf Ihr Gesicht und drücken Sie den Klingeltaster.
- Die LED bleibt einen Moment an und blinkt dann zweimal.
- Schauen Sie auf Ihr Handy. Das Foto ist in Ihrem Telegram-Chat, mit dem Link darunter.
ArduinoBot
- Tippen Sie auf den Link. Ihr Handy öffnet das Live-Video Ihrer Tür.
- Schauen Sie einen Moment zu und schließen Sie dann die Seite. Die Türklingel ist wieder bereit.
- Profi-Tipp: Möchten Sie, dass der Link auch funktioniert, wenn Sie nicht zu Hause sind? Lesen Sie oben Der Live-Video-Link und richten Sie die Portweiterleitung ein.


Serieller Monitor
Die folgenden Messwerte wurden im Jahr 2026 aufgezeichnet:
※ Notiz:
Too soon after the last ring ist die Ruhezeit, die ihre Arbeit macht. Jemand hat den Taster nach 4 Sekunden erneut gedrückt, und der Code hat kein zweites Foto gesendet.
※ Notiz:
Somebody is watching the live video erscheint, wenn Sie auf den Link tippen. Wenn Sie diese Zeile nie sehen, hat der Link das Board nicht erreicht. Lesen Sie die Fehlerbehebung unten.
Die zwei Zeilen am Anfang zeigen Ihnen, was in die Nachricht eingefügt wurde. Wenn Sie PUBLIC_ADDRESS setzen, wird die zweite Zeile zu Ihrer eigenen Adresse:
Fehlerbehebung
Nichts passiert, wenn ich den Taster drücke.
- Prüfen Sie die drei Drähte. VCC an 3,3V, GND an GND, OUT an GPIO47.
- Ist button.loop() die erste Zeile in loop()? Ohne sie liest die Bibliothek den Pin nie.
- Hat Ihr Modul einen Pull-up-Widerstand statt eines Pull-down? Dann ändern Sie den Code in ezButton button(BUTTON_PIN, EXTERNAL_PULLUP);
- Beobachten Sie den Seriellen Monitor, während Sie drücken. Keine Zeile dort bedeutet, dass es an der Verdrahtung liegt, nicht am Code.
Die Türklingel klingelt von selbst, obwohl niemand da ist.
Der OUT-Draht ist locker, sodass der Pin Störungen auffängt. Stecken Sie den Draht richtig ein. Ein Modul mit eigenem Widerstand sollte das bei korrekter Verdrahtung nie tun.
Ein Druck sendet zwei oder drei Fotos.
Erhöhen Sie DEBOUNCE_TIME von 50 auf 150.
Die LED blinkt nach jedem Druck fünfmal.
Fünf schnelle Blinker bedeuten, dass das Foto nicht gesendet werden konnte. Lesen Sie den Seriellen Monitor:
- Telegram did not answer at all bedeutet, dass das Foto gesendet wurde, aber nichts zurückkam. Prüfen Sie Ihre Internetverbindung und versuchen Sie es mit einem Handy-Hotspot, da manche Netzwerke Telegram blockieren.
- Sending stopped after ... bytes bedeutet, dass das WLAN mittendrin abgebrochen ist. Stellen Sie das Board näher an den Router.
- Cannot connect to Telegram bedeutet, dass überhaupt kein Internet vorhanden ist.
- Unauthorized bedeutet, dass Ihr Bot-Token falsch ist.
- chat not found bedeutet, dass Ihre Chat-ID falsch ist.
Der Serielle Monitor zeigt Forbidden: bot can't initiate conversation with a user.
Sie haben Ihrem Bot nie geschrieben. Öffnen Sie Telegram, suchen Sie Ihren Bot und senden Sie ihm eine beliebige Nachricht. Drücken Sie dann RESET auf dem Board.
Die LED leuchtet nie auf.
Der Code verwendet die LED auf dem Board. Nicht jedes Board hat eine. Wenn Ihres keine hat, schließen Sie Ihre eigene LED mit einem 220-Ohm-Widerstand an GPIO21 an und ändern Sie die Zeile in #define LED_PIN 21.
Der Link in der Nachricht öffnet nichts.
- Lassen Sie PUBLIC_ADDRESS leer und versuchen Sie es erneut zu Hause, im selben WLAN wie das Board. Das muss zuerst funktionieren.
- Ihr Handy muss im WLAN sein, nicht in den mobilen Daten. Eine private Adresse wie 192.168.0.2 existiert außerhalb Ihres Hauses nicht.
- Geben Sie http:// ein, nicht https://. Das Board verwendet kein https.
Der Link funktioniert zu Hause, aber nicht außerhalb.
Das ist bei leerem PUBLIC_ADDRESS normal. Damit er von überall funktioniert, benötigen Sie eine Portweiterleitung und einen DDNS-Namen. Lesen Sie oben Der Live-Video-Link.
Ich habe die Portweiterleitung eingerichtet, und es funktioniert immer noch nicht.
- Geben Sie dem Board in Ihrem Router eine feste Adresse, sonst zeigt die Weiterleitung nach einem Stromausfall auf das falsche Gerät.
- Manche Internetanbieter geben Ihnen eine Adresse, die mit anderen Häusern geteilt wird (CGNAT). Dann kann eine Portweiterleitung überhaupt nicht funktionieren. Fragen Sie Ihren Anbieter nach einer echten öffentlichen Adresse.
- Testen Sie über mobile Daten, nicht über Ihr WLAN zu Hause. Viele Router können ihre eigene öffentliche Adresse nicht von innen öffnen.
Das Live-Video stoppt nach einer Minute.
Das ist Absicht. Während jemand zuschaut, kann das Board den Taster nicht erkennen. Laden Sie die Seite neu, um erneut zuzuschauen, oder ändern Sie #define STREAM_SECONDS 60.
Der Klingeltaster tut nichts, während jemand das Video ansieht.
Das Board kann nur eine Sache gleichzeitig tun. Schließen Sie die Video-Seite, und der Taster funktioniert wieder. Das ist auch der Grund, warum das Video nach einer Minute von selbst stoppt.
Das Foto zeigt den Besucher von unten, oder sein Kopf ist abgeschnitten.
Verschieben Sie die Kamera. Eine Türklingelkamera sollte etwa 150 cm über dem Boden sitzen, sodass sie auf ein Gesicht und nicht auf eine Brust schaut.
Das Foto ist am Abend dunkel.
Die Kamera kann im Dunkeln nicht sehen. Siehe das Tutorial ESP32 S3 Kamera - Blitz-LED für Nachtfotos hinzufügen. Ein Licht an der Tür ist auch freundlich für den Besucher.
Das Foto dauert lange.
Verwenden Sie eine kleinere Bildgröße. FRAMESIZE_VGA (640 × 480) ist etwa halb so groß wie SVGA.
Der Serielle Monitor zeigt nach den Boot-Meldungen nichts an.
Wenn Ihr USB-Kabel im Anschluss mit der Bezeichnung UART steckt, stellen Sie USB CDC On Boot auf Disabled. Wenn es im Anschluss mit der Bezeichnung USB steckt, stellen Sie es auf Enabled.
Anwendungen
Ein Taster, eine Kamera und eine Nachricht. Diese kleine Idee passt an viele Orte. Hier sind praktische Projekte, die Sie mit diesem Code bauen können:
- Video-Türklingel für Ihr Haus: Sehen Sie den Besucher auf Ihrem Handy, von überall.
- Türklingel für eine gehörlose Person: Das Foto und die Handy-Benachrichtigung ersetzen den Ton.
- Empfangsklingel im Büro: Ein Besucher klingelt, und die richtige Person sieht, wer es ist.
- Klingel für Werkstatt oder Garage: Erfahren Sie, dass jemand an der Hintertür ist, während eine Maschine laut ist.
- Hilfe-Taster für ältere Menschen: Ein Druck sendet ein Foto des Raumes an ein Familienmitglied.
- Klingel für Hotel oder Gästezimmer: Der Besitzer sieht den Gast, ohne zur Tür zu gehen.
- Lieferklingel im Lager: Der Fahrer klingelt, und das Büro sieht den Lkw.
- Service-Taster im Geschäft: Ein Kunde bittet um Hilfe, und ein Foto zeigt, wo er steht.
- Eingang von Schule oder Verein: Führen Sie eine Fotoaufzeichnung von jeder Person, die geklingelt hat.
- Fotobox-Taster: Drücken Sie, um Ihr eigenes Bild aufzunehmen und es auf Ihr Handy zu bekommen.
Video Tutorial
Wir erwägen die Erstellung von Video-Tutorials. Wenn Sie Video-Tutorials für wichtig halten, abonnieren Sie bitte unseren YouTube-Kanal , um uns zu motivieren, die Videos zu erstellen.
Sehen Sie sich unten die Schritt-für-Schritt-Videoanleitung für dieses ESP32 S3 Projekt an.
Herausforderungen
- Einsteiger: Ändern Sie den Text Somebody is at the door! in Ihre eigene Nachricht, zum Beispiel den Namen Ihres Hauses.
- Fortgeschritten: Fügen Sie einen Summer hinzu, der im Haus einen Ton erzeugt, wenn der Taster gedrückt wird, sodass Sie die Klingel sowohl hören als auch sehen.
- Profi: Speichern Sie zusätzlich jedes Foto auf der microSD-Karte, damit Sie eine Aufzeichnung aller Besucher behalten, auch wenn das Internet ausfällt. Siehe das Tutorial ESP32 S3 Kamera - Foto auf SD-Karte speichern, wenn die Tür geöffnet wird.

