Cet atelier présente une amélioration du Feu tricolore  traditionnel (lien). Il consiste  à réaliser un système qui permet aux propriétaires de changer l’état de plusieurs Feu tricolore selon leurs demandes via une interface web en utilisant Wifi.

Fonctions :

Serial.print () :

Imprime les données sur le port série sous forme de texte ASCII lisible par l'homme.

Serial.print(val)

val: la valeur à imprimer - n'importe quel type de données

Serial.println () :

Imprime les données sur le port série en tant que texte ASCII lisible par un humain suivi d'un caractère de retour chariot (ASCII 13 ou '\ r') et d'un caractère de nouvelle ligne (ASCII 10 ou '\ n').

Serial.println(val)
Serial.println(val, format)

val: la valeur à imprimer - n'importe quel type de données

format: spécifie la base numérique (pour les types de données intégrales) ou le nombre de décimales (pour les types à virgule flottante)

 serial.begin() :

Définit le débit de données en bits par seconde (bauds) pour la transmission de données en série.

Serial.begin (vitesse) 
Serial.begin (vitesse, config)

vitesse: en bits par seconde (bauds) - long
config: définit les données, la parité et les bits d'arrêt. Les valeurs valides sont:

SERIAL_5N1

SERIAL_6N1

SERIAL_7N1

SERIAL_8N1 (par défaut)

SERIAL_5N2

SERIAL_6N2

SERIAL_7N2

SERIAL_8N2

SERIAL_5E1

SERIAL_6E1

SERIAL_7E1

SERIAL_8E1

SERIAL_5E2

SERIAL_6E2

SERIAL_7E2

SERIAL_8E2

SERIAL_5O1

SERIAL_6O1

SERIAL_7O1

SERIAL_8O1

SERIAL_5O2

SERIAL_6O2

SERIAL_7O2

SERIAL_8O2

WiFi.begin() :

Initialise les paramètres réseau de la bibliothèque WiFi et fournit l’état actuel

WiFi .begin (); 
WiFi .begin (ssid); 
WiFi .begin (ssid, passe); 
WiFi .begin (ssid, keyIndex, clé);

ssid : le SSID (Service Set Identifier) ​​est le nom du réseau WiFi auquel vous souhaitez vous connecter.

keyIndex : les réseaux cryptés WEP peuvent contenir jusqu'à 4 clés différentes. Ceci identifie la clé que vous allez utiliser.

clé : chaîne hexadécimale utilisée comme code de sécurité pour les réseaux cryptés WEP.

pass : les réseaux cryptés WPA utilisent un mot de passe sous la forme d'une chaîne pour la sécurité.

WiFi.status() :

Renvoie le statut de la connexion.

WiFi.status();

* WL_CONNECTED: attribué lors de la connexion à un réseau WiFi ;

* WL_NO_SHIELD: attribué quand aucun bouclier WiFi n'est présent;

* WL_IDLE_STATUS: il s'agit d'un statut temporaire attribué lors de l' appel du WiFi .begin () et reste actif jusqu'à l'expiration du nombre de tentatives (entraînant WL_CONNECT_FAILED) ou l'établissement d'une connexion (entraînant WL_CONNECTED);

* WL_NO_SSID_AVAIL: assigné quand aucun SSID n'est disponible;

* WL_SCAN_COMPLETED: assigné à la fin de l'analyse des réseaux;

* WL_CONNECT_FAILED: affecté lorsque la connexion échoue pour toutes les tentatives;

* WL_CONNECTION_LOST: assigné lorsque la connexion est perdue;

* WL_DISCONNECTED: attribué lors de la déconnexion d'un réseau;

 

Matériels :

ESP8266 v3 :

Figure 1:  Esp8266 v3

BreadBoard :

Figure 2 :  BreadBoard

Câbles : (dans cet atelier nous allons utiliser les câbles de type male-male)

 

Figure 3: Câbles

Résistance (dans cet atelier nous allons 6 résistances 220 Ω)

Figure 4:  Resistance

LEDS (dans cet atelier nous allons utiliser 6 leds 2 Rouge-2 Orange-2 Vert)

Figure 5:  Leds

 

Code Source:

 

#include <ArduinoJson.h>

#include <ESP8266WiFi.h>

const char* ssid = "SSID";

const char* password = "yourPass";

String path= "/projects/etat.json";

const char* host     = "192.168.43.2"; 

