Caméra ESP32 S3 - Envoyer une photo par email quand un mouvement est détecté

Ce tutoriel vous explique comment faire une caméra ESP32 S3 qui vous envoie un email avec une photo quand quelqu'un passe devant elle. Un capteur de mouvement PIR surveille la pièce, la caméra prend la photo, et l'ESP32 S3 l'envoie directement dans votre boîte mail. Vous n'avez besoin ni d'un compte Telegram, ni d'un service cloud, ni d'une adresse IP publique.

ESP32 S3 Camera - Send Photo to Email When Motion Detected

Ce que vous allez construire :

  1. Une caméra ESP32 S3 avec un capteur de mouvement PIR
  2. Un email avec la photo dans le message, chaque fois que le capteur voit un mouvement
  3. Un temps de silence, pour qu'un seul visiteur ne remplisse pas votre boîte mail
  4. Une caméra que tout le monde peut lire, car tout le monde a une adresse email

Matériel nécessaire

1×ESP32 S3 N16R8 OV5640 Camera
1×Alternativement: ESP32 S3 N16R8 OV2640 Camera
1×Câble USB Type-A vers Type-C (pour PC USB-A)
1×Câble USB Type-C vers Type-C (pour PC USB-C)
1×Capteur de mouvement HC-SR501
1×Fils de connexion
1×Optionnel: Connecteur d'alimentation DC
1×Recommandé: Screw Terminal Expansion Board for ESP32 S3
1×Recommandé: Breakout Expansion Board for ESP32 S3
1×Recommandé: Power Splitter for ESP32 S3

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

※ Note:

La carte caméra ESP32 S3 a 40 broches, mais le bornier à vis et la carte d'extension ont 44 broches. Elles fonctionnent quand même ensemble. Placez la carte caméra au centre de la carte 44 broches, pour que 2 broches restent libres du côté gauche et 2 broches restent libres du côté droit.

Le bornier à vis vous permet de connecter des fils avec un tournevis, sans soudure. La carte d'extension vous donne des connecteurs faciles pour une breadboard.

Email ou Telegram ?

Les deux envoient la photo sur votre téléphone. Ils sont bons dans des domaines différents :

EmailTelegram
Travail de configurationCréer un mot de passe d'applicationCréer un bot et trouver un ID de chat
Vitesse5 à 15 secondes2 à 4 secondes
Qualité de la photoTaille complète, affichée dans le messageTelegram peut la rendre plus petite
Garde les anciennes photosOui, votre boîte mail garde toutOui, mais le chat devient long
Fonctionne pour tout le mondeOui, tout le monde a un emailSeulement les personnes qui utilisent Telegram
Taille du codePlus grande, elle a besoin d'une bibliothèquePlus petite

L'email est le meilleur choix quand vous voulez la photo en taille complète et un historique que vous pouvez rechercher plus tard. Voir aussi le tutoriel Caméra ESP32 S3 - Envoyer une photo sur Telegram lors d'une détection de mouvement.

À propos du mot de passe d'application

Votre mot de passe Gmail normal ne fonctionne pas ici. Google le bloque pour les petits appareils. Vous devez créer un mot de passe spécial à 16 lettres, appelé un mot de passe d'application.

  • Créez un nouveau compte Gmail seulement pour vos projets. N'utilisez pas le compte avec lequel vous lisez vos vrais emails.
  • Connectez-vous au nouveau compte.
  • Allez sur votre compte Google.
  • Ouvrez la section Sécurité.
Gmail security
  • Activez la validation en 2 étapes. Sans elle, Google ne vous laisse pas créer de mot de passe d'application.
  • Ouvrez la page des mots de passe d'application Google et créez un nouveau mot de passe d'application. Vous pouvez lui donner n'importe quel nom, par exemple ESP32 S3 Camera.
Google App Passwords
  • Cliquez sur le bouton Créer. Google affiche 16 lettres en quatre groupes :
Gmail App Passwords
  • Gardez ces 16 lettres. Vous en aurez besoin dans le code à l'étape suivante.
abcd efgh ijkl mnop

※ Note:

Écrivez les 16 lettres sans espaces dans le code : abcdefghijklmnop

※ Note:

