Dans cet article, je vais vous montrer comment faire envoyer un message Telegram par un ESP32 à l’application Telegram sur votre téléphone mobile ou votre ordinateur. Nous ajouterons également un capteur infrarouge passif (PIR) à l’ESP32, qui pourra alors être utilisé pour envoyer une notification d’alarme en cas de détection de mouvement.
Pièces requises
Voici les composants nécessaires. Pour ce projet, j’ai utilisé une ancienne carte ESP32, qui n’est plus commercialisée mais que vous pouvez encore trouver à très bas prix. Cependant, n’importe quelle autre ESP32 fonctionnera tout aussi bien.
J’ai listé deux types de capteurs de mouvement. Si vous voulez un capteur de petite taille, optez pour l’AM312. Mais si vous souhaitez détecter le mouvement uniquement la nuit, choisissez le HC-SR501, car il peut facilement être équipé d’un capteur de lumière et offre une plus grande distance de détection.

ESP32 lite

Câble USB de données

Jeu de fils Dupont

Plaque d’essai (breadboard)

Capteur de mouvement

Capteur de mouvement PIR HC-SR501
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Telegram Messenger
Telegram est une application de messagerie basée sur le cloud. Vous pouvez facilement l’installer sur votre smartphone (Android et iPhone) ou votre ordinateur (PC, Mac et Linux). Elle est totalement gratuite et ne comporte pas de publicités gênantes.
Elle permet d’envoyer des messages, photos, vidéos, notes vocales, fichiers, et de passer des appels vocaux ou vidéo. Une caractéristique remarquable est son système de stockage cloud, qui vous permet d’accéder à vos conversations depuis plusieurs appareils sans interruption. Telegram supporte aussi les grands groupes de discussion, les chaînes publiques et les bots, ce qui en fait un choix populaire pour la communication personnelle et communautaire.
Comparé à WhatsApp ou Signal,Telegram est généralement plus flexible et adapté aux développeurs. WhatsApp est chiffré de bout en bout par défaut et largement utilisé, mais offre un support limité pour les bots et moins d’options d’automatisation. Signal est le plus sécurisé en termes de confidentialité, mais ne dispose pas des API et systèmes de bots qui rendent Telegram adapté à l’intégration matérielle. Pour recevoir des messages d’un ESP32, Telegram est la plateforme la plus simple à utiliser grâce à son API Bot bien documentée, qui permet à l’ESP32 d’envoyer des messages via HTTPS avec une configuration minimale.
Installer Telegram
L’installation de Telegram est simple. Il suffit d’aller sur votre Google Play ou App Store, de télécharger et d’installer l’application Telegram. Vous pouvez aussi l’installer sur Windows en tant qu’application de bureau.

Créer un Bot Telegram
Pour recevoir les messages envoyés par un ESP32 sur votre application Telegram, il faut d’abord créer un Bot. Les bots sont des applications tierces qui fonctionnent à l’intérieur de Telegram. Les utilisateurs peuvent interagir avec eux en envoyant des messages, commandes et requêtes inline.
Nous allons utiliser le bot BotFather pour créer un nouveau bot qui recevra nos messages. Ouvrez Telegram sur votre téléphone et cherchez “botfather”. Cliquez ensuite sur le bot BotFather comme montré ci-dessous ou ouvrez le lien t.me/botfather.

Assurez-vous de choisir le bon bot. Il existe des bots aux noms similaires à éviter. Cherchez cette image pour être sûr ou utilisez le link fourni :

Si vous sélectionnez et cliquez sur le bot BotFather, le message suivant devrait apparaître. Appuyez sur le bouton /start (marqué en rouge) :

Tapez ensuite /newbot et suivez les instructions pour créer votre bot. Vous devez fournir un nom, par exemple « My_ESP32_receiver » et un nom d’utilisateur qui doit se terminer par ‘bot’, par exemple « My_ESP32_receiver_bot ».

Beaucoup de noms sont déjà pris, vous devrez probablement essayer plusieurs fois avant d’en trouver un disponible. Une fois votre bot créé, vous verrez un message avec un lien pour accéder au bot et le token du bot.
Le token du bot est une chaîne ressemblant à ceci : 1234567811:fakeIodw9023sjjoj982qe23dSSDCDDDSSxx mais sera différente pour votre bot. Veillez à bien sauvegarder ce token – nous en aurons besoin plus tard. Le mieux est de le copier sur votre téléphone et de vous l’envoyer par email.

Obtenir l’ID utilisateur Telegram
Ensuite, nous devons obtenir notre ID utilisateur Telegram et pour cela nous utiliserons un autre bot. Ouvrez Telegram et cherchez “IDBot” ou ouvrez ce lien t.me/myidbot :

