Boite aux lettres Connectée ESP8266 : Différence entre versions

Ligne 17 : Ligne 17 :
 
|Introduction=Quoi de plus agaçant que de ne jamais savoir si le courrier est passé ou non ? surtout lorsque l'on attend LA missive pour les vacances, la réussite aux examens, les résultats du Labo etc... Et quand on fait patienter les voisins en leur demandant de retenir l’ascenseur pendant que l'on tente désespérément d'ouvrir la boite à lettre située dans l'entrée de l'immeuble ?  
 
|Introduction=Quoi de plus agaçant que de ne jamais savoir si le courrier est passé ou non ? surtout lorsque l'on attend LA missive pour les vacances, la réussite aux examens, les résultats du Labo etc... Et quand on fait patienter les voisins en leur demandant de retenir l’ascenseur pendant que l'on tente désespérément d'ouvrir la boite à lettre située dans l'entrée de l'immeuble ?  
  
Tout cela est terminé. Le petit dispositif décrit ci-dessous détecte la dépose d'un pli dans la boite, émet un message sonore de remerciement à destination du facteur ou du gardien... et envoi un mail et une notification sur votre logiciel IM favori.
+
Tout cela est terminé. Le petit dispositif décrit ci-dessous détecte la dépose d'un pli dans la boite, émet un message sonore de remerciement à destination du facteur ou du gardien... et envoie un mail et une notification sur votre logiciel IM favori.
 
}}
 
}}
 
{{ {{tntn|Materials}}
 
{{ {{tntn|Materials}}
Ligne 55 : Ligne 55 :
 
|Step_Picture_03=Boite_aux_lettres_Connectée_ESP8266__tape13.JPG
 
|Step_Picture_03=Boite_aux_lettres_Connectée_ESP8266__tape13.JPG
 
|Step_Title=Rassembler les différents composants et les monter sur la platine
 
|Step_Title=Rassembler les différents composants et les monter sur la platine
|Step_Content=1/ connecter, poser le node MCU sur la platine de prototypage dans le sens de la longueur afin que les rangées de pattes du module ne soient pas connectées.
+
|Step_Content='''<u>1/ Connexion du node MCU :</u>'''
 +
 
 +
sur la platine de prototypage dans le sens de la longueur afin que les rangées de pattes du module ne soient pas connectées.
  
 
Le Node MCU fonctionne en 3.3V mais les 2 composants utilisés fonctionnent avec 5V. Une PowerBank de 5V alimentera le dispositif. Il conviendra donc de connecter le capteur à ultrason et le player MP3 sur la broche Vin du node MCU afin de bénéficier des 5V en entrée.
 
Le Node MCU fonctionne en 3.3V mais les 2 composants utilisés fonctionnent avec 5V. Une PowerBank de 5V alimentera le dispositif. Il conviendra donc de connecter le capteur à ultrason et le player MP3 sur la broche Vin du node MCU afin de bénéficier des 5V en entrée.
  
'''<u>Connexion du capteur :</u>'''  
+
'''<u>2/ Connexion du capteur :</u>'''  
  
 
Vcc sur Vin de l'ESP
 
Vcc sur Vin de l'ESP
Ligne 69 : Ligne 71 :
 
Echo sur D2
 
Echo sur D2
  
'''<u>Connexion du player Groove MP3</u>'''
+
'''<u>3/ Connexion du player Groove MP3</u>'''
  
 
Vcc sur Vin
 
Vcc sur Vin
Ligne 83 : Ligne 85 :
 
Nous connectons donc le Rx du player MP3 à la broche D8 (Tx) de l'ESP afin que celui ci puisse envoyer ses informations.
 
Nous connectons donc le Rx du player MP3 à la broche D8 (Tx) de l'ESP afin que celui ci puisse envoyer ses informations.
  
'''<u>Connexion du Jack du HP à l'entrée Jackdu  player MP3</u>'''
+
'''<u>4/ Connexion du Jack du HP à l'entrée Jackdu  player MP3</u>'''
  
 
Penser à l'alimentation du HP (power bank double USB)
 
Penser à l'alimentation du HP (power bank double USB)
  
'''<u>Connexion du node au PC pour téléversement du code =) étape 2</u>'''
+
'''<u>5/ Connexion du node au PC pour téléversement du code =) étape 2</u>'''
 
}}
 
}}
 
