Moniteur d’état de porte ESP32 avec notifications par e-mail (IFTTT)

Moniteur d'état de porte ESP32 avec notifications par e-mail (IFTTT)

Dans ce projet, vous allez surveiller l’état d’une porte à l’aide d’une carte ESP32 et d’un interrupteur à lames magnétiques. Vous recevrez une notification par e-mail chaque fois que la porte change d’état : ouverte ou fermée. Les notifications par e-mail seront envoyées à l’aide d’IFTTT et la carte ESP32 sera programmée à l’aide d’Arduino IDE.

Moniteur d'état de porte ESP32 avec notifications par e-mail IFTTT Arduino IDE

Au lieu d’envoyer des notifications par e-mail avec IFTTT, vous pouvez utiliser un serveur SMTP à la place. Pour savoir comment envoyer des emails avec l’ESP32 en utilisant un serveur SMTP, vous pouvez suivre le tutoriel suivant :

Si vous préférez, vous pouvez également envoyer des notifications à votre compte Telegram. Apprenez à utiliser Telegram avec l’ESP32 sur le tutoriel suivant :

Nous avons un tutoriel similaire pour la carte ESP8266 : Door Status Monitor with Email Notifications (IFTTT)

Aperçu du projet

Dans ce projet, vous enverrez une notification par e-mail chaque fois qu’une porte change d’état. Pour détecter le changement, nous utiliserons un interrupteur à contact magnétique. Pour envoyer un e-mail, nous utiliserons IFTTT.

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 si la porte est ouverte ou fermée.

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 ESP32 pour détecter les changements dans son état.

Envoi d’e-mails avec IFTTT

Pour envoyer des e-mails avec l’ESP32, nous utiliserons un service gratuit* appelé IFTTT, qui signifie « If This Then That ».

IFTTT est une plate-forme qui vous donne un contrôle créatif sur des dizaines de produits et d’applications. Vous pouvez faire fonctionner les applications ensemble. Par exemple, l’envoi d’une requête particulière à IFTTT déclenche une applet qui déclenche quelque chose, comme l’envoi d’une alerte par e-mail.

J’aime le service IFTTT et une fois que vous comprenez son fonctionnement, il est facile à utiliser. Cependant, je n’aime pas trop la mise en page de leur site Web et le fait qu’il soit en constante évolution.

* actuellement, vous pouvez avoir trois applets actifs simultanément dans la version gratuite.

Créer un compte IFTTT

Créer un compte sur IFTTT est gratuit !

Allez sur le site officiel : https://ifttt.com/ et cliquez sur le Commencer en haut de la page ou Inscrivez-vous si vous avez déjà un compte.

Page Web de démarrage IFTTT

Création d’une applet

Tout d’abord, vous devez créer une applet dans IFTTT. Une applet connecte deux ou plusieurs applications ou appareils ensemble (comme l’ESP32 et l’envoi d’un e-mail).

Les applets sont composés de déclencheurs et d’actions :

  • Déclencheurs dire à une applet de démarrer. L’ESP32 enverra une requête (webhooks) qui déclenchera l’applet.
  • Actions sont le résultat final d’une exécution d’applet. Dans notre cas, l’envoi d’un e-mail.

Suivez les instructions suivantes pour créer votre applet.

1) Cliquez sur ce lien pour commencer à créer une applet.

2) Clique sur le Ajouter bouton.

IFTTT Créez votre applet

3) Recherchez « Webhooks » et sélectionnez-le.

IFTTT Créez votre applet choisissez un service

4) Sélectionnez l’option « Recevoir une demande Web ».

IFTTT Créez vos webhooks d'applet recevez une requête web

5) Entrez le nom de l’événement, par exemple, porte_status. Vous pouvez l’appeler n’importe quel autre nom, mais si vous le modifiez, vous devrez également le modifier dans le code fourni plus tard.

IFTTT Créez votre applet recevez une requête web

6) Ensuite, vous devez cliquer sur le Ajouter sur le menu « Alors ça » pour sélectionner ce qui se passe lorsque l’événement précédent est déclenché.

IFTTT Créez votre applet créez la vôtre

sept) Rechercher e-mail et sélectionnez l’option e-mail.

IFTTT Créez votre applet choisissez un service email

8) Cliquer sur Envoie-moi un email.

IFTTT Créez votre applet choisissez une action

9) Ensuite, écrivez l’objet et le corps de l’e-mail. Vous pouvez laisser le message par défaut ou le remplacer par ce que vous voulez. le {{Nom de l’événement}} est un espace réservé pour le nom de l’événement, dans ce cas, c’est porte_status. le {{OccuredAt}} est un espace réservé pour l’horodatage du déclenchement de l’événement. le {{Valeur1}} est un espace réservé pour l’état réel de la porte. Ainsi, vous pouvez jouer avec ces espaces réservés pour écrire votre propre message. Lorsque vous avez terminé, cliquez sur Créer une action.

IFTTT Créez votre applet eventName définissez les champs d'action

dix) Maintenant, vous pouvez cliquer sur Continuez.

IFTTT Créez votre applet créez la vôtre

11) Enfin, cliquez sur Finir.

IFTTT Créez votre revue d'applet et terminez

12) Vous serez redirigé vers une page similaire, comme indiqué ci-dessous.

IFTTT Créez votre applet connecté

Votre applet a été créée avec succès. Maintenant, testons-le.

Tester votre applet

