Moniteur d’état de porte ESP8266 NodeMCU avec notifications par télégramme

Moniteur d'état de porte ESP8266 NodeMCU avec notifications par télégramme

Dans ce projet, vous allez surveiller l’état d’une porte à l’aide d’une carte ESP8266 NodeMCU et d’un interrupteur à lame magnétique. Vous recevrez un message dans votre compte Telegram chaque fois que la porte change d’état : ouverte ou fermée. Tant que vous avez accès à Internet sur votre smartphone, vous serez averti où que vous soyez. La carte ESP8266 sera programmée à l’aide d’Arduino IDE.

Moniteur d'état de porte ESP8266 NodeMCU avec notifications par télégramme Arduino IDE

Nous avons un tutoriel similaire qui envoie des e-mails au lieu de messages Telegram :

Lisez le guide ESP32 : moniteur d’état de porte avec notifications par télégramme

Aperçu du projet

Dans ce projet, nous allons créer un Telegram Bot qui enverra des messages à votre compte Telegram chaque fois qu’une porte change d’état. Pour détecter le changement, nous utiliserons un interrupteur à contact magnétique.

Un interrupteur à contact magnétique est essentiellement un interrupteur à lames enfermé dans une coque en plastique afin que vous puissiez facilement l’appliquer à une porte, une fenêtre ou un tiroir pour détecter s’il est ouvert ou fermé.

interrupteur à contact magnétique interrupteur reed

Le circuit électrique est fermé lorsqu’un aimant est à proximité de l’interrupteur-porte fermée. Lorsque l’aimant est éloigné de l’interrupteur (porte ouverte), le circuit est ouvert. Voir la figure ci-dessous.

interrupteur à lames magnétique comment je travaille

Nous pouvons connecter le commutateur Reed à un GPIO ESP8266 pour détecter les changements dans son état.

Présentation du télégramme

Télégramme Messenger est un service de messagerie instantanée et de voix sur IP basé sur le cloud. Vous pouvez facilement l’installer sur votre smartphone (Android et iPhone) ou votre ordinateur (PC, Mac et Linux). C’est gratuit et sans publicité. Telegram vous permet de créer des robots avec lesquels vous pouvez interagir.

Logo de télégramme

« Les bots sont des applications tierces qui s’exécutent dans Telegram. Les utilisateurs peuvent interagir avec les robots en leur envoyant des messages, des commandes et des requêtes en ligne. Vous contrôlez vos bots à l’aide de requêtes HTTPS vers l’API Telegram Bot« .

L’ESP8266 interagira avec le bot Telegram pour envoyer des messages à votre compte Telegram. Chaque fois que la porte change d’état, vous recevrez une notification sur votre smartphone (tant que vous avez accès à Internet).

Créer un bot de télégramme

Accédez à Google Play ou App Store, téléchargez et installez Télégramme.

Installer et télécharger Telegram

Ouvrez Telegram et suivez les étapes suivantes pour créer un Telegram Bot. Tout d’abord, recherchez « père de famille » et cliquez sur BotFather comme indiqué ci-dessous. Ou ouvrez ce lien t.me/botfather sur votre smartphone.

père de famille

La fenêtre suivante devrait s’ouvrir et vous serez invité à cliquer sur le bouton début bouton.

Telegram Démarrer BotFather pour créer un nouveau Bot

Taper /nouveaubot et suivez les instructions pour créer votre bot. Donnez-lui un nom et un nom d’utilisateur. Le mien s’appelle Capteur de porte, et le nom d’utilisateur est ESPDoorSensorBot.

Telegram BotFather Créer un nouveau bot

Si votre bot est créé avec succès, vous recevrez un message avec un lien pour accéder au bot et au jeton de bot. Enregistrez le jeton du bot car vous en aurez besoin pour que l’ESP8266 puisse interagir avec le bot.

Telegram BotFather Obtenir un jeton de bot

Envoi d’un message au bot

Cette étape est très importante. Ne le manquez pas. Sinon, le projet ne fonctionnera pas.

Vous devez envoyer un message à votre Telegram Bot à partir de votre compte Telegram avant qu’il puisse vous envoyer des messages.

1) Retournez à l’onglet chats, et dans le champ de recherche, saisissez le nom d’utilisateur de votre bot.

Télégramme à la recherche du bot ESP32