Google change l'apparence de ces pages de temps en temps. Si vous ne trouvez pas "App Passwords" avec les étapes ci-dessus, cherchez sur internet "How to get Google App Passwords" pour voir la méthode la plus récente.

※ Note:

Un mot de passe d'application donne accès à toute la boîte mail de ce compte. C'est pourquoi nous utilisons un nouveau compte seulement pour les projets. Gardez le mot de passe secret, et ne le mettez jamais sur un site web ou sur GitHub. Vous pouvez le supprimer à tout moment sur la même page Google, et l'ESP32 S3 arrête simplement d'envoyer.

Vous utilisez une autre entreprise d'email ? Alors changez seulement ces deux lignes :

EntrepriseServeur SMTPPort
Gmailsmtp.gmail.com465
Outlook / Hotmailsmtp.office365.com587
Yahoosmtp.mail.yahoo.com465

À propos du capteur de mouvement PIR

Un capteur de mouvement PIR voit la chaleur d'un corps humain. PIR signifie "Passive InfraRed" (infrarouge passif). Quand un corps chaud bouge devant lui, la broche OUT passe à HIGH.

PIR Motion Sensor HC-SR501

Pourquoi ce projet utilise un capteur

Le mouvement est trouvé par le capteur PIR, pas par la caméra. Cela compte, car un capteur PIR répond seulement à la chaleur d'un corps. Une personne ou un animal le déclenche. Une lampe qui s'allume, un nuage qui passe devant le soleil, ou un rideau qui bouge dans le vent ne le déclenche pas.

C'est pourquoi un capteur vous envoie beaucoup moins d'emails pour rien.

Façon de trouver le mouvementCe qui le déclenchePièce supplémentaireFausses alertes
Capteur PIR (ce tutoriel)La chaleur d'un corpsUn capteurPresque aucune
La caméra qui se regarde elle-mêmeTout changement dans l'imageAucuneLampes, nuages, vent, sauf si vous travaillez contre eux

Voulez-vous trouver le mouvement sans aucun capteur, en utilisant seulement les images de la caméra ? Voir le tutoriel Caméra ESP32 S3 - Détecter le mouvement sans capteur. Cette méthode n'a besoin d'aucune pièce supplémentaire, et elle voit aussi des choses froides comme un colis ou une voiture, que le capteur PIR ne voit jamais. Le prix est plus de code, et plus de travail pour ignorer la lumière et le vent.

※ Note:

Voulez-vous le meilleur des deux ? Utilisez le capteur et l'image ensemble, et envoyez l'email seulement quand les deux sont d'accord. Alors un corps chaud doit être présent et quelque chose doit vraiment avoir changé dans l'image.

Spécifications clés

ÉlémentValeur
Alimentation5V
Sortie3.3V HIGH quand il voit un mouvement, LOW quand il ne voit rien
Distance3 à 7 mètres (vous pouvez la changer)
Angleenviron 110°
Temps de préchauffage30 à 60 secondes après la mise sous tension

Le capteur a deux petites vis oranges. Tournez la vis de délai de temps complètement vers la gauche, pour que la sortie reste HIGH seulement environ 3 secondes.

Pour plus de détails sur le capteur de mouvement, voir le tutoriel ESP32 S3 - Capteur de mouvement.

Schéma de câblage entre le capteur de mouvement PIR et l'ESP32 S3

Connectez le capteur de mouvement PIR à votre ESP32 S3 avec trois fils de raccordement.

ESP32 S3 PIR Motion Sensor Email Wiring Diagram

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Broche du capteur PIRBroche ESP32 S3
VCC5V
GNDGND
OUTGPIO21

Notes de sécurité

Le capteur PIR a besoin de 5V sur sa broche VCC, pas de 3.3V. Avec 3.3V, il semble fonctionner, mais il donne de mauvais signaux. Sa broche OUT donne 3.3V, ce qui est correct pour l'ESP32 S3.

La caméra utilise les GPIO4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17 et 18. N'utilisez pas ces broches pour le capteur. Le GPIO21 est libre, nous l'utilisons donc.

Installer la bibliothèque ESP Mail Client