Accédez à cette URL : https://ifttt.com/maker_webhooks et ouvrez le « Documentationonglet « .

Vous accéderez à une page Web où vous pourrez déclencher un événement pour le tester et accéder à votre clé API (surlignée en rouge). Enregistrez votre clé API dans un endroit sûr car vous en aurez besoin plus tard.

IFTTT teste votre applet

Déclenchons maintenant l’événement pour le tester. Dans le {un événement} espace réservé, écrivez l’événement que vous avez créé précédemment. Dans notre cas, c’est porte_status. De plus, ajoutez une valeur dans le valeur1 terrain, par exemple ouvert. Ensuite, cliquez sur le Essaye-le bouton.

IFTTT teste votre applet

Vous devriez recevoir un message de réussite indiquant « L’événement a été déclenché » et vous devriez recevoir un e-mail dans votre boîte de réception vous informant que l’événement a été déclenché.

IFTTT Applet testé avec succès

Si vous avez reçu l’e-mail, votre applet fonctionne comme prévu. Vous pouvez passer à la section suivante. Nous allons programmer l’ESP32 pour déclencher votre applet lorsque la porte change d’état.

Liste des pièces

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 !

1641481931 912 Moniteur detat de porte ESP32 avec notifications par e mail IFTTT

Schéma – ESP32 avec commutateur Reed

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

Schéma ESP8266 NodeMCU avec schéma de câblage du commutateur Reed

Code

Copiez le croquis ci-dessous sur votre IDE Arduino. Remplacez le SSID, le mot de passe et la clé API IFTTT par vos propres informations d’identification.

/*********
  Rui Santos
  Complete project details at https://Raspberryme.com/esp32-door-status-monitor-email/
  
  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 <WiFi.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";
const char* host = "maker.ifttt.com";
const char* apiKey = "REPLACE_WITH_YOUR_IFTTT_API_KEY";

// 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);

  // 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.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
    }
    Serial.println("");
    Serial.println("WiFi connected");  
}

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 email
      Serial.print("connecting to ");
      Serial.println(host);
      WiFiClient client;
      const int httpPort = 80;
      if (!client.connect(host, httpPort)) {
        Serial.println("connection failed");
        return;
      }

      String url = "/trigger/door_status/with/key/";
      url += apiKey;

      Serial.print("Requesting URL: ");
      Serial.println(url);
      client.print(String("POST ") + url + " HTTP/1.1rn" +
                     "Host: " + host + "rn" + 
                     "Content-Type: application/x-www-form-urlencodedrn" + 
                     "Content-Length: 13rnrn" +
                     "value1=" + doorState + "rn");
    }  
  }
}

Afficher le code brut

Vous devez avoir le module complémentaire de carte ESP32 installé dans votre IDE Arduino. Si ce n’est pas le cas, suivez le tutoriel suivant :

Comment fonctionne le code

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

Tout d’abord, vous devez inclure le Wifi bibliothèque afin que l’ESP32 puisse se connecter à votre réseau pour communiquer avec les services IFTTT.

#include <WiFi.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 minuterie 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’ESP32 puisse se connecter à Internet.

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

Insérez votre propre clé API IFTTT sur le clé API variable—celui que vous avez entré cette étape.

const char* apiKey = "REPLACE_WITH_YOUR_IFTTT_API_KEY";

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 allons gérer ce qui se passe lorsque l’état change (inverser l’état de la porte précédent et envoyer un e-mail).

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);

Réglez le commutateur à lames comme SAISIR. Et enregistrez l’état actuel lorsque l’ESP32 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);

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 ou de BAS à HAUT.

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

Initialiser le Wi-Fi

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

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

boucler()

Dans le boucler(), nous lirons le changer d’état variable et si un changement s’est produit, nous enverrons un e-mail en utilisant IFTTT.

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, les lignes suivantes font une demande à IFTTT avec l’état actuel de la porte sur l’événement (porte_status) que nous avons créé précédemment.

// Send email
Serial.print("connecting to ");
Serial.println(host);
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
  Serial.println("connection failed");
  return;
}

String url = "/trigger/door_status/with/key/";
url += apiKey;
          
Serial.print("Requesting URL: ");
Serial.println(url);
client.print(String("POST ") + url + " HTTP/1.1rn" +
               "Host: " + host + "rn" + 
               "Content-Type: application/x-www-form-urlencodedrn" + 
               "Content-Length: 13rnrn" +
               "value1=" + doorState + "rn");

Lorsque l’IFTTT reçoit cette demande, il déclenche l’action d’envoi d’un e-mail.

Manifestation

Après avoir modifié l’esquisse pour inclure vos informations d’identification réseau et votre clé API, téléchargez-la sur votre ESP32. Aller à Outils > Conseil et sélectionnez votre carte ESP32. Ensuite aller à Outils > Port et sélectionnez le port COM auquel l’ESP32 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 et si l’ESP32 peut se connecter à IFTTT.

Test d'ifttt avec ESP32

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 êtes averti par e-mail.

Statut de la porte E-mail reçu IFTTT ESP8266 NodeMCU

Conclusion

Dans ce didacticiel, vous avez appris à déclencher un événement 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é. Vous avez également appris à utiliser IFTTT pour envoyer un e-mail lorsqu’un événement est déclenché.

Au lieu d’envoyer un e-mail, vous voudrez peut-être envoyer un message à Telegram, par exemple.

Si vous souhaitez en savoir plus sur l’ESP32, consultez nos cours :

Merci d’avoir lu.