ESP32 S3 Kamera - Foto per E-Mail senden, wenn Bewegung erkannt wird
Dieses Tutorial zeigt Ihnen, wie Sie eine ESP32 S3 Kamera bauen, die Ihnen eine E-Mail mit einem Foto sendet, wenn jemand davor vorbeigeht. Ein PIR-Bewegungssensor überwacht den Raum, die Kamera nimmt das Bild auf, und der ESP32 S3 sendet es direkt in Ihr Postfach. Sie brauchen kein Telegram-Konto, keinen Cloud-Dienst und keine öffentliche IP-Adresse.

Was Sie bauen werden:
- Eine ESP32 S3 Kamera mit einem PIR-Bewegungssensor
- Eine E-Mail mit dem Foto direkt in der Nachricht, jedes Mal, wenn der Sensor eine Bewegung erkennt
- Eine Ruhezeit, damit ein Besucher Ihr Postfach nicht füllt
- Eine Kamera, die jeder nutzen kann, weil jeder eine E-Mail-Adresse hat
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 auf der linken Seite 2 Pins frei bleiben und auf der rechten Seite 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 Breadboard.
E-Mail oder Telegram?
Beide senden das Foto an Ihr Handy. Sie sind in unterschiedlichen Dingen gut:
| Telegram | ||
|---|---|---|
| Einrichtungsaufwand | Ein App-Passwort erstellen | Einen Bot erstellen und eine Chat-ID ermitteln |
| Geschwindigkeit | 5 bis 15 Sekunden | 2 bis 4 Sekunden |
| Fotoqualität | Volle Größe, direkt in der Nachricht angezeigt | Telegram verkleinert es möglicherweise |
| Behält alte Fotos | Ja, Ihr Postfach behält alles | Ja, aber der Chat wird lang |
| Funktioniert für jeden | Ja, jeder hat eine E-Mail-Adresse | Nur für Leute, die Telegram nutzen |
| Codegröße | Größer, es braucht eine Bibliothek | Kleiner |
E-Mail ist die bessere Wahl, wenn Sie das Bild in voller Größe und ein Protokoll möchten, das Sie später durchsuchen können. Siehe auch das Tutorial ESP32 S3 Kamera - Foto an Telegram senden, wenn Bewegung erkannt wird.
Überblick über the App Password
Ihr normales Gmail-Passwort funktioniert hier nicht. Google blockiert es für kleine Geräte. Sie müssen ein spezielles Passwort mit 16 Buchstaben erstellen, ein sogenanntes App-Passwort.
- Erstellen Sie ein neues Gmail-Konto nur für Ihre Projekte. Verwenden Sie nicht das Konto, mit dem Sie Ihre echten E-Mails lesen.
- Melden Sie sich bei dem neuen Konto an.
- Gehen Sie zu Ihrem Google-Konto.
- Öffnen Sie den Bereich Sicherheit.

- Aktivieren Sie die Bestätigung in zwei Schritten. Ohne sie lässt Google Sie kein App-Passwort erstellen.
- Öffnen Sie die Seite Google App-Passwörter und erstellen Sie ein neues App-Passwort. Sie können ihm einen beliebigen Namen geben, zum Beispiel ESP32 S3 Camera.

- Klicken Sie auf die Schaltfläche Erstellen. Google zeigt 16 Buchstaben in vier Gruppen an:

- Bewahren Sie diese 16 Buchstaben auf. Sie brauchen sie im nächsten Schritt im Code.
※ Notiz:
Schreiben Sie die 16 Buchstaben ohne Leerzeichen in den Code: abcdefghijklmnop
※ Notiz:
Google ändert das Aussehen dieser Seiten von Zeit zu Zeit. Wenn Sie "App-Passwörter" mit den obigen Schritten nicht finden können, suchen Sie im Internet nach "How to get Google App Passwords", um den neuesten Weg zu sehen.
※ Notiz:
Ein App-Passwort gibt Zugriff auf das gesamte Postfach dieses Kontos. Deshalb verwenden wir ein neues Konto nur für Projekte. Halten Sie das Passwort geheim und stellen Sie es niemals auf eine Website oder auf GitHub. Sie können es jederzeit auf derselben Google-Seite löschen, und der ESP32 S3 hört dann einfach auf zu senden.
Verwenden Sie einen anderen E-Mail-Anbieter? Dann ändern Sie nur diese beiden Zeilen:
| Anbieter | SMTP-Server | Port |
|---|---|---|
| Gmail | smtp.gmail.com | 465 |
| Outlook / Hotmail | smtp.office365.com | 587 |
| Yahoo | smtp.mail.yahoo.com | 465 |
Überblick über PIR Motion Sensor
Ein PIR-Bewegungssensor erkennt die Wärme eines menschlichen Körpers. PIR steht für "Passive InfraRed" (passives Infrarot). Wenn sich ein warmer Körper vor ihm bewegt, geht der OUT-Pin auf HIGH.