La bibliothèque ESP Mail Client parle au serveur d'email pour vous.

  1. Ouvrez l'Arduino IDE.
  2. Cliquez sur l'icône Libraries dans la barre de gauche.
  3. Tapez ESP Mail Client dans la zone de recherche.
  4. Trouvez la bibliothèque de Mobizt et cliquez sur INSTALL.
  • Search for ESP Mail Client created by Mobizt and click the Install button.
∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 Dev Module
Library Manager
Type:
All
Topic:
All
ESP Mail Client by Mobizt
The library also supported other Arduino devices using Clients interfaces e.g. WiFiClient, EthernetClient, and GSMClient. More info
3.4.21
INSTALL
Newbiely.ino
···
1 void setup() {
Output
Serial Monitor
Ln 1, Col 1
ESP32S3 Dev Module on COM15
1

Réglages de l'Arduino IDE pour la caméra ESP32 S3

La caméra ne fonctionne pas avec les réglages par défaut de l'Arduino IDE. Vous devez changer certains éléments dans le menu Tools avant de téléverser le code.

Élément du menu ToolsSélectionnez ceci
BoardESP32S3 Dev Module
Flash Size16MB (128Mb)
PSRAMOPI PSRAM
Partition SchemeHuge APP (3MB No OTA/1MB SPIFFS)
CPU Frequency240MHz (WiFi)
USB ModeHardware CDC and JTAG
Upload ModeUART0 / Hardware CDC
Upload Speed921600
USB CDC On BootEnabled

※ Note:

Partition Scheme doit être Huge APP pour ce projet. La bibliothèque d'email est grande, et le code ne rentre pas dans la partition normale.

Comment envoyer une photo par email

  • Incluez la bibliothèque en haut de votre code.
#include <ESP_Mail_Client.h> SMTPSession smtp;
  • Mettez votre compte email dans un Session_Config.
Session_Config config; config.server.host_name = "smtp.gmail.com"; config.server.port = 465; config.login.email = SENDER_EMAIL; config.login.password = SENDER_PASSWORD; // the 16-letter app password

※ Note:

Le serveur d'email a aussi besoin de la bonne heure, sinon il refuse le message. Le code demande l'heure à un serveur NTP pour vous avec config.time.ntp_server.

  • Écrivez le message.
SMTP_Message message; message.sender.name = "ESP32 S3 Camera"; message.sender.email = SENDER_EMAIL; message.subject = "Motion detected!"; message.addRecipient("Me", RECEIVER_EMAIL); // Plain text, for old email programs that show no pictures message.text.content = "The camera saw a movement.";

Dans l'email, pas en dessous

Il y a deux façons de mettre une photo dans un email, et elles ont l'air très différentes quand le message arrive :

FaçonMéthode dans le codeÀ quoi ça ressemble
Pièce jointemessage.addAttachment(att);Une petite boîte grise de fichier sous le texte. Vous devez cliquer dessus pour voir la photo.
Dans l'emailmessage.addInlineImage(att);La photo est grande, dans le message lui-même. Vous la voyez tout de suite.

Pour une caméra de sécurité, dans l'email est bien mieux. Vous ouvrez le message sur votre téléphone et vous voyez le visiteur immédiatement, sans avoir à cliquer.

Deux choses sont nécessaires pour cela :

  • Le corps de l'email doit être en HTML, pas en texte simple
  • Le nom dans <img src="..."> doit correspondre au nom de fichier de l'image
Photo Inside the Email

※ Note:

Vous voulez les deux, pour pouvoir aussi enregistrer facilement le fichier ? Alors ajoutez la même image deux fois, une fois avec addInlineImage() et une fois avec addAttachment().

  • Écrivez le corps de l'email en HTML, et mettez-y un <img>.
message.html.content = "<div style=\"font-family:sans-serif\">" "<h2>Motion detected!</h2>" "<p>The camera saw a movement. This is what it looked like:</p>" "<img src=\"photo.jpg\" style=\"width:100%;max-width:640px\">" "</div>"; message.html.charSet = "utf-8";
  • Mettez la photo dans l'email avec addInlineImage(). La photo vient directement de la mémoire, elle n'a donc jamais besoin d'être enregistrée d'abord sur une carte.
SMTP_Attachment att; att.descr.filename = "photo.jpg"; att.descr.mime = "image/jpeg"; att.descr.transfer_encoding = Content_Transfer_Encoding::enc_base64; att.blob.data = fb->buf; att.blob.size = fb->len; message.addInlineImage(att);

※ Note:

Le nom dans src="photo.jpg" doit être exactement le même que att.descr.filename. C'est ainsi que le programme d'email sait quelle image appartient à quel endroit. Changez l'un des deux et vous obtenez une boîte vide au lieu de la photo.

※ Note:

blob signifie "les données sont déjà en mémoire". La caméra vous donne fb->buf et fb->len, et la bibliothèque envoie exactement ces octets.

  • Connectez-vous et envoyez.
if (!smtp.connect(&config)) { Serial.printf("Cannot connect. Reason: %s\n", smtp.errorReason().c_str()); return false; } MailClient.sendMail(&smtp, &message); smtp.closeSession();

※ Note:

Appelez toujours smtp.closeSession(). Si vous laissez la connexion ouverte, le serveur d'email refuse bientôt les nouveaux messages.

Code ESP32 S3

Changez votre WiFi, votre adresse email et votre mot de passe d'application en haut du code. Le temps de silence est de 60 secondes, car un email prend plus de temps qu'un message de chat. Pour le changer, changez la ligne #define QUIET_TIME 60000.

/* * Ce code ESP32 S3 a été développé par newbiely.fr * Ce code ESP32 S3 est mis à disposition du public sans aucune restriction. * Pour des instructions complètes et des schémas de câblage, veuillez visiter: * https://newbiely.fr/tutorials/esp32-s3/esp32-s3-camera-send-photo-to-email-when-motion-detected */ #include <WiFi.h> #include <ESP_Mail_Client.h> #include "esp_camera.h" const char *WIFI_SSID = "YOUR_WIFI_SSID"; // CHANGE IT const char *WIFI_PASSWORD = "YOUR_WIFI_PASSWORD"; // CHANGE IT #define SMTP_HOST "smtp.gmail.com" #define SMTP_PORT 465 #define SENDER_EMAIL "your_email@gmail.com" // CHANGE IT #define SENDER_PASSWORD "your_16_letter_app_password" // CHANGE IT #define RECEIVER_EMAIL "your_email@gmail.com" // CHANGE IT #define PIR_PIN 21 // the PIR motion sensor is connected to GPIO21 #define QUIET_TIME 60000 // wait 60 seconds before the next email (60000 milliseconds) // Camera pins of the ESP32-S3-N16R8 camera board. // The same pins work for the OV2640, OV3660 and OV5640 versions. #define PWDN_GPIO_NUM -1 #define RESET_GPIO_NUM -1 #define XCLK_GPIO_NUM 15 #define SIOD_GPIO_NUM 4 #define SIOC_GPIO_NUM 5 #define Y9_GPIO_NUM 16 #define Y8_GPIO_NUM 17 #define Y7_GPIO_NUM 18 #define Y6_GPIO_NUM 12 #define Y5_GPIO_NUM 10 #define Y4_GPIO_NUM 8 #define Y3_GPIO_NUM 9 #define Y2_GPIO_NUM 11 #define VSYNC_GPIO_NUM 6 #define HREF_GPIO_NUM 7 #define PCLK_GPIO_NUM 13 SMTPSession smtp; int lastPirState = LOW; unsigned long lastSendTime = 0; // Returns the name of the camera sensor that is installed on the board const char *getSensorName(int pid) { switch (pid) { case OV2640_PID: return "OV2640 (2 MP, max UXGA 1600x1200)"; case OV3660_PID: return "OV3660 (3 MP, max QXGA 2048x1536)"; case OV5640_PID: return "OV5640 (5 MP, max QSXGA 2592x1944)"; default: return "Unknown sensor"; } } bool initCamera() { camera_config_t config; config.ledc_channel = LEDC_CHANNEL_0; config.ledc_timer = LEDC_TIMER_0; config.pin_d0 = Y2_GPIO_NUM; config.pin_d1 = Y3_GPIO_NUM; config.pin_d2 = Y4_GPIO_NUM; config.pin_d3 = Y5_GPIO_NUM; config.pin_d4 = Y6_GPIO_NUM; config.pin_d5 = Y7_GPIO_NUM; config.pin_d6 = Y8_GPIO_NUM; config.pin_d7 = Y9_GPIO_NUM; config.pin_xclk = XCLK_GPIO_NUM; config.pin_pclk = PCLK_GPIO_NUM; config.pin_vsync = VSYNC_GPIO_NUM; config.pin_href = HREF_GPIO_NUM; config.pin_sccb_sda = SIOD_GPIO_NUM; config.pin_sccb_scl = SIOC_GPIO_NUM; config.pin_pwdn = PWDN_GPIO_NUM; config.pin_reset = RESET_GPIO_NUM; config.xclk_freq_hz = 20000000; config.pixel_format = PIXFORMAT_JPEG; config.frame_size = FRAMESIZE_SVGA; // 800x600 - small, so the email is sent quickly config.jpeg_quality = 12; // 0 to 63, a lower number means a better image config.fb_count = 1; config.fb_location = CAMERA_FB_IN_DRAM; config.grab_mode = CAMERA_GRAB_WHEN_EMPTY; if (psramFound()) { config.fb_location = CAMERA_FB_IN_PSRAM; config.jpeg_quality = 10; config.fb_count = 2; config.grab_mode = CAMERA_GRAB_LATEST; } else { config.frame_size = FRAMESIZE_QVGA; Serial.println("WARNING: PSRAM not found. Please set PSRAM to OPI PSRAM in the Tools menu."); } esp_err_t err = esp_camera_init(&config); if (err != ESP_OK) { Serial.printf("Camera init failed with error 0x%x\n", err); return false; } sensor_t *s = esp_camera_sensor_get(); Serial.printf("Camera sensor: %s\n", getSensorName(s->id.PID)); // Each sensor needs slightly different settings switch (s->id.PID) { case OV2640_PID: s->set_vflip(s, 0); s->set_hmirror(s, 0); break; case OV3660_PID: s->set_vflip(s, 1); // the OV3660 image is upside down by default s->set_brightness(s, 1); // make the image a little brighter s->set_saturation(s, -2); // make the colors a little softer break; case OV5640_PID: s->set_vflip(s, 0); s->set_hmirror(s, 0); break; default: break; } return true; } // Sends one photo as an email attachment bool sendPhotoByEmail(camera_fb_t *fb) { Session_Config config; config.server.host_name = SMTP_HOST; config.server.port = SMTP_PORT; config.login.email = SENDER_EMAIL; config.login.password = SENDER_PASSWORD; config.login.user_domain = ""; // The email server needs the correct time, so we ask an NTP server config.time.ntp_server = "pool.ntp.org,time.nist.gov"; config.time.gmt_offset = 0; config.time.day_light_offset = 0; SMTP_Message message; message.sender.name = "ESP32 S3 Camera"; message.sender.email = SENDER_EMAIL; message.subject = "Motion detected!"; message.addRecipient("Me", RECEIVER_EMAIL); // Plain text, for old email programs that show no pictures message.text.content = "The camera saw a movement. Open this email in a program that shows pictures."; message.text.charSet = "utf-8"; // The email body. The name inside src="..." must be the same as the // file name of the picture below. That is how the two find each other. message.html.content = "<div style=\"font-family:sans-serif\">" "<h2>Motion detected!</h2>" "<p>The camera saw a movement. This is what it looked like:</p>" "<img src=\"photo.jpg\" style=\"width:100%;max-width:640px\">" "</div>"; message.html.charSet = "utf-8"; // The photo goes INSIDE the email, not under it as a small file. // addInlineImage() is what makes the difference, not addAttachment(). SMTP_Attachment att; att.descr.filename = "photo.jpg"; att.descr.mime = "image/jpeg"; att.descr.transfer_encoding = Content_Transfer_Encoding::enc_base64; att.blob.data = fb->buf; att.blob.size = fb->len; message.addInlineImage(att); Serial.println("Connecting to the email server..."); if (!smtp.connect(&config)) { Serial.printf("Cannot connect. Reason: %s\n", smtp.errorReason().c_str()); return false; } if (!MailClient.sendMail(&smtp, &message)) { Serial.printf("Cannot send the email. Reason: %s\n", smtp.errorReason().c_str()); smtp.closeSession(); return false; } smtp.closeSession(); Serial.println("The email was sent"); return true; } void takeAndSendPhoto() { camera_fb_t *fb = esp_camera_fb_get(); if (!fb) { Serial.println("Photo capture failed"); return; } Serial.printf("Photo taken: %u bytes\n", fb->len); sendPhotoByEmail(fb); esp_camera_fb_return(fb); // give the memory back to the camera } void setup() { Serial.begin(115200); delay(1000); pinMode(PIR_PIN, INPUT); if (!initCamera()) { Serial.println("Stopped"); while (true) delay(1000); } WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.print("Connecting to WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.print("Connected. IP address: "); Serial.println(WiFi.localIP()); MailClient.networkReconnect(true); smtp.debug(0); // change to 1 to see every step of the email server Serial.println("The PIR sensor is warming up. Please wait 30 seconds and do not move."); delay(30000); Serial.println("Ready. Waiting for motion..."); } void loop() { int pirState = digitalRead(PIR_PIN); // LOW to HIGH means the sensor has just seen a movement if (lastPirState == LOW && pirState == HIGH) { if (millis() - lastSendTime >= QUIET_TIME) { Serial.println("Motion detected!"); takeAndSendPhoto(); lastSendTime = millis(); } } lastPirState = pirState; }

Étapes rapides

  • Nouveau sur ESP32 S3 ? Complétez d'abord notre guide ESP32 S3 - Premiers pas.
  • Créez votre mot de passe d'application Google. Voir les étapes ci-dessus.
  • Installez la bibliothèque ESP Mail Client.
  • Débranchez le câble USB, puis câblez le capteur PIR comme dans le tableau ci-dessus.
  • Tournez la vis de délai de temps du capteur complètement vers la gauche.
  • Copiez le code ci-dessus et collez-le dans l'Arduino IDE.
  • Changez WIFI_SSID, WIFI_PASSWORD, SENDER_EMAIL, SENDER_PASSWORD et RECEIVER_EMAIL.

※ Note:

  • SENDER_EMAIL doit être un compte Gmail, le nouveau que vous avez créé pour vos projets.
  • SENDER_PASSWORD est le mot de passe d'application à 16 lettres, pas le mot de passe du compte.
  • RECEIVER_EMAIL peut être n'importe quel type d'adresse email. Cela peut aussi être la même adresse, pour que la caméra s'écrive à elle-même.
  • Changez les réglages dans le menu Tools. Voir le tableau ci-dessus.
  • Compilez et téléversez le code sur la carte ESP32 S3 en cliquant sur le bouton Upload dans l'Arduino IDE.
Arduino IDE Upload Code
  • Ouvrez le Serial Monitor dans l'Arduino IDE.
How to open serial monitor on Arduino IDE
  • Appuyez une fois sur le bouton RESET, puis quittez la pièce pendant 30 secondes.
  • Revenez et marchez devant la caméra. L'email arrive en quelques secondes.
ESP32 S3 Camera Photo in Email

Serial Monitor

Les relevés suivants ont été capturés en 2026 :

∞
Newbiely | Arduino IDE 2.3.8
──
☐
✕
File
Edit
Sketch
Tools
Help
ESP32S3 Dev Module
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'ESP32S3 Dev Module' on 'COM15')
New Line
9600 baud
[2026-09-28 10:00:01] Camera sensor: OV5640 (5 MP, max QSXGA 2592x1944) [2026-09-28 10:00:01] Connecting to WiFi... [2026-09-28 10:00:04] Connected. IP address: 192.168.0.2 [2026-09-28 10:00:04] The PIR sensor is warming up. Please wait 30 seconds and do not move. [2026-09-28 10:00:34] Ready. Waiting for motion... [2026-09-28 10:01:12] Motion detected! [2026-09-28 10:01:12] Photo taken: 51353 bytes [2026-09-28 10:01:12] Connecting to the email server... [2026-09-28 10:01:20] The email was sent
Ln 11, Col 1
ESP32S3 Dev Module on COM15
2