2) Sélectionnez votre bot pour démarrer une conversation.

3) Cliquez sur le lien Démarrer.

Conversation en vedette avec Telegram Bot

Et c’est tout! Vous pouvez passer à la section suivante.

Obtenez votre identifiant d’utilisateur Telegram

Pour envoyer un message à votre compte Telegram, le bot doit connaître votre identifiant utilisateur.

Dans votre compte Telegram, recherchez « monidbot » ou ouvrez ce lien t.moi/monidbot sur votre smartphone.

Telegram Obtenir un identifiant de chat avec IDBot

Démarrez une conversation avec ce bot et tapez /getid. Vous recevrez une réponse avec votre identifiant. Sauf que ID de l’utilisateur, car vous en aurez besoin plus tard dans ce didacticiel.

Telegram Get Chat ID avec IDBot getid

Préparation de l’IDE Arduino

Nous allons programmer le ESP8266 carte utilisant Arduino IDE, alors assurez-vous de l’avoir installé dans votre Arduino IDE.

Bibliothèque universelle de robots Telegram

Pour interagir avec le bot Telegram, nous utiliserons le Bibliothèque universelle de robots Telegram créé par Brian Lough qui fournit une interface simple pour l’API Telegram Bot.

Suivez les étapes suivantes pour installer la dernière version de la bibliothèque.

  1. Cliquez ici pour télécharger la bibliothèque Universal Arduino Telegram Bot.
  2. Aller à Esquisser > Inclure la bibliothèque > Ajouter.Bibliothèque ZIP...
  3. Ajoutez la bibliothèque que vous venez de télécharger.

Important: n’installez pas la bibliothèque via le gestionnaire de bibliothèque Arduino car cela pourrait installer une version obsolète.

Pour tous les détails sur la bibliothèque, consultez le Page GitHub de la bibliothèque universelle de robots Arduino Telegram.

Bibliothèque ArduinoJson

Vous devez également installer le ArduinoJson bibliothèque. Suivez les étapes suivantes pour installer la bibliothèque.

  1. Aller à Skech > Inclure la bibliothèque > Gérer les bibliothèques.
  2. Recherchez « ArduinoJson ».
  3. Installez la bibliothèque.

Nous utilisons la bibliothèque ArduinoJson version 6.15.2.

Installer dans Arduino IDE la bibliothèque ArduinoJSON

Pièces requises

Voici le matériel dont vous avez besoin pour réaliser ce projet :

Vous pouvez utiliser les liens précédents ou aller directement sur MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !

1641020444 373 Moniteur detat de porte ESP8266 NodeMCU avec notifications par telegramme

Schéma – ESP8266 avec commutateur Reed

Nous avons câblé l’interrupteur à lames à GPIO 4 (D2), mais vous pouvez le connecter à n’importe quel GPIO approprié.

Schéma de câblage ESP8266 avec commutateur Reed

Code

Copiez le croquis ci-dessous sur votre IDE Arduino. Remplacez le SSID, le mot de passe, le jeton BOT et l’ID utilisateur par vos informations d’identification.

/* 
  Rui Santos
  Complete project details at https://Raspberryme.com/esp8266-nodemcu-door-status-telegram/
  
  Permission is hereby granted, free of charge, to any person obtaining a copy
  of this software and associated documentation files.
  
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*/

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>

// Set GPIOs for LED and reedswitch
const int reedSwitch = 4;
const int led = 2; //optional

// Detects whenever the door changed state
bool changeState = false;

// Holds reedswitch state (1=opened, 0=close)
bool state;
String doorState;

// Auxiliary variables (it will only detect changes that are 1500 milliseconds apart)
unsigned long previousMillis = 0; 
const long interval = 1500;

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

// Initialize Telegram BOT
#define BOTtoken "XXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"  // your Bot Token (Get from Botfather)

// Use @myidbot to find out the chat ID of an individual or a group
// Also note that you need to click "start" on a bot before it can
// message you
#define CHAT_ID "XXXXXXXXXX"

X509List cert(TELEGRAM_CERTIFICATE_ROOT);
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);

// Runs whenever the reedswitch changes state
ICACHE_RAM_ATTR void changeDoorStatus() {
  Serial.println("State changed");
  changeState = true;
}