int led1 = D0;

int led2 = D1;

int led3 = D2;

int led4 = D6;

int led5 = D7;

int led6 = D8;

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

// le code dans cette fonction est exécuté une fois au début

void setup() {

pinMode(led1, OUTPUT);

pinMode(led2, OUTPUT);

pinMode(led3, OUTPUT);

pinMode(led4, OUTPUT);

pinMode(led5, OUTPUT);

pinMode(led6, OUTPUT);

Serial.begin(115200);

  delay(10);

  Serial.print("Connecting to ");

  Serial.println(ssid);

  WiFi.begin(ssid, password);

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

    delay(500);

    Serial.print(".");

  }

  Serial.println("WiFi connected");

    Serial.println("IP address: " + WiFi.localIP());

}

// le code dans cette fonction est exécuté en boucle

void loop() { 

  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["led"], "vert") == 0) {

        digitalWrite(led3, LOW);

        digitalWrite(led2, LOW);    // éteindre la LED (tension 0V sur la broche) 

        digitalWrite(led5, LOW);

        digitalWrite(led4, LOW);

        digitalWrite(led1, HIGH);   // allumer la LED (tension 5V sur la broche)

         digitalWrite(led6, HIGH);  

 Serial.println("vert vs rouge");

      }

     

      else if (strcmp(json_parsed["led"], "rouge") == 0) {

        digitalWrite(led1, LOW);

     digitalWrite(led2, LOW);    // éteindre la LED (tension 0V sur la broche)

     digitalWrite(led6, LOW);

     digitalWrite(led5, LOW); 

        digitalWrite(led3, HIGH);   // allumer la LED (tension 5V sur la broche) 

        digitalWrite(led4, HIGH);

Serial.println("rouge vs vert");

 

      }

 

      else if (strcmp(json_parsed["led"], "orange") == 0) {

        digitalWrite(led1, LOW);

        digitalWrite(led3, LOW);

        digitalWrite(led4, LOW);

        digitalWrite(led6, LOW);

        digitalWrite(led2, HIGH);   // allumer la LED (tension 5V sur la broche) 

        digitalWrite(led5, HIGH);

        Serial.println("orange vs orange");

      }

    }              

}

  }}

 

Code PHP & HTML & CSS:

 

<?php

$led = $_GET['led'];

if($led == "vert") { 

  $file = fopen("etat.json", "w") or die("can't open file");

  fwrite($file, '{"led": "vert"}');

  fclose($file);

}

else if ($led == "rouge") { 

  $file = fopen("etat.json", "w") or die("can't open file");

  fwrite($file, '{"led": "rouge"}');

  fclose($file);

}

else if ($led == "orange") { 

  $file = fopen("etat.json", "w") or die("can't open file");

  fwrite($file, '{"led": "orange"}');

  fclose($file);

}

?>

<!DOCTYPE HTML>

<html>

<head>

          <meta charset="utf-8" />

          <title>Feu Tricolor</title>

</head>

<body background="i.jpg">

    <h1 style="color:white;text-align:center;font-style: italic;font-size: 70px;">Feu Tricolor </h1>

    <div style="text-align:center;margin-top:5%;">

<a id="led_vert" href="/?led=vert" style="margin-right:5%;"><img src="/e1.png"  height="150" width="150"></a>

    <a id="led_orange" href="/?led=orange" style="margin-right:5%;"><img src="/e2.png"  height="150" width="150"></a>

    <a id="led_rouge" href="/?led=rouge" ><img src="/e3.png"  height="150" width="150"></a>

      </div>

 </body>

</html>

Etapes de réalisation:

  1. Créer un fichier etat.json
  2. Televerser le code source arduino au circuit contenant Leds et ESP8266 v3
  3. Tester le fonctionnement du système

Résultats:

  • Interface Web :

Figure 6:  Interface

  • Vert vs Rouge:
    • Fichier «etat.json »

{"led": vert}

 

Figure 7:  ETAT 1

  • Orange vs Orange:
    • Fichier «etat.json »

{"led": orange }

 

Figure 8:  ETAT 2

  • Rouge vs Vert:
    • Fichier «etat.json »

{"led": rouge }

 

Figure 9:  ETAT 3

 

Auteur:

Fatima Zahra Fagroud,  Student

HASSAN 2 University, Casablanca,

Faculty of Sciences  Ben M'Sik. Morocco