Caméra ESP32 S3 - Économiser la batterie avec le mode veille profonde
Tous les autres projets de caméra ont besoin d'un câble USB en permanence. Ce tutoriel est différent. L'ESP32 S3 dort et n'utilise presque pas d'énergie. Quand le capteur de mouvement détecte quelqu'un, la carte se réveille, prend une photo, l'enregistre sur la carte microSD, puis se rendort. Comme la carte n'est éveillée que pendant environ deux secondes à chaque fois, elle consomme très peu d'énergie, ce qui vous permet de l'alimenter avec une batterie et de placer la caméra à un portail, dans un jardin, ou sur une boîte à colis.

Ce que vous allez construire :
- Une caméra qui dort jusqu'à ce qu'il se passe quelque chose
- Une photo enregistrée sur la carte microSD à chaque réveil
- Un compteur qui survit à la veille profonde, afin que les numéros de photo ne recommencent jamais à 1
- Une caméra qui fonctionne sur batterie ou sur batterie externe, sans câble
Matériel requis
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
※ Note:
La carte caméra ESP32 S3 possède 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, afin qu'il reste 2 broches libres du côté gauche et 2 broches 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 à broches faciles à utiliser pour une breadboard.
Comment ça fonctionne
Tous les autres projets de caméra tournent en boucle : la carte est éveillée en permanence, et elle demande encore et encore si quelque chose s'est produit. C'est simple, mais cela consomme de l'énergie toute la journée pour rien.
Ce projet renverse l'idée. La carte dort, et le capteur la réveille.
Voici toute la vie de la caméra :
| Étape | Ce qui se passe | Durée | Énergie |
|---|---|---|---|
| 1 | La carte dort. Seule une petite partie à l'intérieur surveille une broche. | Des heures, ou des jours | Presque aucune |
| 2 | Quelqu'un passe. Le capteur PIR met la broche GPIO21 à HIGH. | Immédiatement | Aucune, le capteur n'est pas la carte |
| 3 | Ce HIGH réveille la carte. Elle redémarre depuis le début, comme après un RESET. | Environ 1 seconde | Pleine |
| 4 | La caméra et la carte mémoire démarrent. La carte prend une photo et l'écrit sur la carte mémoire. | Environ 1 seconde | Pleine |
| 5 | La carte éteint la caméra et la carte mémoire, puis se rendort. | Immédiatement | Retour à presque aucune |

Ainsi, la carte n'est éveillée que pendant environ deux secondes pour chaque visiteur. Tout le reste du temps, elle dort. C'est toute l'astuce, et c'est pourquoi cette caméra peut fonctionner sans câble.
※ Note:
Le capteur PIR ne dort jamais. Il surveille la pièce en permanence, et il n'utilise qu'un tout petit courant pour le faire. Le capteur est la partie qui décide quand la carte est nécessaire.
Trois choses le font fonctionner
| Quoi | Pourquoi c'est nécessaire |
|---|---|
| esp_sleep_enable_ext0_wakeup() | Indique à la carte quelle broche peut la réveiller, et à quel niveau |
| RTC_DATA_ATTR | Garde le compteur de photos en vie pendant le sommeil. Les variables normales perdent leur valeur. |
| esp_camera_deinit() et SD_MMC.end() | Éteignent la caméra et la carte mémoire, afin qu'elles ne consomment rien pendant le sommeil |
Chacun de ces points est expliqué ci-dessous.
À propos de la veille profonde
La veille profonde (deep sleep) éteint presque tout à l'intérieur de l'ESP32 S3 : les deux processeurs, le WiFi et la mémoire. Seule une toute petite partie reste éveillée, et son seul rôle est de surveiller une broche.
| État | Ce qui fonctionne | Courant utilisé |
|---|---|---|
| Normal, WiFi activé | Tout | environ 150 mA |
| Normal, WiFi désactivé | Deux processeurs | environ 40 mA |
| Veille profonde | Presque rien | moins de 1 mA |
※ Note:
Ces chiffres sont indicatifs, pas une promesse. Votre carte, votre capteur et votre batterie externe changent tous le résultat. De nombreuses batteries externes s'éteignent d'elles-mêmes quand le courant est très faible, ce qui est le problème le plus courant dans les projets sur batterie.
La carte redémarre à chaque fois
C'est la partie qui surprend tout le monde : après une veille profonde, la carte ne continue pas là où elle s'était arrêtée. Elle redémarre depuis le tout début, exactement comme après un RESET. setup() s'exécute à nouveau, et loop() ne s'exécute jamais.
Donc tout le programme vit à l'intérieur de setup() :
Comment se souvenir de quelque chose pendant le sommeil
Les variables normales perdent leur valeur pendant la veille profonde. Les variables marquées RTC_DATA_ATTR ne la perdent pas, car elles vivent dans la petite partie qui reste éveillée :
※ Note:
RTC_DATA_ATTR conserve la valeur pendant la veille profonde, mais pas en cas de coupure d'alimentation ou de RESET. Le code vérifie aussi sur la carte les noms de fichiers libres, afin qu'aucune photo ne soit jamais écrasée.
Se réveiller sur une broche
ext0 réveille la carte quand une broche atteint le niveau que vous choisissez. Le nombre 1 signifie « réveiller quand la broche est HIGH » :
※ Note:
Seules les broches GPIO0 à GPIO21 peuvent réveiller l'ESP32 S3 de la veille profonde. On les appelle broches RTC. GPIO21 en fait partie, donc cela fonctionne. Une broche comme GPIO40 ne réveillerait jamais la carte.
À propos du capteur de mouvement PIR
Un capteur de mouvement PIR détecte la chaleur d'un corps humain. Sa broche OUT passe à HIGH quand quelque chose de chaud bouge devant lui, et c'est ce HIGH qui réveille l'ESP32 S3.