Vous recevrez un message expliquant ce que fait ce bot. Répondez en tapant /getid. Vous recevrez en retour votre ID utilisateur, par exemple ‘7221435846’. Comme précédemment, assurez-vous de bien sauvegarder cet ID, car nous en aurons besoin plus tard.

Nous avons maintenant toutes les informations nécessaires. Dans la section suivante, nous écrirons le code qui envoie un message de l’ESP32 à votre bot.
Code pour envoyer des messages Telegram
Nous allons utiliser la UniversalTelegramBot Library pour envoyer simplement des messages Telegram depuis l’ESP32. Pour installer cette bibliothèque, ouvrez le LIBRARY MANAGER de l’Arduino IDE, cherchez ‘UniversalTelegramBot’ puis cliquez sur le bouton INSTALL. Après une installation réussie, vous devriez voir la bibliothèque installée :

Envoyer un message simple
Dans ce premier exemple de code, nous envoyons un message simple et fixe à notre bot Telegram en test. Voici le code complet. Jetez-y un œil rapide, puis nous en discuterons en détail.
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
const char* SSID = "xxxx";
const char* PASSWORD = "xxxx";
const String BOT_TOKEN = "xxxxxxxx:xxxxxxxxxxxxxxxxxxxx";
const String CHAT_ID = "xxxx";
WiFiClientSecure client;
UniversalTelegramBot bot(BOT_TOKEN, client);
void setup() {
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(100);
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
bot.sendMessage(CHAT_ID, "Message-1", "");
}
void loop() {}
Le code commence par inclure les bibliothèques nécessaires pour la communication WiFi et Telegram :
#include <WiFi.h> #include <WiFiClientSecure.h> #include <UniversalTelegramBot.h>
Ensuite, nous définissons les constantes SSID et PASSWORD pour l’authentification WiFi, ainsi que les constantes BOT_TOKEN et CHAT_ID pour l’application Telegram. Pour CHAT_ID vous devez utiliser l’ID utilisateur obtenu via IDBot et pour BOT_TOKEN le token obtenu via BotFather pour votre bot.
const char* SSID = "xxxx"; const char* PASSWORD = "xxxx"; const String BOT_TOKEN = "xxxxxxxx:xxxxxxxxxxxxxxxxxxxx"; const String CHAT_ID = "xxxx";
Avec les constantes définies, nous créons ensuite les objets pour la communication WiFi et Telegram :
WiFiClientSecure client; UniversalTelegramBot bot(BOT_TOKEN, client);
Enfin, nous implémentons la fonctionsetup, où nous établissons d’abord la connexion WiFi. Nous configurons ensuite le certificat pour une communication Telegram sécurisée et envoyons le message ‘Message-1’ en appelant bot.sendMessage() :
void setup() {
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(100);
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
bot.sendMessage(CHAT_ID, "Message-1", "");
}
Avec ce code, à chaque redémarrage de votre ESP32, le même message ‘Message-1’ sera transmis à votre bot Telegram.
La fonction loop reste vide. Vous pourriez envoyer des messages de façon répétée ici, mais veillez à insérer un délai entre les envois, sinon votre bot Telegram sera inondé de messages !
Envoyer un message avec horodatage
Souvent, on souhaite que le message soit horodaté pour savoir quand il a été envoyé. Le code suivant est une petite extension du précédent qui ajoute un horodatage au message :
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <time.h>
const char* SSID = "xxxx";
const char* PASSWORD = "xxxx";
const String BOT_TOKEN = "xxxxxxxx:xxxxxxxxxxxxxxxxxxxx";
const String CHAT_ID = "xxxx";
WiFiClientSecure client;
UniversalTelegramBot bot(BOT_TOKEN, client);
void sendMessage() {
struct tm t;
if (getLocalTime(&t)) {
char msg[64];
strftime(msg, sizeof(msg), "Message@%H:%M:%S", &t);
bot.sendMessage(CHAT_ID, msg, "");
}
}
void setup() {
configTime(0, 0, "pool.ntp.org"); // UTC
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(100);
sendMessage();
}
void loop() { }
Les principales différences se trouvent dans la fonction sendMessage() et dans le setup. La fonction sendMessage() récupère l’heure locale, formate une chaîne avec l’horodatage et envoie le message :
void sendMessage() {
struct tm t;
if (getLocalTime(&t)) {
char msg[64];
strftime(msg, sizeof(msg), "Message@%H:%M:%S", &t);
bot.sendMessage(CHAT_ID, msg, "");
}
}
Le message ressemblera à ‘Message@12:31:00’, par exemple. Vous pouvez modifier le texte du message ou le format de l’horodatage selon vos préférences. Consultez la documentation de la fonctionstrftime.
Dans la fonction setup, nous configurons d’abord l’horloge de l’ESP32 pour récupérer l’heure via un service internet en appelant configTime(). Dans cet exemple, l’horloge est réglée sur l’heure UTC, mais vous pouvez définir votre propre fuseau horaire.
void setup() {
configTime(0, 0, "pool.ntp.org"); // UTC
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(100);
sendMessage();
}
Si vous souhaitez en savoir plus sur la synchronisation de l’horloge et les formats de chaînes temporelles, consultez les tutoriels How to synchronize ESP32 clock with SNTP server et peut-être Digital Clock on e-Paper Display.
Ensuite, nous configurons le certificat pour une communication Telegram sécurisée et établissons la connexion WiFi. Enfin, nous envoyons le message en appelant sendMessage().
Avec ce code, vous recevrez un nouveau message horodaté à chaque redémarrage de votre ESP32.
Envoyer un message d’alerte de mouvement
Dans le dernier exemple de code, nous enverrons un message d’alerte à notre bot Telegram si notre ESP32 détecte un mouvement. Cela nécessite de connecter un capteur de mouvement à l’ESP32. L’image suivante montre comment connecter le capteur PIR AM312 à l’ESP32 lite :

