Caméra ESP32 S3 - Envoyer une photo sur Telegram lors d'une détection de mouvement
Ce tutoriel vous explique comment construire une caméra de sécurité qui envoie une photo sur votre téléphone. Un capteur de mouvement PIR surveille la pièce. Quand quelqu'un passe devant lui, l'ESP32 S3 prend une photo et vous l'envoie avec Telegram. Vous recevez la photo en quelques secondes, où que vous soyez dans le monde.

Ce que vous allez construire :
- Votre propre bot Telegram qui vous envoie des messages
- Une caméra ESP32 S3 avec un capteur de mouvement PIR
- Une photo sur votre téléphone à chaque fois que le capteur voit un mouvement
- Un temps de silence, pour que vous n'ayez pas 50 photos de la même personne
Matériel nécessaire
Ou vous pouvez acheter les kits suivants:
| 1 | × | Kit de Capteurs DIYables (18 capteurs/écrans) |
※ 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, afin que 2 broches restent libres à gauche et 2 broches restent libres à droite.
Le bornier à vis vous permet de connecter des fils avec un tournevis, sans soudure. La carte d'extension vous donne des broches faciles pour une breadboard.
À propos de Telegram
Telegram est une application de messagerie gratuite pour votre téléphone et votre ordinateur. Telegram vous permet de créer un bot. Un bot est un ami robot dans votre liste de discussions. Votre ESP32 S3 envoie la photo au bot, et le bot vous la montre.
Vous avez besoin de deux textes secrets :
| Nom | Ce que c'est | Ressemble à |
|---|---|---|
| Bot token | Le mot de passe de votre bot | 8012345678:AAHxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| Chat ID | Le numéro de votre discussion | 123456789 |
※ Note:
Ne montrez jamais votre jeton de bot à qui que ce soit, et ne le mettez jamais sur un site Web ou sur GitHub. Quelqu'un qui a votre jeton peut contrôler votre bot.
Étape 1 : Créer votre bot
- Installez Telegram sur votre téléphone, et créez un compte.
- Dans Telegram, recherchez @BotFather. Il a une coche bleue.
- Ouvrez la discussion avec BotFather et parlez-lui ainsi :
BotFather
- Copiez le jeton du bot (bot token) du dernier message et gardez-le en sécurité.
Étape 2 : Trouver votre Chat ID
- Dans Telegram, recherchez le nom de votre nouveau bot et ouvrez la discussion.
- Envoyez n'importe quel message à votre bot, par exemple hello. Cette étape est nécessaire. Telegram ne permet pas à un bot de vous écrire avant que vous ne lui ayez écrit.
ArduinoBot
- Ouvrez cette adresse dans votre navigateur Web. Mettez votre propre jeton de bot à la place de <YOUR_BOT_TOKEN> :
- Le navigateur affiche un long texte. Cherchez "chat":{"id":. Le nombre qui suit est votre Chat ID :
※ Note:
Le navigateur affiche {"ok":true,"result":[]} avec rien à l'intérieur ? Alors vous n'avez pas encore envoyé de message à votre bot. Retournez à l'étape 2, envoyez hello à votre bot, puis rechargez l'adresse.
※ Note:
Beaucoup d'autres tutoriels vous disent de demander au bot @myidbot avec le message /getid. Ce bot appartient à quelqu'un d'autre, et très souvent il ne répond pas du tout. L'adresse Web ci-dessus fonctionne toujours, car elle interroge Telegram directement.
※ Note:
Vous avez oublié l'étape 2 ? Alors l'ESP32 S3 affiche la réponse Forbidden: bot can't initiate conversation with a user dans le moniteur série. Ouvrez la discussion avec votre bot et envoyez-lui n'importe quel message, puis réessayez.
Étape 3 : Les mettre dans le code
Ouvrez le code et changez ces quatre lignes :
À propos du capteur de mouvement PIR
Un capteur de mouvement PIR détecte la chaleur d'un corps humain. PIR signifie "Passive InfraRed" (infrarouge passif). Quand un corps chaud bouge devant lui, la broche OUT passe à HIGH.

Spécifications clés
| Caractéristique | Valeur |
|---|---|
| Alimentation | 5V |
| Sortie | 3.3V HIGH quand il voit un mouvement, LOW quand il ne voit rien |
| Distance | 3 à 7 mètres (vous pouvez la changer) |
| Angle | environ 110° |
| Temps de chauffe | 30 à 60 secondes après la mise sous tension |
Le capteur a deux petites vis oranges. Tournez la vis de délai (time delay) complètement vers la gauche, pour que la sortie reste HIGH pendant environ 3 secondes seulement.
Pour plus de détails sur le capteur de mouvement, consultez le tutoriel ESP32 S3 - Capteur de mouvement. Pour enregistrer les photos sur une carte microSD au lieu de les envoyer sur Telegram, consultez le tutoriel Caméra ESP32 S3 - Enregistrer une photo sur carte SD lors d'une détection 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 connexion.

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 |
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 convient à 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. GPIO21 est libre, donc nous l'utilisons.
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.
| Tools Menu Item | Select This |
|---|---|
| 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 |
※ Note:
PSRAM doit être réglé sur OPI PSRAM, et Partition Scheme doit être réglé sur Huge APP. Changez Flash Size en premier, car la liste des options de Partition Scheme change ensuite.
Comment envoyer une photo sur Telegram
Vous n'avez besoin d'installer aucune bibliothèque. Le code communique directement avec Telegram.
- Telegram utilise https, donc nous avons besoin d'un client sécurisé.
※ Note:
setInsecure() signifie que l'ESP32 S3 ne vérifie pas réellement l'identité du serveur. Pour un petit projet personnel, c'est acceptable, et cela économise beaucoup de mémoire. La photo est quand même envoyée via une connexion chiffrée.
- Pour envoyer une photo, nous utilisons l'adresse Telegram /bot<TOKEN>/sendPhoto. La photo voyage dans un message multipart. Un message multipart a des parties, et une ligne de texte appelée boundary sépare les parties. Ce projet utilise trois parties : le Chat ID, le texte, et la photo.
※ Note:
La partie caption est le texte sous la photo dans Telegram. Changez Motion detected! par le message de votre choix.
- Le Content-Length doit être la taille de tout : la première partie, la photo, et la dernière partie.
※ Note:
Un Content-Length incorrect est l'erreur la plus courante. Telegram attend alors plus de données et ne répond jamais.
- Envoyez la photo en petits morceaux. Un gros write() échoue souvent sur une connexion sécurisée.
- Lisez la réponse. Cette partie contient un piège. Telegram répond et ferme la connexion immédiatement, donc votre code doit continuer à lire même après la fermeture de la connexion.
※ Note:
Une boucle écrite comme while (client.connected() && ...) semble correcte, mais elle est fausse. Telegram ferme la connexion très rapidement, donc client.connected() est souvent déjà à false. La boucle ne s'exécute alors jamais, et vous jetez une réponse qui est pourtant bien là. Le moniteur série indique que la photo a échoué, même quand la photo est bien arrivée sur votre téléphone.
- Quand tout va bien, la réponse de Telegram contient "ok":true.
※ Note:
Ce projet utilise une petite taille d'image (FRAMESIZE_SVGA, 800×600), car une petite photo est envoyée beaucoup plus vite. Une photo de 50 Ko prend environ 3 secondes. Une photo de 200 Ko prend environ 10 secondes.
Code ESP32 S3
Le code suivant envoie une photo sur votre discussion Telegram chaque fois que le capteur voit un mouvement. Le temps de silence est de 30 secondes. Pour le changer, changez la ligne #define QUIET_TIME 30000.
Étapes rapides
- Nouveau sur l'ESP32 S3 ? Terminez d'abord notre guide ESP32 S3 - Premiers pas.
- Créez votre bot Telegram et trouvez votre Chat ID. Voir les étapes ci-dessus.
- Débranchez le câble USB, puis câblez le capteur PIR comme dans le tableau ci-dessus.
- Tournez la vis de délai du capteur complètement vers la gauche.
- Copiez le code ci-dessus et collez-le dans l'Arduino IDE.
- Changez YOUR_WIFI_SSID, YOUR_WIFI_PASSWORD, YOUR_TELEGRAM_BOT_TOKEN et YOUR_TELEGRAM_CHAT_ID.
- Changez les réglages dans le menu Tools. Voir le tableau ci-dessus.
- Compilez et téléversez le code vers la carte ESP32 S3 en cliquant sur le bouton Upload dans l'Arduino IDE.

- Ouvrez le moniteur série dans l'Arduino IDE.

- Appuyez une fois sur le bouton RESET, puis quittez la pièce pendant 30 secondes. Le capteur chauffe.
- Revenez et passez devant la caméra.
- Regardez votre téléphone. La photo arrive dans votre discussion Telegram, avec le texte en dessous :
ArduinoBot

Moniteur série
Les relevés suivants ont été capturés en 2026 :
Dépannage
Le moniteur série affiche Forbidden: bot can't initiate conversation with a user.
Vous n'avez jamais écrit à votre bot. Ouvrez Telegram, trouvez votre bot, et envoyez-lui n'importe quel message. Puis appuyez sur RESET sur la carte.
Le moniteur série affiche Unauthorized.
Votre jeton de bot est incorrect. Recopiez-le depuis BotFather. Le jeton a deux parties reliées par : et vous avez besoin de tout le jeton.
Le moniteur série affiche chat not found.
Votre Chat ID est incorrect. Redemandez à @myidbot avec /getid. Ne mettez pas d'espaces autour du nombre.
Le moniteur série affiche Telegram did not answer at all.
La carte a envoyé la photo mais n'a rien reçu en retour. Vérifiez votre connexion Internet. Certains réseaux scolaires et d'entreprise bloquent Telegram, essayez donc le partage de connexion de votre téléphone. Si la photo arrive quand même sur votre téléphone alors que la carte dit qu'elle a échoué, votre boucle de lecture s'arrête trop tôt. Voir la remarque sur client.connected() ci-dessus.
Le moniteur série affiche Sending stopped after ... bytes.
Le WiFi a coupé pendant l'envoi de la photo. Rapprochez la carte du routeur, ou utilisez une taille d'image plus petite.
Le moniteur série affiche Cannot connect to Telegram.
- Vérifiez que votre WiFi fonctionne. L'adresse IP doit apparaître dans le moniteur série.
- Certains réseaux scolaires et d'entreprise bloquent Telegram. Essayez le partage de connexion de votre téléphone.
Telegram ne répond jamais, et la carte attend.
Le Content-Length ne correspond pas à la taille réelle. Ne changez pas les textes head et tail sans aussi changer la taille.
La photo met longtemps à arriver.
Utilisez une taille d'image plus petite. FRAMESIZE_VGA (640×480) fait environ la moitié de SVGA.
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 de photos.
Augmentez QUIET_TIME de 30000 à 60000 (une minute).
Applications
Une caméra ESP32 S3 avec un capteur de mouvement et Telegram est une caméra de sécurité complète qui coûte très peu et ne nécessite aucun paiement mensuel. Voici des projets pratiques que vous pouvez construire avec ce code :
- Caméra de sécurité WiFi pour la maison : Recevez une photo sur votre téléphone au moment où quelqu'un entre dans votre maison, votre couloir, ou votre escalier.
- Alerte de livraison de colis : Sachez immédiatement quand le livreur arrive à votre porte, et voyez le colis qui a été déposé.
- Moniteur de chambre de bébé : Recevez une photo quand votre enfant sort de son lit la nuit.
- Caméra pour animaux de compagnie, chiens et chats : Voyez ce que fait votre animal pendant que vous êtes au travail, sans payer pour une caméra en nuage.
- Surveillance de maison de vacances : Surveillez une maison vide ou une résidence secondaire depuis un autre pays.
- Alarme de garage et d'allée : Recevez une photo quand quelqu'un s'approche de votre voiture, de votre vélo, ou de votre moto.
- Bureau et magasin après les heures d'ouverture : Gardez une photo de chaque personne qui bouge à l'intérieur après la fermeture.
- Caméra de jardin et de faune : Photographiez les oiseaux, chats, renards, ou les animaux qui mangent vos légumes la nuit.
- Assistant pour personnes âgées : Sachez qu'un membre de la famille se déplace dans la maison comme d'habitude, sans caméra qui tourne toute la journée.
- Entrepôt et portail de ferme : Surveillez un endroit loin de chez vous, où un système d'alarme filaire serait trop coûteux.
Vidéo
Regardez la vidéo pas à pas pour ce projet ESP32 S3 ci-dessous.
Défis
- Débutant : Envoyez un message texte avec la photo, par exemple le temps écoulé depuis le démarrage de la carte.
- Intermédiaire : Ajoutez un interrupteur qui active et désactive l'alarme, pour que vous ne receviez pas de photos quand vous êtes à la maison.
- Avancé : Enregistrez aussi chaque photo sur la carte microSD, pour garder une copie même quand Internet est coupé.