※ Note:

Vous voulez voir chaque étape que fait le serveur d'email ? Changez smtp.debug(0) en smtp.debug(1). Le Serial Monitor affiche alors toute la conversation, ce qui aide beaucoup quand quelque chose ne va pas.

Dépannage

Le Serial Monitor affiche Cannot connect avec Username and Password not accepted.

Vous avez utilisé votre mot de passe Gmail normal. Créez un mot de passe d'application et utilisez celui-là, sans espaces.

Le Serial Monitor affiche une erreur de certificat ou de temps.

La carte a la mauvaise heure, elle ne peut donc pas vérifier le serveur. Assurez-vous que la carte accède à internet, car l'heure vient d'un serveur NTP.

L'email arrive, mais la photo est une boîte vide.

Le nom dans src="photo.jpg" et le nom dans att.descr.filename ne sont pas les mêmes. Ils doivent correspondre exactement.

La photo est toujours un petit fichier sous le texte.

Vous avez utilisé addAttachment(). Changez-le en addInlineImage(), et assurez-vous que le corps est message.html.content, pas seulement message.text.content.

L'email n'arrive jamais, mais le Serial Monitor dit qu'il a été envoyé.

Regardez dans le dossier Spam. Le premier message d'un nouvel expéditeur y atterrit souvent. Marquez-le comme "non spam" une fois, et les suivants iront dans votre boîte de réception.