Warum dieses Projekt einen Sensor verwendet
Die Bewegung wird vom PIR-Sensor erkannt, nicht von der Kamera. Das ist wichtig, weil ein PIR-Sensor nur auf die Wärme eines Körpers reagiert. Eine Person oder ein Tier löst ihn aus. Eine Lampe, die angeht, eine Wolke, die vor der Sonne vorbeizieht, oder ein Vorhang, der sich im Wind bewegt, löst ihn nicht aus.
Deshalb sendet Ihnen ein Sensor viel weniger E-Mails über nichts.
| Art der Bewegungserkennung | Was sie auslöst | Zusätzliches Teil | Fehlalarme |
|---|---|---|---|
| PIR-Sensor (dieses Tutorial) | Die Wärme eines Körpers | Ein Sensor | Fast keine |
| Die Kamera beobachtet sich selbst | Jede Änderung im Bild | Keines | Lampen, Wolken, Wind, sofern Sie nicht dagegen vorgehen |
Möchten Sie Bewegung ganz ohne Sensor erkennen, nur mit den Bildern der Kamera? Siehe das Tutorial ESP32 S3 Kamera - Bewegung ohne Sensor erkennen. Dieser Weg braucht kein zusätzliches Teil und erkennt auch kalte Dinge wie ein Paket oder ein Auto, die ein PIR-Sensor nie erkennt. Der Preis ist mehr Code und mehr Arbeit, um Licht und Wind zu ignorieren.
※ Notiz:
Möchten Sie das Beste aus beiden Welten? Verwenden Sie den Sensor und das Bild zusammen und senden Sie die E-Mail nur, wenn beide übereinstimmen. Dann muss ein warmer Körper da sein und sich im Bild wirklich etwas verändert haben.
Wichtige technische Daten
| Punkt | Wert |
|---|---|
| Stromversorgung | 5V |
| Ausgang | 3,3V HIGH, wenn er eine Bewegung erkennt, LOW, wenn er nichts erkennt |
| Reichweite | 3 bis 7 Meter (einstellbar) |
| Winkel | etwa 110° |
| Aufwärmzeit | 30 bis 60 Sekunden nach dem Einschalten |
Der Sensor hat zwei kleine orangefarbene Schrauben. Drehen Sie die Schraube für die Verzögerungszeit ganz nach links, sodass der Ausgang nur etwa 3 Sekunden lang HIGH bleibt.
Weitere Details zum Bewegungssensor finden Sie im Tutorial ESP32 S3 - Bewegungssensor.
Schaltplan zwischen PIR-Bewegungssensor und ESP32 S3
Schließen Sie den PIR-Bewegungssensor mit drei Jumperkabeln an Ihren ESP32 S3 an.

Dieses Bild wurde mit Fritzing erstellt. Klicken Sie, um das Bild zu vergrößern.
| PIR-Sensor-Pin | ESP32 S3 Pin |
|---|---|
| VCC | 5V |
| GND | GND |
| OUT | GPIO21 |
Sicherheitshinweise
Der PIR-Sensor braucht 5V an seinem VCC-Pin, nicht 3,3V. Mit 3,3V scheint er zu funktionieren, liefert aber falsche Signale. Sein OUT-Pin liefert 3,3V, was für den ESP32 S3 korrekt ist.
Die Kamera verwendet GPIO4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17 und 18. Verwenden Sie diese Pins nicht für den Sensor. GPIO21 ist frei, also verwenden wir ihn.
ESP Mail Client Bibliothek installieren
Die Bibliothek ESP Mail Client kommuniziert für Sie mit dem E-Mail-Server.
- Öffnen Sie die Arduino IDE.
- Klicken Sie auf das Symbol Libraries in der linken Leiste.
- Geben Sie ESP Mail Client in das Suchfeld ein.
- Suchen Sie die Bibliothek von Mobizt und klicken Sie auf INSTALL.
- Search for ESP Mail Client created by Mobizt 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 Auswahl treffen |
|---|---|
| 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 |
※ Notiz:
Partition Scheme muss für dieses Projekt Huge APP sein. Die E-Mail-Bibliothek ist groß, und der Code passt nicht in die normale Partition.
So senden Sie ein Foto per E-Mail
- Binden Sie die Bibliothek oben in Ihrem Code ein.
- Tragen Sie Ihr E-Mail-Konto in eine Session_Config ein.
※ Notiz:
Der E-Mail-Server braucht außerdem die richtige Uhrzeit, sonst lehnt er die Nachricht ab. Der Code fragt mit config.time.ntp_server für Sie einen NTP-Zeitserver ab.
- Schreiben Sie die Nachricht.
In der E-Mail, nicht darunter
Es gibt zwei Möglichkeiten, ein Foto in eine E-Mail einzufügen, und sie sehen beim Empfang der Nachricht sehr unterschiedlich aus:
| Weg | Methode im Code | Wie es aussieht |
|---|---|---|
| Anhang | message.addAttachment(att); | Ein kleines graues Dateifeld unter dem Text. Sie müssen darauf klicken, um das Foto zu sehen. |
| In der E-Mail | message.addInlineImage(att); | Das Foto ist groß, direkt in der Nachricht. Sie sehen es sofort. |
Für eine Sicherheitskamera ist in der E-Mail viel besser. Sie öffnen die Nachricht auf Ihrem Handy und sehen den Besucher sofort, ohne zu tippen.
Dafür sind zwei Dinge nötig:
- Der Inhalt der E-Mail muss HTML sein, kein reiner Text
- Der Name in <img src="..."> muss mit dem Dateinamen des Bildes übereinstimmen