Le capteur possède deux petites vis orange. Tournez la vis du délai entièrement vers la gauche, afin que la sortie reste à HIGH pendant environ 3 secondes seulement. Pour plus de détails, consultez le tutoriel ESP32 S3 - Capteur de mouvement.
※ Note:
Le capteur PIR lui-même ne dort jamais. Il utilise environ 50 µA, ce qui est très peu, et il doit rester éveillé, car c'est lui qui réveille la carte.
Schéma de câblage entre le capteur de mouvement PIR et l'ESP32 S3

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.
| Broche du capteur PIR | Broche ESP32 S3 |
|---|---|
| VCC | 5V |
| GND | GND |
| OUT | GPIO21 |
Insérez ensuite la carte microSD dans le slot de la carte.
Consignes de sécurité
Le capteur PIR a besoin de 5V sur sa broche VCC, pas de 3,3V. Sa broche OUT donne 3,3V, ce qui convient pour l'ESP32 S3.
La broche OUT doit aller sur GPIO21, car seules les broches GPIO0 à GPIO21 peuvent réveiller la carte de la veille profonde.
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 Tools | Sélectionnez ceci |
|---|---|
| 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 |
Comment programmer la caméra qui dort
- Découvrez pourquoi la carte s'est réveillée. C'est utile, car le premier démarrage n'est pas un réveil.
- Laissez un instant à la caméra. Les premières photos après un démarrage sont toujours trop sombres, car la caméra n'a pas encore réglé la lumière.
※ Note:
C'est l'erreur la plus courante dans les caméras à veille profonde : la photo est noire. La caméra a besoin d'environ une demi-seconde de lumière avant de produire une bonne première image.
- Éteignez la caméra et la carte mémoire avant de dormir, afin qu'elles ne consomment aucune énergie.
- Maintenez la broche à un niveau bas pendant le sommeil, afin qu'une broche flottante ne puisse pas réveiller la carte toute seule.
※ Note:
Sans cela, une broche non connectée capte du bruit électrique, la carte se réveille des centaines de fois, et la batterie est vide en une nuit.
- Passez en veille. Rien après cette ligne ne s'exécute jamais.
Code ESP32 S3
Les photos sont nommées wake_00001.jpg, wake_00002.jpg, et ainsi de suite. Le compteur vit dans RTC_DATA_ATTR, il continue donc de compter à travers chaque sommeil.
Étapes rapides
- Nouveau sur l'ESP32 S3 ? Suivez d'abord notre guide ESP32 S3 - Premiers pas.
- Formatez votre carte microSD en FAT32 sur votre ordinateur.
- Débranchez le câble USB. Insérez la carte dans le slot, et câblez le capteur PIR comme dans le tableau ci-dessus.
- Copiez le code ci-dessus et collez-le dans l'Arduino IDE.
- 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 Arduino IDE.

- Ouvrez le moniteur série dans Arduino IDE.

- Appuyez une fois sur le bouton RESET. La carte prend une photo puis dort.
- Agitez votre main devant le capteur. La carte se réveille, vous voyez une nouvelle ligne, puis elle se rendort.
- Quand vous êtes satisfait, débranchez le câble USB et utilisez plutôt une batterie externe.
- Astuce pro : Gardez le moniteur série ouvert pendant vos tests. C'est le seul moyen de voir que la carte se réveille vraiment.
Moniteur série
Chaque réveil affiche deux lignes. Les lectures suivantes ont été capturées en 2026 :
※ Note:
La carte n'est éveillée que pendant environ 2 secondes à chaque fois. Tout le reste du temps, elle dort et n'utilise presque rien. C'est toute l'idée de ce projet.
Comment économiser encore plus d'énergie
La batterie est utilisée de deux façons : une toute petite quantité en permanence pendant que la carte dort, et une quantité bien plus grande pendant les deux secondes de chaque photo. Il n'y a donc que deux façons d'en consommer moins :
| Quoi faire | Comment | Pourquoi ça aide |
|---|---|---|
| Rester éveillé moins longtemps | Utilisez un FRAME_SIZE plus petit, par exemple FRAMESIZE_VGA | Une photo plus petite est prise et écrite plus vite |
| Se réveiller moins souvent | Baissez la vis de sensibilité du capteur, et pointez-le loin de la rue | Chaque réveil coûte bien plus qu'une heure de sommeil |
Observez le moniteur série pour voir combien de temps votre carte est vraiment éveillée. Le temps entre Wake up number ... et Going to sleep. Bye. est la partie qui coûte de l'énergie. Tout ce qui se passe entre deux réveils est presque gratuit.
※ Note:
Nous ne disons pas ici combien de jours ou de semaines une batterie dure, car cela dépend de trop de choses : quelle batterie, son âge, la fraîcheur de la nuit, la fréquence de passage de quelqu'un, et la consommation propre de votre batterie externe. Mesurez-le chez vous, avec votre propre batterie.
※ Note:
De nombreuses batteries externes s'éteignent d'elles-mêmes quand un appareil ne prend presque aucun courant, ce qui est exactement ce que fait la veille profonde. Si votre caméra s'arrête pendant la nuit, c'est généralement la raison. Utilisez une batterie externe qui prend en charge le « mode faible courant », ou utilisez une batterie avec un support approprié.
Dépannage
La carte ne se réveille jamais.
- La broche OUT du capteur doit être sur GPIO21. Une broche au-dessus de GPIO21 ne peut pas réveiller la carte.
- Vérifiez que le capteur a bien 5V, pas 3,3V.
- Attendez une minute après le premier démarrage. Le capteur PIR est encore en train de chauffer.
La carte se réveille encore et encore alors qu'il n'y a rien devant elle.
- Le capteur est trop sensible. Tournez la vis de sensibilité un peu vers la gauche.
- Pointez le capteur loin des fenêtres, des chauffages et des climatiseurs.
Chaque photo est noire ou très sombre.
La caméra n'a pas eu le temps de régler la lumière. Augmentez WARMUP_TIME de 400 à 800, et changez la boucle de 2 à 3 photos.
Les photos s'arrêtent après quelques heures sur une batterie externe.
La batterie externe s'est éteinte elle-même, car la veille profonde prend un courant trop faible pour elle. Utilisez une batterie externe avec un mode faible courant, ou une batterie.
Le moniteur série perd la connexion après chaque sommeil.
C'est normal sur le port USB natif, car la carte disparaît quand elle dort. Utilisez le port UART pour les tests, et réglez USB CDC On Boot sur Disabled.
Les numéros recommencent à 1 après une coupure de courant.
RTC_DATA_ATTR ne survit pas à une coupure de courant. Ce n'est pas un problème : le code cherche le premier nom libre sur la carte, donc aucune photo n'est jamais écrasée.
Applications
Une caméra qui n'a besoin d'aucun câble peut aller là où les autres projets ne peuvent pas aller. Voici des projets pratiques que vous pouvez construire avec ce code :
- Caméra de piste et de faune : Placez-la dans une forêt ou un champ sans aucune alimentation.
- Caméra de boîte à colis : Une petite batterie à l'intérieur de la boîte, et aucun câble à travers le mur.
- Surveillance de portail de jardin : Surveillez un portail loin de la maison, sans câble à poser.
- Caméra de vélo et de garage : Gardez une photo de tous ceux qui s'approchent, sans travail de câblage.
- Caméra de maison de vacances : Laissez-la dans une maison vide pendant votre absence.
- Caméra de ferme et de grange : Surveillez des animaux ou une machine loin de toute prise.
- Caméra de chantier : Déplacez-la chaque jour, car il n'y a rien à brancher.
- Surveillance de ruche : Surveillez la ruche sans câble à travers le jardin.
- Caméra de voiture : Prenez une photo quand quelqu'un s'approche de votre voiture garée.
- Caméra de sécurité temporaire : Placez-la n'importe où pour un temps, puis retirez-la.
Vidéo
Regardez ci-dessous la vidéo pas à pas de ce projet ESP32 S3.
Défis
- Débutant : Changez la taille de photo de FRAMESIZE_SVGA à FRAMESIZE_UXGA et voyez de combien de temps supplémentaire la carte reste éveillée.
- Intermédiaire : Ajoutez aussi un réveil par minuterie, afin que la carte prenne également une photo chaque heure, même sans mouvement. Utilisez esp_sleep_enable_timer_wakeup().
- Avancé : Connectez le WiFi après le réveil et envoyez la photo sur Telegram, puis dormez. Observez le moniteur série et voyez de combien de temps supplémentaire la carte doit rester éveillée.