Le Serial Monitor affiche Connection error avec Outlook.

Outlook utilise le port 587, pas 465. Changez SMTP_PORT en 587.

Le téléversement échoue avec "text section exceeds available space".

Réglez Partition Scheme sur Huge APP dans le menu Tools. La bibliothèque d'email est grande.

Le capteur voit un mouvement tout le temps.

Attendez une minute complète après le démarrage, tournez la vis de sensibilité un peu vers la gauche, et vérifiez que VCC est bien sur 5V.

Je reçois trop d'emails.

Augmentez QUIET_TIME de 60000 à 300000 (cinq minutes).

Le Serial Monitor n'affiche rien après les messages de démarrage.

Si votre câble USB est dans le port nommé UART, réglez USB CDC On Boot sur Disabled. S'il est dans le port nommé USB, réglez-le sur Enabled.

Applications

L'email n'a besoin d'aucune application spéciale, donc n'importe qui peut recevoir les photos, sur n'importe quel téléphone et n'importe quel ordinateur. Voici des projets pratiques que vous pouvez construire avec ce code :

  1. Caméra de sécurité domestique avec alertes email : Recevez une photo en taille complète dans votre boîte mail quand quelqu'un entre.
  2. Registre de livraison de colis : Gardez un email daté pour chaque livraison à votre porte.
  3. Bureau après les heures : Envoyez les photos vers une boîte mail partagée que plusieurs personnes peuvent lire.
  4. Surveillance de maison de vacances : Surveillez une maison vide, et gardez chaque photo comme registre.
  5. Caméra faune sauvage avec rapports : Recevez un email quand des animaux entrent dans votre jardin la nuit.
  6. Portail de ferme et grange : Surveillez un lieu loin de votre maison, et gardez les emails comme preuve.
  7. Registre d'alarme de magasin : Chaque photo a une date et une heure, donc cela fonctionne comme un simple journal de bord.
  8. Surveillance de la chambre de bébé : Recevez une photo quand votre enfant sort de son lit.
  9. Atelier et salle des machines : Sachez qui est entré dans la pièce pendant que les machines fonctionnaient.
  10. Preuve pour assurance : Une boîte mail pleine de photos datées est facile à rechercher et facile à montrer plus tard.

Vidéo

Regardez la vidéo pas à pas de ce projet ESP32 S3 ci-dessous.

Défis

  1. Débutant : Changez le sujet et le texte de l'email avec vos propres mots.
  2. Intermédiaire : Envoyez l'email à deux personnes en même temps avec un second message.addRecipient().
  3. Avancé : Enregistrez aussi chaque photo sur la carte microSD, pour garder une copie même quand internet est en panne. Voir le tutoriel Caméra ESP32 S3 - Enregistrer une photo sur carte SD lors d'une détection de mouvement.

Commentaires

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !