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:
- Créer un fichier etat.json
- Televerser le code source arduino au circuit contenant Leds et ESP8266 v3
- 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






















