L’objectif de cet atelier est de créer un système de contrôle d’accès  au domicile et parking en se basent sur des cartes RFID pour l’identification et wifi pour la liaison avec une base de donnée MySQL

Fonctions :

Setup() :

La fonction setup () ne fonctionnera qu'une seule fois, après chaque mise sous tension ou réinitialisation de la carte Arduino. Utilisez-le pour initialiser les variables, les modes broches, commencer à utiliser les bibliothèques, etc.

Loop() :

Fonction fait précisément ce que son nom suggère et effectue des boucles consécutives, permettant à votre programme de changer et de répondre. Utilisez-le pour contrôler activement la carte Arduino.

delay(ms) :

Met le programme en pause pour la durée (en millisecondes) spécifiée en paramètre. (Il y a 1000 millisecondes par seconde.)

ms: le nombre de millisecondes à suspendre

connect() :

Connectez-vous à l'adresse IP et au port spécifiés dans le constructeur. La valeur de retour indique le succès ou l'échec. 

client .connect (ip, port) 
client .connect (URL, port)

ip: l'adresse IP à laquelle le client se connectera (tableau de 4 octets)

URL: le nom de domaine auquel le client se connectera (string, ex.:"arduino.cc ")

port: le port auquel le client se connectera (int)

attach() :

Prend en argument un unique paramètre obligatoire correspond au numéro de broche sur laquelle le servomoteur est câblé

Servo.attach(PIN)

write() :

Permet de modifier l'angle du bras du servomoteur en donnant en paramètre l'angle en question, sous la forme d'un nombre entier compris entre 0° et 180°

 Servo.write (N)

 

Matériels :

 

BreadBoard : permet de réaliser le prototype d'un circuit électronique et de le tester, sans aucune soudure.

Figure 1: BreadBoard

Câbles : pour la liaison des différents composants du système (dans cet atelier nous allons utiliser les câbles de type male-male)

Figure 2: Câbles

ESP8266 v3 : carte interactif basé sur LUA Wi-Fi Expressif ESP8622, contrairement aux modules Wi-Fi ESP8266, inclut une puce CPL2102 TTL to USB pour la programmation et le débogage via pc, et peut simplement être alimenté via son port USB.

Figure 3: ESP8266 v3

RFID-RC522 : détecte des badges ou des cartes magnétiques à moins de 10 cm. Le passage d’un composant magnétique permet de lire l’identifiant de l'UID de la carte, ainsi que les données enregistrées.

Figure 4: RFID-RC522

Servomotor : moteur un peu particulier, qui peut tourner avec une liberté d'environ 180° et garder de manière relativement précise l'angle de rotation que l'on souhaite obtenir.

Figure 5: Servomotor

 

Code Source:

//librairies

#include <ArduinoJson.h>

#include <ESP8266WiFi.h>

#include <WiFiClient.h>

#include <SPI.h>

#include <MFRC522.h>

#include <Servo.h>

// Pin assignment

#define SS_PIN D4

#define RST_PIN D3

 

const char* ssid = " "; // your ssid example: AndroidAP

const char* password = " "; // your password example: 12345

 

WiFiClient client;            // Use this for WiFi instead of EthernetClient

WiFiServer server(80);

 

const char* host     = "192.168.43.2";  // IP address of your Host

char user[] = "  ";        // MySQL user login username

char pass[] = "  ";        // MySQL user login password

 

MFRC522 mfrc522(SS_PIN, RST_PIN);   // Create MFRC522 instance.

Servo monServomoteur;   // Create a servo object

 

String path= "/projects/light.json"; // json file containing the data collected from the data base

 

void setup()

{

  Serial.begin(115200);   // Initiate a serial communication

  SPI.begin();      // Initiate  SPI bus

  mfrc522.PCD_Init();   // Initiate MFRC522

  monServomoteur.attach(D2);

  Serial.println();

  WiFi.mode(WIFI_STA);

 Serial.println();

 Serial.print("Connecting to ");

 Serial.println(ssid);

 WiFi.begin(ssid, password);

 while (WiFi.status() != WL_CONNECTED) {

   delay(500);

   Serial.print(".");

  }

 Serial.println("");

 Serial.println("WiFi connected");

 server.begin();

 Serial.println("Server started");

 Serial.println(WiFi.localIP());

}

 

void loop()

{

  // Look for new cards

  if ( ! mfrc522.PICC_IsNewCardPresent())

  {

     return;

  }

  // Select one of the cards

  if ( ! mfrc522.PICC_ReadCardSerial())

  {

    return;

  }

  //Show UID on serial monitor

  Serial.print("UID tag :");

  String content= "";

  byte letter

 

  for (byte i = 0; i < mfrc522.uid.size; i++)

  {

      Serial.print(mfrc522.uid.uidByte[i] );

     content.concat(mfrc522.uid.uidByte[i] );

  }

  Serial.println();

 

   String data = "NCard=";

   data += content;

 

  if(client.connect(host,80)) {

     client.println("GET /projects/verification.php?"+ data +" HTTP/1.1");

     client.println("Host: 192.168.43.2" );

     client.println("Connection: close");

     client.println();

     delay(2000);   

   }

 

 if(client.connect(host,80)) {

     client.print(String("GET ") + path + " HTTP/1.1\r\n" + "Host: " + host  

              + "\r\n" + "Connection: keep-alive\r\n\r\n");

     delay(500);

     String section="header";

     while(client.available()){

     String line = client.readStringUntil('\r');

     if (section=="header") { // headers..

       Serial.print(".");

      if (line=="\n") { // skips the empty space at the beginning

         section="json";

      }

    }

     else if (section=="json") {  // print the good stuff

      section="ignore";

      String result = line.substring(1);      // Parse JSON

      int size = result.length() + 1;

      char json[size];

      result.toCharArray(json, size);

      StaticJsonBuffer<200> jsonBuffer;

      JsonObject& json_parsed = jsonBuffer.parseObject(json);

      if (!json_parsed.success())

      {

        Serial.println("parseObject() failed");

        return;

      }

 

      if (strcmp(json_parsed["statut"], "1") == 0) {

       

         monServomoteur.write(0);

          delay(1000);

        monServomoteur.write(90);

      }    

    }

  }  }}

 

Tables de correspondance :

 

RFID RC522

ESP8266 v3

SDA

D4

SCK

D5

MOSI

D7

MISO

D6

IRC

-

GND

GND

RST

D3

3.3v

3v

 Tableau 1: Correspondance entre ESP8266 v3 et RFID-RC522

 

ServoMotor

ESP8266 v3

-

GND

+

5v

Signal

D2

 Tableau 2: Correspondance entre ESP8266 v3 et ServoMotor

 

Auteur:

Fatima Zahra Fagroud,  Student

HASSAN 2 University, Casablanca,

Faculty of Sciences  Ben M'Sik. Morocco