void setup() {
  // Serial port for debugging purposes
  Serial.begin(115200);
  configTime(0, 0, "pool.ntp.org");      // get UTC time via NTP
  client.setTrustAnchors(&cert); // Add root certificate for api.telegram.org
  

  // Read the current door state
  pinMode(reedSwitch, INPUT_PULLUP);
  state = digitalRead(reedSwitch);

  // Set LED state to match door state
  pinMode(led, OUTPUT);
  digitalWrite(led, state);
  
  // Set the reedswitch pin as interrupt, assign interrupt function and set CHANGE mode
  attachInterrupt(digitalPinToInterrupt(reedSwitch), changeDoorStatus, CHANGE);

  // Connect to Wi-Fi
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
    }
    Serial.println("");
    Serial.println("WiFi connected");  

    bot.sendMessage(CHAT_ID, "Bot started up", "");
}

void loop() {
  if (changeState){
    unsigned long currentMillis = millis();
    if(currentMillis - previousMillis >= interval) {
      previousMillis = currentMillis;
      // If a state has occured, invert the current door state   
        state = !state;
        if(state) {
          doorState = "closed";
        }
        else{
          doorState = "open";
        }
        digitalWrite(led, state);
        changeState = false;
        Serial.println(state);
        Serial.println(doorState);
        
        //Send notification
        bot.sendMessage(CHAT_ID, "The door is " + doorState, "");
    }  
  }
}

Afficher le code brut

Comment fonctionne le code

Continuez à lire pour savoir comment fonctionne le code, ou passez à la Manifestation section.

Tout d’abord, incluez les bibliothèques requises.

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
#include <ArduinoJson.h>

Réglez les GPIO pour le commutateur Reed et la LED (la LED intégrée est GPIO 2). Nous allumerons la LED embarquée lorsque la porte sera ouverte.

const int reedSwitch = 4;
const int led = 2; //optional

le changer d’état La variable booléenne indique si la porte a changé d’état.

bool changeState = false;

le Etat La variable maintiendra l’état du commutateur Reed, et le porteEtat, comme son nom l’indique, maintiendra l’état de la porte : fermée ou ouverte.

bool state;
String doorState;

Les variables de temporisation suivantes nous permettent d’anti-rebondir le commutateur. Seuls les changements survenus avec au moins 1500 millisecondes entre eux seront pris en compte.

unsigned long previousMillis = 0; 
const long interval = 1500;

Insérez votre SSID et votre mot de passe dans les variables suivantes afin que l’ESP8266 puisse se connecter à Internet.

const char* ssid = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

Insérez votre Telegram Bot Token, celui que vous avez entré cette étape.

#define BOTtoken "XXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

Insérez votre identifiant de chat, celui que vous avez obtenu dans cette étape.

#define CHAT_ID "XXXXXXXXXX"

Créez un nouveau client Wi-Fi avec WiFiClientSécurisé.

X509List cert(TELEGRAM_CERTIFICATE_ROOT);
WiFiClientSecure client;

Créez un bot avec le jeton et le client définis précédemment.

UniversalTelegramBot bot(BOTtoken, client);

le changeDoorStatus() La fonction s’exécutera chaque fois qu’un changement est détecté sur l’état de la porte. Cette fonction change simplement le changer d’état variable à vrai. Ensuite, dans le boucler(), nous gérerons ce qui se passe lorsque l’état change (inversez l’état de la porte précédent et enverrez un message à votre compte Telegram).

ICACHE_RAM_ATTR void changeDoorStatus() {
  Serial.println("State changed");
  changeState = true;
}

mettre en place()

Dans le mettre en place(), initialisez Serial Monitor à des fins de débogage :

Serial.begin(115200);

Ajoutez un certificat root pour api.telegram.org.

client.setTrustAnchors(&cert); // Add root certificate for api.telegram.org

Réglez le commutateur à lames comme SAISIR. Et enregistrez l’état actuel lorsque l’ESP8266 démarre pour la première fois.

pinMode(reedSwitch, INPUT_PULLUP);
state = digitalRead(reedSwitch);

Réglez la LED comme un SORTIR et réglez son état pour qu’il corresponde à l’état du commutateur Reed (circuit fermé et LED éteinte ; circuit ouvert et LED allumée).

