Auteur Eric CZELADKA | Dernière modification 9/12/2019 par Clementflipo
Pas encore d'image
ESP8266, IFTTT, Capteur à Ultrason, Groove MP3 V2.0 fr none Technique 0
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.
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€
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
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.
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.
Connexion du capteur :
Vcc sur Vin de l'ESP
Gnd sur Gnd
Trig sur D1
Echo sur D2
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.
Connexion du Jack du HP à l'entrée Jackdu player MP3
Penser à l'alimentation du HP (power bank double USB)
Connexion du node au PC pour téléversement du code =) étape 2
/* BOITE AUX LETTRES CONNECTEE
* création Eric, Yola, Anne - nov 2017
* Le facteur glisse des lettres dans la boîte,
* une voix enregistrée lui dit merci,
* et un message nous parvient par courrier électronique, pour nous indiquer que nous avons du courrier !
* En rentrant à la maison, nous savons donc que nous avons quelque chose dans la boîte.
*/
// inclusion des librairies
// capteur de distance - a priori rien de spécifique
// connexion Wifi via ESP8266Wifi
#include <ESP8266WiFi.h>
// pour émettre le son Grove-Serial MP3 Player V2.0 - https://github.com/Seeed-Studio/Grove_Serial_MP3_Player_V2.0
#include <SoftwareSerial.h>
#include <MP3Player_KT403A.h>
// Déclaration des variables et constantes
// valeurs pour le WiFi
const char* ssid = "Mon_réseau_Wifi"; // ATTENTION c'est chez Eric
const char* password = "Mon_Mot_de_passe"; // ATTENTION c'est chez Eric
// valeurs pour le serveur Web
const char* host = "maker.ifttt.com";
// Note pour le son : You must define a SoftwareSerial class object that the name must be mp3,
// but you can change the pin number according to the actual situation.
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
// pour le capteur de distance
const int pinLightSensor = A0;
int SensorValue = 0;
const byte TRIGGER_PIN = D1; // Broche TRIGGER
const byte ECHO_PIN = D2; // Broche ECHO
/* Constantes pour le timeout */
const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s
/* Vitesse du son dans l'air en mm/us */
const float SOUND_SPEED = 340.0 / 1000;
// 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()){
String line = client.readStringUntil('\r'); // découpe ligne par ligne
Serial.print(line);
}
// plus de données
Serial.println();
Serial.println("connexion fermée");
}
Vous avez entré un nom de page invalide, avec un ou plusieurs caractères suivants :
< > @ ~ : * € £ ` + = / \ | [ ] { } ; ? #