1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288
| #include <SoftwareSerial.h>
#include <SPI.h> //Librairie pour la communication SPI
#include <SD.h> //Librairie pour la communication avec la carte SD
#include <ESP8266WebServer.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266WiFi.h>
//Variables pour la transmission de donnée par WIFI
String MY_IP;
String MY_SSID;
String MY_PWD;
String cheminphoto = "";
ESP8266WebServer server (80); // Serveur web
SoftwareSerial lecteurRFID(D5, D6); //Définition du port du lecteur RFID
bool IdentifiantValide = false;
//Constantes pour les LED
const int LV = D2;
const int LR = D6;
//Constantes pour le capteur ultrason
const byte TRIG = D9; // Broche TRIGGER
const byte ECHO = D8; // Broche ECHO
const unsigned long MEASURE_TIMEOUT = 25000UL; // 25ms = ~8m à 340m/s //COMPRENDRE BIEEEEEEEEEEEN
const float SOUND_SPEED = 340.0 / 1000;
//Variables de stockage
File BDD; //Fichier contenant la base de donnée
String identifiant = ""; //variable de stockage de l'identifiant lu sur la carte RFID
String test = ""; //variable de stockage des identifiants sur la carte BDD de la carte SD
char c = 0; //variable de lecture
void setup()
{
lecteurRFID.begin(9600);//initialisation de la communication avec le port SoftSerial?????????
Serial.begin(9600);//initialisation de la communication avec le moniteur série
pinMode(LV, OUTPUT); //initialisation de la broche LV=4 comme sortie
pinMode(LR, OUTPUT); //initialisation de la broche LR=8 comme sortie
pinMode(TRIG, OUTPUT);//initialisation de la broche TRIG=3 comme sortie
digitalWrite(TRIG, LOW); //La broche TRIGGER doit être à LOW au repos
pinMode(ECHO, INPUT);//initialisation de la broche ECHO=2 comme sortie
//TRANSMISSION DONNES PAR WIFI
//////// GESTION CONNEXION
connect_STA("iPhone de Sophia", "groupei1"); //On connecte la carte D1 à un réseau WiFi (SSID,mdp)
//////// GESTION SERVEUR
server.on ( "/", handleRoot);
server.on ( "/page1", handlePage1); ///////////2ème page
server.begin();
Serial.println ( "Serveur http démarré" );
}
void loop()
{
server.handleClient();//traitement des demandes reçues??????????
//////////////1. DETECTION PRESENCE DU VEHICULE
/* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
/* 2. Mesure le temps entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */
long measure = pulseIn(ECHO, HIGH, MEASURE_TIMEOUT);
float distance_mm = measure / 2.0 * SOUND_SPEED; // ???????????? Calcul la distance à partir du temps mesuré
/* 3. Calcul la distance à partir du temps mesuré */
Serial.print("Distance: ");//ENLEVEEEEEEEEEEER
Serial.print(distance_mm);//ENLEVEEEEEEEEEEEEEEEER
if (distance_mm < 700)//On teste la présence d'un véhicule à moins de 7cm (portée de la carte RFID)????????????
{
Serial.println("Voiture présente");
//////////////2. LECTURE DE L'IDENTIFIANT SUR LA CARTE RFID
if (lecteurRFID.available())// if date is coming from software serial port ==> data is coming from SoftSerial shield
{
while (identifiant.length() < 26) //tant que notre variable n'a pas la taille d'un identifiant RFID (26 caractères)
{
identifiant += lecteurRFID.read();//On écrit l'identifiant dans notre variable de stockage
}
/////////////2. VERIFICATION DE L'IDENTIFIANT : on cherche à savoir si l'identifiant lu sur la carte RFID est bien celui d'un handicapé
Serial.println("Initialisation.....");
if (!SD.begin(D10)) {//test de la communication avec la carte sur le pin 10 (CS) ////DECLARER AUTRE PART????????????????????????????????,
Serial.println("Communication avec la carte SD impossible");
return; //Arrête le programme
}
Serial.println("Communication avec la carte SD réussie");
if (SD.exists("bdd.txt")) {
Serial.println("Le fichier bdd.txt existe");
} else {
Serial.println("Le fichier bdd.txt n'existe pas");
return; //Arrête le programme ???????????????????????????????????????
}
//Lecture du fichier
Serial.println("Ouverture du fichier en mode lecture");
if (!(BDD = SD.open("bdd.txt", FILE_READ))) { //test d'ouverture du fichier ??????????
Serial.println("Erreur de fichier");
return; //Arrête le programme ????????tester ca en changeant le nom du fichier
}
Serial.println("Fichier ouvert");
while (c != -1) {//Tant qu'il ya des
c = BDD.read(); //on lit un caractère
yield(); //remet à zero le WDT
if (c == ':') { //si : on affiche la valeur de test
Serial.println(test); //affichage sur le moniteur ENLEVEEEEEER
Serial.println(identifiant);// ENLEVEEEEEEEEEEEEER
//IDENTIFIANT VALIDE :
if (test == identifiant) {
IdentifiantValide = true; //Le booléen est mis à jour pour signifier que l'identifiant est valide
Serial.println("Le véhicule garé est bien en son droit");//ENLEVEEEEEEEEEEEER
digitalWrite(LV, HIGH); //On allume la LED verte pour signifier à l'automobiliste qu'il est en son droit
while (distance_mm < 700) {//Tant que la voiture est garée
delay (1000);//Le capteur à ultrason vérifiera la présence de voitures toutes les secondes
/* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
/* 2. Mesure le temps entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */
measure = pulseIn(ECHO, HIGH, MEASURE_TIMEOUT);
distance_mm = measure / 2.0 * SOUND_SPEED; // ???????????? Calcul la distance à partir du temps mesuré
/* 3. Calcul la distance à partir du temps mesuré */
Serial.print("Voiture toujours garée -> Distance: ");//ENLEVEEEEEEEEEEER
Serial.println(distance_mm);//ENLEVEEEEEEEEEEEEEEEER
}
digitalWrite(LV, LOW); //On éteint la LED quand la voiture sort de la place
test = ""; //On vide la variable de stockage de l'identifiant lu sur la carte SD
}
else {
Serial.println("pas de correspondance ID");//ENLEVEEEEEEEEER
test = ""; //On vide la variable de stockage de l'identifiant lu sur la carte SD
}
}
else { // sinon
test += c; //on ajoute le caractère à la chaîne
}
}
//IDENTIFIANT INVALIDE;
if (IdentifiantValide == false) //Si l'identifiant lu sur la carte RFID n'est pas valide
{
Serial.println("Le véhicule est en infraction");//ENLEVEEEEEEEEEEEER
digitalWrite(LR, HIGH); //On allume la LED rouge pour signifier à l'automobiliste qu'il n'est pas en son droit
while (distance_mm < 700) {//Tant que la voiture est garée
delay (1000);//Le capteur à ultrason vérifiera la présence de voitures toutes les secondes
/* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
/* 2. Mesure le temps entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */
long measure = measure = pulseIn(ECHO, HIGH, MEASURE_TIMEOUT);
float distance_mm = measure / 2.0 * SOUND_SPEED; // ???????????? Calcul la distance à partir du temps mesuré
/* 3. Calcul la distance à partir du temps mesuré */
Serial.print("Voiture toujours garée -> Distance: ");//ENLEVEEEEEEEEEEER
Serial.println(distance_mm);//ENLEVEEEEEEEEEEEEEEEER
}
digitalWrite(LR, LOW); //On éteint la LED quand la voiture sort de la place
}
BDD.close(); //Fermeture du fichier
Serial.println("Fichier fermé");
identifiant = ""; //On vide la variable de stockage de l'identifiant lu sur la carte RDIF
c = 0; //On réinitialise la variable de lecture
IdentifiantValide = false; //On réinitialise le booléen (on le remet par défaut en mode :"identifiant invalide")
}
else {
Serial.println("Le véhicule est en infraction");//ENLEVEEEEEEEEEEEER
digitalWrite(LR, HIGH); //On allume la LED rouge pour signifier à l'automobiliste qu'il n'est pas en son droit
while (distance_mm < 700) {//Tant que la voiture est garée
delay (1000);//Le capteur à ultrason vérifiera la présence de voitures toutes les secondes
/* 1. Lance une mesure de distance en envoyant une impulsion HIGH de 10µs sur la broche TRIGGER */
digitalWrite(TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG, LOW);
/* 2. Mesure le temps entre l'envoi de l'impulsion ultrasonique et son écho (si il existe) */
measure = pulseIn(ECHO, HIGH, MEASURE_TIMEOUT);
distance_mm = measure / 2.0 * SOUND_SPEED; // ???????????? Calcul la distance à partir du temps mesuré
/* 3. Calcul la distance à partir du temps mesuré */
Serial.print("Voiture toujours garée -> Distance: ");//ENLEVEEEEEEEEEEER
Serial.println(distance_mm);//ENLEVEEEEEEEEEEEEEEEER
}
cheminphoto = cheminphoto + "<li> <img src='https://tse3.mm.bing.net/th?id=OIP.CPr6bSGNMJxP8bbCt79XwwHaEK&pid=Api'> </li>"; //On écrit (en indiquant qu'il s'agit d'une puce de la liste) le code html permettant d'afficher la photo de l'infraction dont on renseigne le chemin d'accès
digitalWrite(LR, LOW); //On éteint la LED quand la voiture sort de la place
}
}
else
{
Serial.println("Voiture non présente");
}
delay(1000);//Le capteur à ultrason vérifiera la présence de voitures toutes les secondes
}
////////// GESTION ENTETE HTTP
void handleRoot() {
server.send ( 200, "text/html", getPage() );//
delay(10);
}
void handlePage1() {
server.send(200, "text/html", getPage()); // ..mise en place de la page html?????
delay(10);
}
//TRANSMISSION DE DONNES PAR WIFI
////////// PAGE WEB
String getPage() { //Ecriture de la page web
String page = "";
page += "<!DOCTYPE html>";
page += "<html>"; //balise principale du code
page += "<head> <title> Liste des fraudes </title> </head>";//la balise title définit le titre de la page web
page += "<body>";
page += "<h1> Liste des infractions: </h1>";//balise utilisée pour mettre en valeur un titre important
page += "<ol>"; //balise qui indique le début d'une liste à puce automatiquement numérotée
page += cheminphoto; //variable qui contiendra la balise html permettant l'affichage de la photo de l'infraction contenue dans la carte SD
//Remplacer le chemin par SD.open(image, FILE_READ);
page += "</ol>"; //indique la fin de la liste
page += "</body>";
page += "</html>";
return page;
}
////////// GESTION DU MODE STATION (si utilisé)
void connect_STA(const char *ssid, const char *password ) {
Serial.begin(9600);
WiFi.mode(WIFI_STA);
WiFi.begin ( ssid, password ); // ssid & password private
while ( WiFi.status() != WL_CONNECTED ) {
delay ( 500 );
Serial.print ( "." );
}
Serial.println ( "" );
Serial.print ( "Connected to station : " );
Serial.println ( MY_SSID );
Serial.print ( "Password : " );
Serial.println ( MY_PWD );
Serial.print ( "IP address: " );
MY_IP = WiFi.localIP().toString();
MY_SSID = ssid;
MY_PWD = password;
Serial.println ( WiFi.localIP() );
delay (500);
} |
Partager