Commencez par connecter la broche moins (-) de l’AM312 à la broche de masse (G) de l’ESP32 et la broche plus (+) à la broche 3V. J’ai connecté la broche signal (s) de l’AM312 à la broche 17, mais vous pouvez utiliser presque n’importe quelle autre broche. Veillez simplement à adapter le code ci-dessous en conséquence.
Si vous souhaitez en savoir plus sur l’activation par mouvement, consultez nos tutoriels How to Build a Motion Activated Night Light et How to use HC-SR501 PIR Motion Sensor with Arduino.
Le code suivant envoie un message d’alerte horodaté lorsque le capteur PIR connecté à l’ESP32 détecte un mouvement, puis attend une heure avant de pouvoir déclencher une nouvelle alerte :
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <time.h>
const char* SSID = "xxxx";
const char* PASSWORD = "xxxx";
const String BOT_TOKEN = "xxxxxxxx:xxxxxxxxxxxxxxxxxxxx";
const String CHAT_ID = "xxxx";
const int PIR_PIN = 17;
const int WAIT_TIME = 60 * 60 * 1000; // wait one hour
WiFiClientSecure client;
UniversalTelegramBot bot(BOT_TOKEN, client);
void sendMessage() {
struct tm t;
if (getLocalTime(&t)) {
char msg[128];
strftime(msg, sizeof(msg), "Alert @ %Y-%m-%d %H:%M:%S", &t);
bot.sendMessage(CHAT_ID, msg, "");
}
}
void setup() {
pinMode(PIR_PIN, INPUT);
configTime(0, 0, "pool.ntp.org"); // UTC
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED) delay(100);
}
void loop() {
if (digitalRead(PIR_PIN) == HIGH) {
sendMessage();
delay(WAIT_TIME);
}
}
Le code est très similaire aux exemples précédents. La seule vraie différence se trouve dans la fonctionloop, où nous vérifions maintenant si le capteur PIR détecte un mouvement. Si c’est le cas, nous envoyons le message d’alerte puis attendons le temps défini par WAIT_TIME pour éviter des déclenchements trop fréquents.
Vous pouvez modifier la constantePIR_PINpour connecter le capteur à une autre broche, et la constante WAIT_TIME pour changer le temps d’attente minimum entre deux alertes. Ne rendez pas WAIT_TIME trop court, sinon votre téléphone risque d’être submergé de messages.
Conclusion
Dans cet article, vous avez appris comment envoyer un message à l’application Telegram sur votre téléphone mobile depuis un ESP32.
Nous avons aussi connecté un capteur PIR à l’ESP32 pour envoyer des messages d’alerte en cas de détection de mouvement. Vous pourriez combiner cette fonction avec un système de caméra pour être notifié quand vérifier le flux ou les enregistrements de surveillance. Consultez les tutoriels Surveillance Camera with ESP32-CAM, Take Photos with ESP32-CAMetMotion Activated ESP32-CAM pour apprendre à construire un tel système.
Si vous souhaitez non seulement recevoir des notifications mais aussi contrôler l’ESP32, par exemple pour allumer des lumières en envoyant des messages Telegram, jetez un œil au tutoriel Control ESP32 from Telegram.
Si vous avez des questions, n’hésitez pas à les poser dans la section commentaires.
Bon bricolage ; )