pinMode(led, OUTPUT);
digitalWrite(led, state);
  • porte fermée -> l’ESP8266 lit un signal HIGH -> éteint la LED embarquée (envoie un signal HIGH*)
  • porte ouverte -> l’ESP8266 lit un signal LOW -> allume la LED embarquée (envoie un signal LOW*)

* la LED intégrée de l’ESP8266 fonctionne avec une logique inversée : envoie un signal HAUT pour l’éteindre et un signal BAS pour l’allumer.

Définir une interruption

Réglez le commutateur à lames comme une interruption.

attachInterrupt(digitalPinToInterrupt(reedSwitch), changeDoorStatus, CHANGE);

Pour définir une interruption dans l’IDE Arduino, vous utilisez le attachInterrupt() fonction, qui accepte comme arguments : la broche d’interruption GPIO, le nom de la fonction à exécuter et le mode.

Le premier argument est une interruption GPIO. Tu devrais utiliser DigitalPinToInterrupt (GPIO) pour définir le GPIO réel comme une broche d’interruption.

Le deuxième argument de la attachInterrupt() fonction est le nom de la fonction qui sera appelée à chaque fois que l’interruption est déclenchée – la routine de service d’interruption (ISR). Dans ce cas, c’est le changer l’état de la porte une fonction.

La fonction ISR doit être aussi simple que possible, afin que le processeur revienne rapidement à l’exécution du programme principal.

Le troisième argument est le mode. Nous l’avons mis à MONNAIE pour déclencher l’interruption chaque fois que la broche change de valeur – par exemple, de HAUT à BAS et de BAS à HAUT.

Pour en savoir plus sur les interruptions avec l’ESP8266, lisez le tutoriel suivant :

Initialiser le Wi-Fi

Les lignes suivantes connectent l’ESP8266 au Wi-Fi.

WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
  delay(500);
  Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");  

Envoyez un message à votre compte Telegram pour vous informer que le bot a démarré.

bot.sendMessage(CHAT_ID, "Bot started up", "");

boucler()

Dans le boucler(), nous lirons le changer d’état variable, et si un changement s’est produit, nous enverrons un message à votre compte Telegram.

Tout d’abord, vérifiez si un changement s’est produit :

if (changeState){

Ensuite, vérifiez si au moins 1500 millisecondes se sont écoulées depuis le dernier changement d’état.

if(currentMillis - previousMillis >= interval) {

Si c’est vrai, réinitialisez le minuteur et inversez l’état actuel du commutateur :

state = !state;

Si l’état du commutateur Reed est 1(vrai), la porte est fermée. Alors, on change le porteEtat variable à fermé.

if(state) {
  doorState = "closed";
}

Si c’est 0(faux), la porte est ouverte.

else{
  doorState = "open";
}

Réglez l’état de la LED en conséquence et imprimez l’état de la porte dans le moniteur série.

digitalWrite(led, state);
changeState = false;
Serial.println(state);
Serial.println(doorState);        

Enfin, la ligne suivante envoie une notification à votre compte Telegram avec l’état actuel de la porte.

bot.sendMessage(CHAT_ID, "The door is " + doorState, "");

Manifestation

Après avoir modifié le croquis pour inclure vos informations d’identification réseau, votre jeton de bot et votre identifiant utilisateur, téléchargez-le sur votre ESP8266. Aller à Outils > Conseil et sélectionnez votre carte ESP8266. Ensuite aller à Outils > Port et sélectionnez le port COM auquel l’ESP8266 est connecté.

Ouvrez le moniteur série à un débit en bauds de 115 200 pour vérifier si les changements sont détectés.

Moniteur série de surveillance de capteur de porte ESP8266 NodeMCU.

Pour le prototypage/test, vous pouvez appliquer l’interrupteur magnétique à votre porte à l’aide de Velcro.

Test d'ifttt avec ESP8266 NodeMCU

Désormais, lorsque quelqu’un ouvre/ferme votre porte, vous recevez un message sur votre compte Telegram.

Démonstration de bot de télégramme de capteur de porte ESP32 ESP8266

Conclusion

Dans ce didacticiel, vous avez appris comment envoyer des notifications à votre compte Telegram lorsque le commutateur à lames change d’état. Cela peut être utile pour détecter si une porte, une fenêtre ou un tiroir a été ouvert ou fermé.

Nous avons des tutoriels similaires qui pourraient vous plaire :

En savoir plus sur l’ESP8266 avec nos ressources :

Merci d’avoir lu.