{{ {{tntn|Tuto Step}}
 
{{ {{tntn|Tuto Step}}
 
|Step_Picture_00=Boite_aux_lettres_Connectée_ESP8266_apps.43938.13510798887551775.4304b217-d411-4397-9963-5d891b68d0f8.png
 
|Step_Picture_00=Boite_aux_lettres_Connectée_ESP8266_apps.43938.13510798887551775.4304b217-d411-4397-9963-5d891b68d0f8.png
 
|Step_Title=Le Code
 
|Step_Title=Le Code
|Step_Content=/* BOITE AUX LETTRES CONNECTEE
+
|Step_Content='''<u>Librairies dont il faut disposer :</u>'''
  
<nowiki>*</nowiki>   création Eric, Yola, Anne  - nov 2017
+
avec l'ESP il y aura
  
<nowiki>*</nowiki>   Le facteur glisse des lettres dans la boîte,
+
<nowiki>#</nowiki>include <'''ESP8266WiFi.h'''>
  
<nowiki>*</nowiki>   une voix enregistrée lui dit merci, 
+
Rien de particulier pour le capteur de distance.
  
<nowiki>*</nowiki>   et un message nous parvient par courrier électronique, pour nous indiquer que nous avons du courrier  !
+
Pour le groove MP3 aller sur github :
  
<nowiki>*</nowiki>   En rentrant à la maison, nous savons donc que nous avons quelque chose dans la boîte.
+
https://github.com/Seeed-Studio/Grove_Serial_MP3_Player_V2.0
  
<nowiki>*</nowiki>/
+
afin de récupérer :
  
// inclusion des librairies
+
<nowiki>#</nowiki>include <'''MP3Player_KT403A.h'''>
  
// capteur de distance - a priori rien de spécifique
+
et pour la doc concernant SoftwareSerial c'est là :
  
// connexion Wifi via ESP8266Wifi
+
https://www.arduino.cc/en/Reference/SoftwareSerial
  
<nowiki>#</nowiki>include <ESP8266WiFi.h>
+
La petite astuce de déclaration des GPIO qui correspondent aux pin D7 et D8 soit RX2 et TX2 de l'ESP
  
// pour émettre le son Grove-Serial MP3 Player V2.0 - <nowiki>https://github.com/Seeed-Studio/Grove_Serial_MP3_Player_V2.0</nowiki>
+
D'où cette partie de code : SoftwareSerial mp3(13, 15);
  
<nowiki>#</nowiki>include <SoftwareSerial.h>
+
Ensuite vient la connexion Wifi du module.
  
<nowiki>#</nowiki>include <MP3Player_KT403A.h>
+
Dans le loop on effectue des relevés de distance. Si une lettre est glissée alors le capteur va enregistrer une variation :
  
// Déclaration des variables et constantes
+
<code>if(SensorValue < d) {</code>
  
// valeurs pour le WiFi
+
<code>// print out the value you read:</code>
  
const char* ssid = "Mon_réseau_Wifi";        // ATTENTION c'est chez Eric
+
<code>Serial.print("Alerte :  ");</code>
  
const char* password = "Mon_Mot_de_passe";  // ATTENTION c'est chez Eric
+
<code>Serial.println(SensorValue);</code>
  
// valeurs pour le serveur Web
+
<code>delay(500);</code>
  
const char* host     = "maker.ifttt.com";
+
<code>envoimail();  // alors on envoie la requête ifttt</code>
  
// Note pour le son : You must define a SoftwareSerial class object that the name must be mp3,
+
<code>Serial.println("Message début  ");</code>
  
// but you can change the pin number according to the actual situation.
+
<code>SpecifyMusicPlay(1);  // lit a première piste de la carte SD</code>
  
SoftwareSerial mp3(13, 15);  //  Rx pin3 et Tx pin1 cf. doc de l'ESP ou D9 et D10 physique sur l'ESP car là c les pin logiques equivalent arduino
+
<code>Serial.println("Message fin  ");</code>
  
// pour le capteur de distance
+
<code>}</code>
  
const int pinLightSensor = A0;
+
et donc on déclenche la procédure d'envoi de mail... plus précisément on effectue une requête GET sur le serveur IFTTT avec un mot clef particulier et notre API KEY afin de déclancher 2 évènement :
  
int SensorValue = 0;
+
1/ un envoi de mail
  
const byte TRIGGER_PIN = D1; // Broche TRIGGER
+
2/ un envoi de message sur un bot telegram
  
const byte ECHO_PIN = D2;    // Broche ECHO
+
cf. étape 3
 
+
}}
/* Constantes pour le timeout */
+
{{ {{tntn|Tuto Step}}
 
+
|Step_Picture_00=Boite_aux_lettres_Connectée_ESP8266_iftttt.JPG
const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s
+
|Step_Picture_01=Boite_aux_lettres_Connectée_ESP8266_IFT1.JPG
 
+
|Step_Picture_02=Boite_aux_lettres_Connectée_ESP8266_IFT2.JPG
/* Vitesse du son dans l'air en mm/us */
+
|Step_Picture_03=Boite_aux_lettres_Connectée_ESP8266_IFT3.JPG
 
+
|Step_Picture_04=Boite_aux_lettres_Connectée_ESP8266_IFT4.JPG
const float SOUND_SPEED = 340.0 / 1000;
+
|Step_Title=Le paramétrage du service IFTTT
 
+
|Step_Content='''IFTTT''' est un service web gratuit permettant à ses utilisateurs de créer des chaînes d'instruction simples (wikipédia).
// pour le reste à modifier selon la taille de la BàL
 
 
 
int d = 320;    // représente en mm la distance où, si un objet passe en-dessous, on considère qu'on a reçu une lettre
 
 
 
void setup() {
 
 
 
// phase d'initialisation
 
 
 
// initialisation du capteur de distance
 
 
 
Serial.begin(115200);     
 
 
 
/* Initialise les broches */
 
 
 
pinMode(TRIGGER_PIN, OUTPUT);
 
 
 
digitalWrite(TRIGGER_PIN, LOW); // La broche TRIGGER doit être à LOW au repos
 
 
 
pinMode(ECHO_PIN, INPUT);
 
 
 
// Initialisation pour la carte son
 
 
 
mp3.begin(9600);      
 
 
 
delay(100);
 
 
 
SelectPlayerDevice(0x02);       // SD card comme player par défaut
 
 
 
SetVolume(0x1E);                // définit le volume, the range is 0x00 to 0x1E.
 
 
 
// Initialisation de la communication série
 
 
 
Serial.begin(115200);
 
 
 
Serial.print("Connexion au WiFi ");
 
 
 
Serial.println(ssid);
 
 
 
WiFi.begin(ssid, password);    // On se connecte
 
 
 
while (WiFi.status() != WL_CONNECTED) {
 
 
 
// On attend
 
 
 
delay(500);
 
 
 
Serial.print(".");
 
 
 
}
 
 
 
Serial.println("");  // on affiche les paramètres
 
 
 
Serial.println("WiFi connecté");
 
 
 
Serial.print("Adresse IP du module ESP: ");
 
 
 
Serial.println(WiFi.localIP());
 
 
 
Serial.print("Adresse IP de la box : ");
 
 
 
Serial.println(WiFi.gatewayIP());
 
 
 
}
 
 
 
void loop() {
 
 
 
// corps du programme
 
 
 
distance (); //appelle la fonction distance - à revoir, je ne suis pas sure de la syntaxe
 
 
 
//si la distance est inférieur à d
 
 
 
// vérifier la valeur, on serait plutôt à 30 mm
 
 
 
if(SensorValue < d) {
 
 
 
// print out the value you read:
 
 
 
Serial.print("Alerte :  ");
 
 
 
Serial.println(SensorValue);
 
 
 
delay(500);
 
 
 
envoimail();  // alors on envoie la requête ifttt
 
 
 
Serial.println("Message début  ");
 
 
 
SpecifyMusicPlay(1);  // lit a première piste de la carte SD
 
 
 
Serial.println("Message fin  ");
 
 
 
}
 
 
 
}
 
 
 
void distance()
 
 
 
{
 
 
 
/* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */
 
 
 
digitalWrite(TRIGGER_PIN, HIGH);
 
 
 
delayMicroseconds(10);
 
 
 
digitalWrite(TRIGGER_PIN, LOW);
 
 
 
/* 2. Mesure le temps entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */
 
 
 
long measure = pulseIn(ECHO_PIN, HIGH, MEASURE_TIMEOUT);
 
 
 
/* 3. Calcul la distance à partir du temps mesuré */
 
 
 
float distance_mm = measure / 2.0 * SOUND_SPEED;
 
 
 
/* Affiche les résultats en mm, cm et m */
 
 
 
Serial.print(F("Distance: "));
 
 
 
Serial.print(distance_mm);
 
 
 
Serial.print(F("mm ("));
 
 
 
Serial.print(distance_mm / 10.0, 2);
 
 
 
Serial.print(F("cm, "));
 
 
 
Serial.print(distance_mm / 1000.0, 2);
 
 
 
Serial.println(F("m)"));
 
 
 
SensorValue = distance_mm;
 
 
 
/* Délai d'attente pour éviter d'afficher trop de résultats à la seconde */
 
 
 
delay(200);
 
 
 
}
 
 
 
void envoimail()
 
 
 
{
 
 
 
SpecifyMusicPlay(1);  // lit a première piste de la carte SD
 
 
 
Serial.print("Connexion au serveur : ");
 
 
 
Serial.println(host);
 
 
 
// On se place dans le rôle ndu  client en utilisant WifiClient
 
 
 
WiFiClient client;
 
 
 
// le serveur Web attend tradionnellement sur le port 80
 
 
 
const int httpPort = 80;
 
 
 
// Si la connexio échoue ca sera pour la prochaine fois
 
 
 
if (!client.connect(host, httpPort)) {
 
 
 
Serial.println("connection failed");
 
 
 
return;
 
 
 
}
 
 
 
// La connexion a réussie on forme le chemin
 
 
 
String url = String("/trigger/test_mailbox/with/key/Ma_Key_Perso_IFTTT");
 
 
 
Serial.print("demande URL: ");
 
 
 
Serial.println(url);
 
 
 
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
 
 
 
    "Host: " + host + "\r\n" + 
 
 
 
    "Connection: close\r\n\r\n");
 
 
 
// On attend 10 secondes
 
 
 
delay(10000);
 
 
 
// On lit les données reçues, s'il y en a
 
  
while(client.available()){
+
1/ Créer un compte
  
String line = client.readStringUntil('\r'); // découpe ligne par ligne
+
2/ En haut dans le menu aller sur "My Applet"
  
Serial.print(line);
+
3/ New Applet et cliquer sur le "This" puis chercher le service Webhook
  
}
+
4/ cliquer dessus puis définir l'évènement car il fera partie de la chaine de caractère qui sera envoyée au serveur, celle-ci :
  
// plus de données
+
String url = String("/trigger/'''test_mailbox'''/with/key/Ma_Key_Perso_IFTTT");
  
Serial.println();
+
Ici on va nommer notre évènement déclencheur "test_mailbox" + create trigger
  
Serial.println("connexion fermée");
+
5/ passer au "that"
  
}
+
6/ chercher le service "mail"
 
}}
 
}}
 
{{ {{tntn|Tuto Step}}
 
{{ {{tntn|Tuto Step}}

Version du 17 décembre 2017 à 19:44

Auteur avatarEric CZELADKA | Dernière modification 9/12/2019 par Clementflipo

Pas encore d'image

Ce tutoriel décrit les éléments ainsi que les étapes pour concevoir un système de BàL connectée qui détecte la remise du courrier dans la boite et prévient immédiatement par mail et telegram, son propriétaire de la dépose d'un courrier. Un petit message de remerciement est également diffusé par HP à l'attention du facteur.
Difficulté
Difficile
Durée
3 heure(s)
Catégories
Électronique, Maison
Coût
50 EUR (€)
Licence : Attribution (CC BY)

Introduction

Quoi de plus agaçant que de ne jamais savoir si le courrier est passé ou non ? surtout lorsque l'on attend LA missive pour les vacances, la réussite aux examens, les résultats du Labo etc... Et quand on fait patienter les voisins en leur demandant de retenir l’ascenseur pendant que l'on tente désespérément d'ouvrir la boite à lettre située dans l'entrée de l'immeuble ?

Tout cela est terminé. Le petit dispositif décrit ci-dessous détecte la dépose d'un pli dans la boite, émet un message sonore de remerciement à destination du facteur ou du gardien... et envoie un mail et une notification sur votre logiciel IM favori.

Matériaux

un node MCU ESP8266  : 7,5€

un Module à Ultrasons HC-SR04 4 Pin Capteur de Mesure de Distance pour Arduino : 3.45€

Module MP3 V2.0 Grove : 10.5€

un petit HP de récupération ou portable : moins de 10€

Des fils de prototypage : 4€

Une Breadboard : 1.4€

Une powerbank : 10€

un cable USB - Micro USB : 2€

Outils

Un imprimante 3D pour fabriquer la boite de rangement mais n'importe quelle boite peut convenir.

IDE Arduino pour récupérer le code et le téléverser sur le Node MCU ESP8266

Étape 1 - Rassembler les différents composants et les monter sur la platine

1/ Connexion du node MCU :

sur la platine de prototypage dans le sens de la longueur afin que les rangées de pattes du module ne soient pas connectées.

Le Node MCU fonctionne en 3.3V mais les 2 composants utilisés fonctionnent avec 5V. Une PowerBank de 5V alimentera le dispositif. Il conviendra donc de connecter le capteur à ultrason et le player MP3 sur la broche Vin du node MCU afin de bénéficier des 5V en entrée.

2/ Connexion du capteur :

Vcc sur Vin de l'ESP

Gnd sur Gnd

Trig sur D1

Echo sur D2

3/ Connexion du player Groove MP3

Vcc sur Vin

Gnd sur Gnd

Tx c'est le retour et ici nous ne l'utiliserons pas donc pas connecté

Rx sur le Tx de l'ESP mais malheureusement après de nombreux essais infructueux il s'est avéré que les pin Rx et Tx de l'ESP n'étaient pas ceux qui devaient être utilisés. Un rapide coup d'oeil sur la documentation du module permet de voir que plusieurs pin peuvent faire office de Rx et Tx

Les broches D7 et D8 de l'ESP font office également de Rx(2) et Tx(2) qui correspondent donc dans l'IDE Arduino aux GPIO 13 et 15 (ce sera important dans le code).

Nous connectons donc le Rx du player MP3 à la broche D8 (Tx) de l'ESP afin que celui ci puisse envoyer ses informations.

4/ Connexion du Jack du HP à l'entrée Jackdu player MP3

Penser à l'alimentation du HP (power bank double USB)

5/ Connexion du node au PC pour téléversement du code =) étape 2


Étape 2 - Le Code

Librairies dont il faut disposer :

avec l'ESP il y aura

#include <ESP8266WiFi.h>

Rien de particulier pour le capteur de distance.

Pour le groove MP3 aller sur github :

https://github.com/Seeed-Studio/Grove_Serial_MP3_Player_V2.0

afin de récupérer :

#include <MP3Player_KT403A.h>

et pour la doc concernant SoftwareSerial c'est là :

https://www.arduino.cc/en/Reference/SoftwareSerial

La petite astuce de déclaration des GPIO qui correspondent aux pin D7 et D8 soit RX2 et TX2 de l'ESP

D'où cette partie de code : SoftwareSerial mp3(13, 15);

Ensuite vient la connexion Wifi du module.

Dans le loop on effectue des relevés de distance. Si une lettre est glissée alors le capteur va enregistrer une variation :

if(SensorValue < d) {

// print out the value you read:

Serial.print("Alerte :  ");

Serial.println(SensorValue);

delay(500);

envoimail();  // alors on envoie la requête ifttt

Serial.println("Message début  ");

SpecifyMusicPlay(1);  // lit a première piste de la carte SD

Serial.println("Message fin  ");

}

et donc on déclenche la procédure d'envoi de mail... plus précisément on effectue une requête GET sur le serveur IFTTT avec un mot clef particulier et notre API KEY afin de déclancher 2 évènement :

1/ un envoi de mail

2/ un envoi de message sur un bot telegram

cf. étape 3




Étape 3 - Le paramétrage du service IFTTT

IFTTT est un service web gratuit permettant à ses utilisateurs de créer des chaînes d'instruction simples (wikipédia).

1/ Créer un compte

2/ En haut dans le menu aller sur "My Applet"

3/ New Applet et cliquer sur le "This" puis chercher le service Webhook

4/ cliquer dessus puis définir l'évènement car il fera partie de la chaine de caractère qui sera envoyée au serveur, celle-ci :

String url = String("/trigger/test_mailbox/with/key/Ma_Key_Perso_IFTTT");

Ici on va nommer notre évènement déclencheur "test_mailbox" + create trigger

5/ passer au "that"

6/ chercher le service "mail"

Étape 4 -

Commentaires