※ Notiz:
Möchten Sie beides, damit Sie die Datei auch leicht speichern können? Dann fügen Sie dasselbe Bild zweimal hinzu, einmal mit addInlineImage() und einmal mit addAttachment().
- Schreiben Sie den Inhalt der E-Mail in HTML und fügen Sie ein <img> ein.
- Fügen Sie das Foto mit addInlineImage() in die E-Mail ein. Das Foto kommt direkt aus dem Speicher, sodass es nie zuerst auf einer Karte gespeichert werden muss.
※ Notiz:
Der Name in src="photo.jpg" muss genau gleich sein wie att.descr.filename. So weiß das E-Mail-Programm, welches Bild an welche Stelle gehört. Ändern Sie einen davon, und Sie erhalten ein leeres Feld statt des Fotos.
※ Notiz:
blob bedeutet "die Daten sind bereits im Speicher". Die Kamera liefert Ihnen fb->buf und fb->len, und die Bibliothek sendet genau diese Bytes.
- Verbinden und senden.
※ Notiz:
Rufen Sie immer smtp.closeSession() auf. Wenn Sie die Verbindung offen lassen, lehnt der E-Mail-Server bald neue Nachrichten ab.
ESP32 S3 Code
Ändern Sie oben im Code Ihr WLAN, Ihre E-Mail-Adresse und Ihr App-Passwort. Die Ruhezeit beträgt 60 Sekunden, weil eine E-Mail länger dauert als eine Chatnachricht. Um sie zu ändern, ändern Sie die Zeile #define QUIET_TIME 60000.
Schnelle Schritte
- Neu beim ESP32 S3? Arbeiten Sie zuerst unsere Anleitung Erste Schritte mit dem ESP32 S3 durch.
- Erstellen Sie Ihr Google-App-Passwort. Siehe die Schritte oben.
- Installieren Sie die Bibliothek ESP Mail Client.
- Ziehen Sie das USB-Kabel ab und verdrahten Sie dann den PIR-Sensor wie in der Tabelle oben.
- Drehen Sie die Schraube für die Verzögerungszeit des Sensors ganz nach links.
- Kopieren Sie den obigen Code und fügen Sie ihn in die Arduino IDE ein.
- Ändern Sie WIFI_SSID, WIFI_PASSWORD, SENDER_EMAIL, SENDER_PASSWORD und RECEIVER_EMAIL.
※ Notiz:
- SENDER_EMAIL muss ein Gmail-Konto sein, das neue, das Sie für Ihre Projekte erstellt haben.
- SENDER_PASSWORD ist das App-Passwort mit 16 Buchstaben, nicht das Passwort des Kontos.
- RECEIVER_EMAIL kann jede Art von E-Mail-Adresse sein. Es kann auch dieselbe Adresse sein, sodass die Kamera an sich selbst schreibt.
- Ä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 und verlassen Sie dann den Raum für 30 Sekunden.
- Kommen Sie zurück und gehen Sie vor der Kamera vorbei. Die E-Mail kommt in wenigen Sekunden an.

Serieller Monitor
Die folgenden Messwerte wurden im Jahr 2026 aufgezeichnet:
※ Notiz:
Möchten Sie jeden Schritt sehen, den der E-Mail-Server macht? Ändern Sie smtp.debug(0) auf smtp.debug(1). Der Serielle Monitor zeigt dann die ganze Kommunikation, was sehr hilft, wenn etwas schiefgeht.
Fehlerbehebung
Der Serielle Monitor zeigt Cannot connect mit Username and Password not accepted.
Sie haben Ihr normales Gmail-Passwort verwendet. Erstellen Sie ein App-Passwort und verwenden Sie dieses, ohne Leerzeichen.
Der Serielle Monitor zeigt einen Zertifikats- oder Zeitfehler.
Das Board hat die falsche Uhrzeit, daher kann es den Server nicht prüfen. Stellen Sie sicher, dass das Board das Internet erreicht, denn die Uhrzeit kommt von einem NTP-Server.
Die E-Mail kommt an, aber das Foto ist ein leeres Feld.
Der Name in src="photo.jpg" und der Name in att.descr.filename sind nicht gleich. Sie müssen genau übereinstimmen.
Das Foto ist immer noch eine kleine Datei unter dem Text.
Sie haben addAttachment() verwendet. Ändern Sie es auf addInlineImage() und stellen Sie sicher, dass der Inhalt message.html.content ist, nicht nur message.text.content.
Die E-Mail kommt nie an, aber der Serielle Monitor meldet, dass sie gesendet wurde.
Sehen Sie im Spam-Ordner nach. Die erste Nachricht von einem neuen Absender landet oft dort. Markieren Sie sie einmal als "kein Spam", und die nächsten landen in Ihrem Posteingang.
Der Serielle Monitor zeigt Connection error mit Outlook.
Outlook verwendet Port 587, nicht 465. Ändern Sie SMTP_PORT auf 587.
Das Hochladen schlägt mit "text section exceeds available space" fehl.
Stellen Sie Partition Scheme im Menü Tools auf Huge APP. Die E-Mail-Bibliothek ist groß.
Der Sensor erkennt ständig eine Bewegung.
Warten Sie nach dem Start eine volle Minute, drehen Sie die Empfindlichkeits-Schraube ein wenig nach links und prüfen Sie, ob VCC an 5V liegt.
Ich bekomme zu viele E-Mails.
Erhöhen Sie QUIET_TIME von 60000 auf 300000 (fünf Minuten).
Der Serielle Monitor zeigt nach den Startmeldungen nichts an.
Wenn Ihr USB-Kabel im Anschluss mit dem Namen UART steckt, stellen Sie USB CDC On Boot auf Disabled. Wenn es im Anschluss mit dem Namen USB steckt, stellen Sie es auf Enabled.
Anwendungen
E-Mail braucht keine spezielle Anwendung, daher kann jeder die Fotos empfangen, auf jedem Handy und auf jedem Computer. Hier sind praktische Projekte, die Sie mit diesem Code bauen können:
- Haussicherheitskamera mit E-Mail-Benachrichtigung: Erhalten Sie ein Foto in voller Größe in Ihrem Postfach, wenn jemand eintritt.
- Protokoll für Paketlieferungen: Bewahren Sie für jede Lieferung an Ihrer Tür eine datierte E-Mail auf.
- Büro nach Feierabend: Senden Sie die Fotos an ein gemeinsames Firmenpostfach, das mehrere Personen lesen können.
- Ferienhausbeobachter: Überwachen Sie ein leeres Haus und bewahren Sie jedes Foto als Nachweis auf.
- Tierkamera mit Berichten: Erhalten Sie eine E-Mail, wenn nachts Tiere in Ihren Garten kommen.
- Hoftor und Scheune: Überwachen Sie einen Ort weit weg von Ihrem Haus und bewahren Sie die E-Mails als Beweis auf.
- Alarmprotokoll für Läden: Jedes Foto hat ein Datum und eine Uhrzeit, daher funktioniert es wie ein einfaches Logbuch.
- Babyzimmer-Beobachter: Erhalten Sie ein Foto, wenn Ihr Kind aus dem Bett steigt.
- Werkstatt und Maschinenraum: Erfahren Sie, wer den Raum betreten hat, während die Maschinen liefen.
- Nachweis für die Versicherung: Ein Postfach voller datierter Fotos lässt sich leicht durchsuchen und später leicht vorzeigen.
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 Betreff und den Text der E-Mail in Ihre eigenen Worte.
- Fortgeschrittene: Senden Sie die E-Mail mit einem zweiten message.addRecipient() gleichzeitig an zwei Personen.
- Profis: Speichern Sie jedes Foto zusätzlich auf der microSD-Karte, sodass Sie auch bei einem Internetausfall eine Kopie behalten. Siehe das Tutorial ESP32 S3 Kamera - Foto auf SD-Karte speichern, wenn Bewegung erkannt wird.