<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki-se.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Epeeterm</id>
	<title>wiki-se.plil.fr - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-se.plil.fr/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Epeeterm"/>
	<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php/Sp%C3%A9cial:Contributions/Epeeterm"/>
	<updated>2026-05-14T21:14:40Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.39.1</generator>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6267</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6267"/>
		<updated>2024-05-30T07:49:07Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : correction&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
[[Fichier:1716462734356.jpg|427x427px|système sur l'écran|centré|sans_cadre]]&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un microcontrôleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur grâce au réseau Wifi et d'un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'ESP8266.&lt;br /&gt;
* Tester.&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte.&lt;br /&gt;
&lt;br /&gt;
Cela dit ce projet est faisable sur KICAD !&lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur) + connecteur pour la programmation du microcontrôleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne : &lt;br /&gt;
&lt;br /&gt;
Toutes deux sont fonctionnelles, mais une seule sera montré/utilisé dans ce Wiki.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
&lt;br /&gt;
* FTDI pin | ESP pin&lt;br /&gt;
* GND    -&amp;gt; GND&lt;br /&gt;
* VCC    -&amp;gt;  VCC&lt;br /&gt;
* TX    -&amp;gt;    RX&lt;br /&gt;
* RX    -&amp;gt;   TX&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1717052164327.jpg|néant|vignette|266x266px|zoom pin programme]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte en maintenant la pin 0 dans son état.&lt;br /&gt;
&lt;br /&gt;
Pour téléverser le code dans le microcontrôleur, j'ai utilisé le logiciel Platform IO disponible avec [https://fr.wikipedia.org/wiki/Visual_Studio_Code VScode] . Tout les fichiers de configuration pour ce projet se trouve directement dans le dépot GIT. Il suffit de créer un nouveau projet platformIO avec le dossier Projet_S8_ESP12. Une fois cela fait, vous pouvez téléverser le code dans l'ESP8266&lt;br /&gt;
&lt;br /&gt;
lien d'installation de platform IO : https://docs.platformio.org/en/stable/integration/ide/vscode.html&lt;br /&gt;
==== 2)Réalisation du server web ====&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu.&lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité grâce à de multiples librairie comme montré en cours, tel que :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable&lt;br /&gt;
&lt;br /&gt;
De plus :&lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
De plus ce programme permet de filtrer les adresse IP pour garder seulement celle qui sont utile au process permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP &amp;quot;inutile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter. (''on'' et ''off'' signifiant l'état de l'écran)&lt;br /&gt;
===== Mise en place : =====&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).&lt;br /&gt;
&lt;br /&gt;
Une fois le GIT  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master&lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape faite un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./webServer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier, il vous suffit de taper :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./webServer -p nbPort &lt;br /&gt;
#ou &lt;br /&gt;
./webServer --port nbPort&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute et en attendante de requêtes.[[Fichier:Exec serverWeb.png|vignette|509x509px|exécution du programme (serveur web)|néant]]&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le server web lanceé, nous avons besoin d'afficher les systèmes d'écrans disponibles sur une page web pour ainsi intéragir avec eux plus facilement. &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. &lt;br /&gt;
&lt;br /&gt;
Et une page web se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    ///évenement &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;La page ci dessous permet d'afficher tout les systèmes d'écrans s'étant connectés au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran.&lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html sans systèmes d'écrans connecté.[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|vignette|1100x1100px|Page HTML 1|néant]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html avec des systèmes d'écrans connectés.[[Fichier:Capture d’écran 2024-05-29 12-54-48.png|vignette|1100x1100px|Page HTML 2|néant]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On peut y voir que deux systèmes d'écrans se sont connecté et que l'état de l'écran est afficher sur les pastille rouges et vertes (qui servent également de bouton)&lt;br /&gt;
&lt;br /&gt;
Une fois que l'on appuie sur un bouton, cela envoie une requette http au système voulu et fera bouger le servo moteur en conséquence. Afin d'allumer ou éteindre l'écran&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe . cf : voir le TP précédant sur les routeurs.&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
WiFi.mode(WIFI_STA);&lt;br /&gt;
WiFi.hostname(newHostname);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if (!WiFi.config(apIP, gateway, subnet, primaryDNS, secondaryDNS)) {&lt;br /&gt;
Serial.println(&amp;quot;STA Failed to configure&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Serial.printf(&amp;quot;connection to %s with %s\n&amp;quot;,ssid, password );&lt;br /&gt;
WiFi.begin(ssid, password);&lt;br /&gt;
int dot_cnt = 1;&lt;br /&gt;
while (WiFi.status() != WL_CONNECTED) {&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;ESP8266WiFi.h&amp;gt; qui sur cette partie de code on peut y voir que l'esp8266 sera en mode station pour venir se connecter au routeur (ligne 1). Par la suite on configure son adresse IP (static) et autre paramètre réseau (ligne 5) et pour finir on le connecte au routeur (ligne 10).&lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
server.on(&amp;quot;/&amp;quot;, HTTP_GET, [](AsyncWebServerRequest *request){&lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;, &amp;quot;text/html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/get&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        String message = &amp;quot;Salut Fotin&amp;quot;;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, &amp;quot;Hello, GET: &amp;quot; + message);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/state&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  getLedState(analogRead(A0)));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/connect&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        send = true;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  &amp;quot;OK&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/on&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;on&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo on&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, HIGH);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/off&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;off&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo off&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, LOW);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a POST request to &amp;lt;IP&amp;gt;/post with a form field message set to &amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/post&amp;quot;, HTTP_POST, [](AsyncWebServerRequest *request){&lt;br /&gt;
        String message;&lt;br /&gt;
        String port;&lt;br /&gt;
        String server;&lt;br /&gt;
        String ServoMin;&lt;br /&gt;
        String ServoMax;&lt;br /&gt;
        if (request-&amp;gt;hasParam(PARAM_MESSAGE_4, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_5, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_2, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_3, true)) {&lt;br /&gt;
            message = request-&amp;gt;getParam(PARAM_MESSAGE, true)-&amp;gt;value();&lt;br /&gt;
            port = request-&amp;gt;getParam(PARAM_MESSAGE_2, true)-&amp;gt;value();&lt;br /&gt;
            server = request-&amp;gt;getParam(PARAM_MESSAGE_3, true)-&amp;gt;value();&lt;br /&gt;
            ServoMin = request-&amp;gt;getParam(PARAM_MESSAGE_4, true)-&amp;gt;value();&lt;br /&gt;
            ServoMax = request-&amp;gt;getParam(PARAM_MESSAGE_5, true)-&amp;gt;value();&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            message = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            port = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            server = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMin = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMax = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        Serial.println(message);&lt;br /&gt;
        Serial.println(port);&lt;br /&gt;
        Serial.println(server);&lt;br /&gt;
        Serial.println(ServoMin);&lt;br /&gt;
        Serial.println(ServoMax);&lt;br /&gt;
        // ajouter si port et server vide alors remplacer avec ceux de base&lt;br /&gt;
        server_port = port;&lt;br /&gt;
        server_ip = server;&lt;br /&gt;
        adjustAnalogR = message.toInt();&lt;br /&gt;
        onPos = ServoMin.toInt();&lt;br /&gt;
        offPos = ServoMax.toInt();&lt;br /&gt;
        &lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    server.onNotFound(notFound);&lt;br /&gt;
&lt;br /&gt;
    DefaultHeaders::Instance().addHeader(&amp;quot;Access-Control-Allow-Origin&amp;quot;, &amp;quot;*&amp;quot;);&lt;br /&gt;
    server.begin();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;AsyncTCP.h&amp;gt; et #include &amp;lt;ESPAsyncTCP.h&amp;gt; qui permettent de gérée les requêtes asynchrones et avons défini plusieurs appels possibles. De plus le programme inclu une page propre au client permettant de configurer les différents paramètres (calibrations LDR, Servo, adresse serveur / port) disponible à l'adresse IP du client (exemple : &amp;lt;nowiki&amp;gt;http://IPadresse/)(visible&amp;lt;/nowiki&amp;gt; sur l'écran OLED après démarrage)    .[[Fichier:Capture d’écran 2024-05-29 13-53-26.png|vignette|902x902px|page configurations client|néant]]&lt;br /&gt;
* envoie de requête http vers le serveur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
void sendGet()&lt;br /&gt;
{&lt;br /&gt;
    WiFiClient client;&lt;br /&gt;
&lt;br /&gt;
    HTTPClient http;&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;[HTTP] begin...\n&amp;quot;);&lt;br /&gt;
    if (http.begin(client, &amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)))) {  // HTTP&lt;br /&gt;
    Serial.println(&amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)));&lt;br /&gt;
&lt;br /&gt;
      Serial.print(&amp;quot;[HTTP] GET...\n&amp;quot;);&lt;br /&gt;
      // start connection and send HTTP header&lt;br /&gt;
      int httpCode = http.GET();&lt;br /&gt;
&lt;br /&gt;
      // httpCode will be negative on error&lt;br /&gt;
      if (httpCode &amp;gt; 0) {&lt;br /&gt;
        // HTTP header has been send and Server response header has been handled&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... code: %d\n&amp;quot;, httpCode);&lt;br /&gt;
&lt;br /&gt;
        // file found at server&lt;br /&gt;
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {&lt;br /&gt;
          String payload = http.getString();&lt;br /&gt;
          Serial.println(payload);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... failed, error: %s\n&amp;quot;, http.errorToString(httpCode).c_str());&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      http.end();&lt;br /&gt;
    } else {&lt;br /&gt;
      Serial.println(&amp;quot;[HTTP] Unable to connect&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour envoyer des requêtes au serveur nous utilisons la librairie : #include &amp;lt;ESP8266HTTPClient.h&amp;gt; qui va permettre d'envoyer au serveur la présence de se système afin d'être sauvegardé dans le fichier IPlist.txt. Et cette requête contient l'adresse du serveur, le port et l'état de la LED de l'écran mesurer par la LDR.&lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
String getLedState(int analog)&lt;br /&gt;
{&lt;br /&gt;
  int state = map(analog, 0, 1024, 0,100);&lt;br /&gt;
  if(state &amp;gt; adjustAnalogR)&lt;br /&gt;
  {&lt;br /&gt;
     return &amp;quot;on&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    return &amp;quot;off&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici cette fonction permet simplement de mesurer la valeur analogique du CAN venant de la LDR et de retourner un String pour mieux l'incorporé dans la requête HTTP.&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
Servo servo1;  // on créé l'objet servo1&lt;br /&gt;
int onPos = 45;&lt;br /&gt;
int offPos = 135;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
servo1.attach(12);  // on dit a cette objet que le servo est sur la pin 12 dans le setup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour controler le Servo nous nous servons de librairie : #include &amp;lt;Servo.h&amp;gt;. Qui va nous permettre de controler l'angle du servo en générant un signal PWM approprié.&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
servo1.write(180);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici le servo ira à sa position 180°.&lt;br /&gt;
*Ajout d'un écran OLED monochrome pour facilité l'utilisation du système et permettre d'autres tâche dans le futur.&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// ### Exemple d'utilisation de cette librairie ###&lt;br /&gt;
#include &amp;lt;U8g2lib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifdef U8X8_HAVE_HW_I2C&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
    &lt;br /&gt;
    u8g2.begin();&lt;br /&gt;
    u8g2.clearBuffer();					// effacer le buffer de l'écran&lt;br /&gt;
    u8g2.setDisplayRotation(U8G2_R1);&lt;br /&gt;
    u8g2.setFlipMode(0);&lt;br /&gt;
    u8g2.setFont(u8g2_font_squeezed_r6_tr);	// choix de la police&lt;br /&gt;
    u8g2.drawStr(0,10,&amp;quot;Projet S8 : start&amp;quot;);	// ce qui s'affichera sur l'écran&lt;br /&gt;
    u8g2.sendBuffer();					// envoie vers le buffer&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour réaliser le support 3D, j'ai utilisé le logiciel gratuit disponible en ligne appelé [[wikipedia:Tinkercad|TinkerCad]] . Cela m'a permis de facilement réaliser des pièces sur mesure afin de faire un support modulable et pouvant s'accrocher à même l'écran pour plus de facilité d'installations.&lt;br /&gt;
&lt;br /&gt;
cf: galerie.&lt;br /&gt;
==== 5) Axes d'amélioration : ====&lt;br /&gt;
&lt;br /&gt;
===== Quelques difficultés rencontrés: =====&lt;br /&gt;
* Mauvais routage des servo sur la carte (inversion des VCC et Signal) =&amp;gt; Solution : fabrication d'un adaptateur &lt;br /&gt;
* Modélisation de plusieurs système d'accroche car le premier ne permettait pas un maintient suffisant sur l'écran.&lt;br /&gt;
* Erreur lors de la fermeture du serveur web et sa re-ouverture (port all ready use), l'erreur s'arrête après quelques secondes et le serveur web peut s'exécuté à nouveau.  &lt;br /&gt;
===== Les améliorations possibles : =====&lt;br /&gt;
* Meilleur routage de la carte en corrigeant les erreurs.&lt;br /&gt;
* Faire un PCB double face, permettant d'inclure directement le circuit de programmation (facilitant l'améliorations du programme).&lt;br /&gt;
* Refaire une nouvelle version du chassis en 3D pour corriger les petites erreurs restantes.&lt;br /&gt;
* Améliorations du programme du serveur web pour ajouter des options (ajout d'un second servo sur une même carte). &lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
Fichier:1716462734375.jpg&lt;br /&gt;
Fichier:1716462734420.jpg&lt;br /&gt;
Fichier:1716462734428.jpg&lt;br /&gt;
Fichier:1716462734409.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734375.jpg|vignette|266x266px|Ecran OLED après connection]]Vidéo disponible sur :  https://www.youtube.com/shorts/fdwK9TlrLNs[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]][[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]][[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;br /&gt;
==== Annexe : ====&lt;br /&gt;
[[Fichier:1716462734409.jpg|vignette|266x266px|dos de l'écran après montage du système]][[Fichier:1716462734428.jpg|vignette|266x266px|avant du système après montage]][[Fichier:1716462734420.jpg|vignette|266x266px|avant du système après montage 2]]Tout les programmes, photos, fichier 3D sont disponibles sur le GIT associer : https://archives.plil.fr/epeeterm/SE2a4_projet_SysRes_Peetermans_Elvis/tree/master&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6266</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6266"/>
		<updated>2024-05-30T07:48:39Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : finition&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
[[Fichier:1716462734356.jpg|427x427px|système sur l'écran|centré|sans_cadre]]&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un microcontrôleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur grâce au réseau Wifi et d'un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'ESP8266.&lt;br /&gt;
* Tester.&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte.&lt;br /&gt;
&lt;br /&gt;
Cela dit ce projet est faisable sur KICAD !&lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur) + connecteur pour la programmation du microcontrôleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne : &lt;br /&gt;
&lt;br /&gt;
Toutes deux sont fonctionnelles, mais une seule sera montré/utilisé dans ce Wiki.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
&lt;br /&gt;
* FTDI pin | ESP pin&lt;br /&gt;
* GND    -&amp;gt; GND&lt;br /&gt;
* VCC    -&amp;gt;  VCC&lt;br /&gt;
* TX    -&amp;gt;    RX&lt;br /&gt;
* RX    -&amp;gt;   TX&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1717052164327.jpg|néant|vignette|266x266px|zoom pin programme]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte en maintenant la pin 0 dans son état.&lt;br /&gt;
&lt;br /&gt;
Pour téléverser le code dans le microcontrôleur, j'ai utilisé le logiciel Platform IO disponible avec [https://fr.wikipedia.org/wiki/Visual_Studio_Code VScode] . Tout les fichiers de configuration pour ce projet se trouve directement dans le dépot GIT. Il suffit de créer un nouveau projet platformIO avec le dossier Projet_S8_ESP12. Une fois cela fait, vous pouvez téléverser le code dans l'ESP8266&lt;br /&gt;
&lt;br /&gt;
lien d'installation de platform IO : https://docs.platformio.org/en/stable/integration/ide/vscode.html&lt;br /&gt;
==== 2)Réalisation du server web ====&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu.&lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité grâce à de multiples librairie comme montré en cours, tel que :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable&lt;br /&gt;
&lt;br /&gt;
De plus :&lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
De plus ce programme permet de filtrer les adresse IP pour garder seulement celle qui sont utile au process permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP &amp;quot;inutile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter. (''on'' et ''off'' signifiant l'état de l'écran)&lt;br /&gt;
===== Mise en place : =====&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).&lt;br /&gt;
&lt;br /&gt;
Une fois le GIT  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master&lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape faite un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./webServer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier, il vous suffit de taper :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./webServer -p nbPort &lt;br /&gt;
#ou &lt;br /&gt;
./webServer --port nbPort&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute et en attendante de requêtes.[[Fichier:Exec serverWeb.png|vignette|509x509px|exécution du programme (serveur web)|néant]]&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le server web lanceé, nous avons besoin d'afficher les systèmes d'écrans disponibles sur une page web pour ainsi intéragir avec eux plus facilement. &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. &lt;br /&gt;
&lt;br /&gt;
Et une page web se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    ///évenement &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;La page ci dessous permet d'afficher tout les systèmes d'écrans s'étant connectés au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran.&lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html sans systèmes d'écrans connecté.[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|vignette|1100x1100px|Page HTML 1|néant]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html avec des systèmes d'écrans connectés.[[Fichier:Capture d’écran 2024-05-29 12-54-48.png|vignette|1100x1100px|Page HTML 2|néant]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On peut y voir que deux systèmes d'écrans se sont connecté et que l'état de l'écran est afficher sur les pastille rouges et vertes (qui servent également de bouton)&lt;br /&gt;
&lt;br /&gt;
Une fois que l'on appuie sur un bouton, cela envoie une requette http au système voulu et fera bouger le servo moteur en conséquence. Afin d'allumer ou éteindre l'écran&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe . cf : voir le TP précédant sur les routeurs.&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
WiFi.mode(WIFI_STA);&lt;br /&gt;
WiFi.hostname(newHostname);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if (!WiFi.config(apIP, gateway, subnet, primaryDNS, secondaryDNS)) {&lt;br /&gt;
Serial.println(&amp;quot;STA Failed to configure&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Serial.printf(&amp;quot;connection to %s with %s\n&amp;quot;,ssid, password );&lt;br /&gt;
WiFi.begin(ssid, password);&lt;br /&gt;
int dot_cnt = 1;&lt;br /&gt;
while (WiFi.status() != WL_CONNECTED) {&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;ESP8266WiFi.h&amp;gt; qui sur cette partie de code on peut y voir que l'esp8266 sera en mode station pour venir se connecter au routeur (ligne 1). Par la suite on configure son adresse IP (static) et autre paramètre réseau (ligne 5) et pour finir on le connecte au routeur (ligne 10).&lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
server.on(&amp;quot;/&amp;quot;, HTTP_GET, [](AsyncWebServerRequest *request){&lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;, &amp;quot;text/html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/get&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        String message = &amp;quot;Salut Fotin&amp;quot;;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, &amp;quot;Hello, GET: &amp;quot; + message);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/state&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  getLedState(analogRead(A0)));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/connect&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        send = true;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  &amp;quot;OK&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/on&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;on&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo on&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, HIGH);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/off&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;off&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo off&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, LOW);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a POST request to &amp;lt;IP&amp;gt;/post with a form field message set to &amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/post&amp;quot;, HTTP_POST, [](AsyncWebServerRequest *request){&lt;br /&gt;
        String message;&lt;br /&gt;
        String port;&lt;br /&gt;
        String server;&lt;br /&gt;
        String ServoMin;&lt;br /&gt;
        String ServoMax;&lt;br /&gt;
        if (request-&amp;gt;hasParam(PARAM_MESSAGE_4, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_5, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_2, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_3, true)) {&lt;br /&gt;
            message = request-&amp;gt;getParam(PARAM_MESSAGE, true)-&amp;gt;value();&lt;br /&gt;
            port = request-&amp;gt;getParam(PARAM_MESSAGE_2, true)-&amp;gt;value();&lt;br /&gt;
            server = request-&amp;gt;getParam(PARAM_MESSAGE_3, true)-&amp;gt;value();&lt;br /&gt;
            ServoMin = request-&amp;gt;getParam(PARAM_MESSAGE_4, true)-&amp;gt;value();&lt;br /&gt;
            ServoMax = request-&amp;gt;getParam(PARAM_MESSAGE_5, true)-&amp;gt;value();&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            message = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            port = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            server = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMin = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMax = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        Serial.println(message);&lt;br /&gt;
        Serial.println(port);&lt;br /&gt;
        Serial.println(server);&lt;br /&gt;
        Serial.println(ServoMin);&lt;br /&gt;
        Serial.println(ServoMax);&lt;br /&gt;
        // ajouter si port et server vide alors remplacer avec ceux de base&lt;br /&gt;
        server_port = port;&lt;br /&gt;
        server_ip = server;&lt;br /&gt;
        adjustAnalogR = message.toInt();&lt;br /&gt;
        onPos = ServoMin.toInt();&lt;br /&gt;
        offPos = ServoMax.toInt();&lt;br /&gt;
        &lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    server.onNotFound(notFound);&lt;br /&gt;
&lt;br /&gt;
    DefaultHeaders::Instance().addHeader(&amp;quot;Access-Control-Allow-Origin&amp;quot;, &amp;quot;*&amp;quot;);&lt;br /&gt;
    server.begin();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;AsyncTCP.h&amp;gt; et #include &amp;lt;ESPAsyncTCP.h&amp;gt; qui permettent de gérée les requêtes asynchrones et avons défini plusieurs appels possibles. De plus le programme inclu une page propre au client permettant de configurer les différents paramètres (calibrations LDR, Servo, adresse serveur / port) disponible à l'adresse IP du client (exemple : &amp;lt;nowiki&amp;gt;http://IPadresse/)(visible&amp;lt;/nowiki&amp;gt; sur l'écran OLED après démarrage)    .[[Fichier:Capture d’écran 2024-05-29 13-53-26.png|vignette|902x902px|page configurations client|néant]]&lt;br /&gt;
* envoie de requête http vers le serveur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
void sendGet()&lt;br /&gt;
{&lt;br /&gt;
    WiFiClient client;&lt;br /&gt;
&lt;br /&gt;
    HTTPClient http;&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;[HTTP] begin...\n&amp;quot;);&lt;br /&gt;
    if (http.begin(client, &amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)))) {  // HTTP&lt;br /&gt;
    Serial.println(&amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)));&lt;br /&gt;
&lt;br /&gt;
      Serial.print(&amp;quot;[HTTP] GET...\n&amp;quot;);&lt;br /&gt;
      // start connection and send HTTP header&lt;br /&gt;
      int httpCode = http.GET();&lt;br /&gt;
&lt;br /&gt;
      // httpCode will be negative on error&lt;br /&gt;
      if (httpCode &amp;gt; 0) {&lt;br /&gt;
        // HTTP header has been send and Server response header has been handled&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... code: %d\n&amp;quot;, httpCode);&lt;br /&gt;
&lt;br /&gt;
        // file found at server&lt;br /&gt;
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {&lt;br /&gt;
          String payload = http.getString();&lt;br /&gt;
          Serial.println(payload);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... failed, error: %s\n&amp;quot;, http.errorToString(httpCode).c_str());&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      http.end();&lt;br /&gt;
    } else {&lt;br /&gt;
      Serial.println(&amp;quot;[HTTP] Unable to connect&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour envoyer des requêtes au serveur nous utilisons la librairie : #include &amp;lt;ESP8266HTTPClient.h&amp;gt; qui va permettre d'envoyer au serveur la présence de se système afin d'être sauvegardé dans le fichier IPlist.txt. Et cette requête contient l'adresse du serveur, le port et l'état de la LED de l'écran mesurer par la LDR.&lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
String getLedState(int analog)&lt;br /&gt;
{&lt;br /&gt;
  int state = map(analog, 0, 1024, 0,100);&lt;br /&gt;
  if(state &amp;gt; adjustAnalogR)&lt;br /&gt;
  {&lt;br /&gt;
     return &amp;quot;on&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    return &amp;quot;off&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici cette fonction permet simplement de mesurer la valeur analogique du CAN venant de la LDR et de retourner un String pour mieux l'incorporé dans la requête HTTP.&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
Servo servo1;  // on créé l'objet servo1&lt;br /&gt;
int onPos = 45;&lt;br /&gt;
int offPos = 135;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
servo1.attach(12);  // on dit a cette objet que le servo est sur la pin 12 dans le setup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour controler le Servo nous nous servons de librairie : #include &amp;lt;Servo.h&amp;gt;. Qui va nous permettre de controler l'angle du servo en générant un signal PWM approprié.&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
servo1.write(180);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici le servo ira à sa position 180°.&lt;br /&gt;
*Ajout d'un écran OLED monochrome pour facilité l'utilisation du système et permettre d'autres tâche dans le futur.&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// ### Exemple d'utilisation de cette librairie ###&lt;br /&gt;
#include &amp;lt;U8g2lib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifdef U8X8_HAVE_HW_I2C&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
    &lt;br /&gt;
    u8g2.begin();&lt;br /&gt;
    u8g2.clearBuffer();					// effacer le buffer de l'écran&lt;br /&gt;
    u8g2.setDisplayRotation(U8G2_R1);&lt;br /&gt;
    u8g2.setFlipMode(0);&lt;br /&gt;
    u8g2.setFont(u8g2_font_squeezed_r6_tr);	// choix de la police&lt;br /&gt;
    u8g2.drawStr(0,10,&amp;quot;Projet S8 : start&amp;quot;);	// ce qui s'affichera sur l'écran&lt;br /&gt;
    u8g2.sendBuffer();					// envoie vers le buffer&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour réaliser le support 3D, j'ai utilisé le logiciel gratuit disponible en ligne appelé [[wikipedia:Tinkercad|TinkerCad]] . Cela m'a permis de facilement réaliser des pièces sur mesure afin de faire un support modulable et pouvant s'accrocher à même l'écran pour plus de facilité d'installations.&lt;br /&gt;
&lt;br /&gt;
cf: galerie.&lt;br /&gt;
==== 5) Axes d'amélioration : ====&lt;br /&gt;
&lt;br /&gt;
===== '''Quelques difficultés rencontrés:''' =====&lt;br /&gt;
* Mauvais routage des servo sur la carte (inversion des VCC et Signal) =&amp;gt; Solution : fabrication d'un adaptateur &lt;br /&gt;
* Modélisation de plusieurs système d'accroche car le premier ne permettait pas un maintient suffisant sur l'écran.&lt;br /&gt;
* Erreur lors de la fermeture du serveur web et sa re-ouverture (port all ready use), l'erreur s'arrête après quelques secondes et le serveur web peut s'exécuté à nouveau.  &lt;br /&gt;
===== Les améliorations possibles : =====&lt;br /&gt;
* Meilleur routage de la carte en corrigeant les erreurs.&lt;br /&gt;
* Faire un PCB double face, permettant d'inclure directement le circuit de programmation (facilitant l'améliorations du programme).&lt;br /&gt;
* Refaire une nouvelle version du chassis en 3D pour corriger les petites erreurs restantes.&lt;br /&gt;
* Améliorations du programme du serveur web pour ajouter des options (ajout d'un second servo sur une même carte). &lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
Fichier:1716462734375.jpg&lt;br /&gt;
Fichier:1716462734420.jpg&lt;br /&gt;
Fichier:1716462734428.jpg&lt;br /&gt;
Fichier:1716462734409.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734375.jpg|vignette|266x266px|Ecran OLED après connection]]Vidéo disponible sur :  https://www.youtube.com/shorts/fdwK9TlrLNs[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]][[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]][[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;br /&gt;
==== Annexe : ====&lt;br /&gt;
[[Fichier:1716462734409.jpg|vignette|266x266px|dos de l'écran après montage du système]][[Fichier:1716462734428.jpg|vignette|266x266px|avant du système après montage]][[Fichier:1716462734420.jpg|vignette|266x266px|avant du système après montage 2]]Tout les programmes, photos, fichier 3D sont disponibles sur le GIT associer : https://archives.plil.fr/epeeterm/SE2a4_projet_SysRes_Peetermans_Elvis/tree/master&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6265</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6265"/>
		<updated>2024-05-30T07:30:01Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : finition&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
[[Fichier:1716462734356.jpg|427x427px|système sur l'écran|centré|sans_cadre]]&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un microcontrôleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur grâce au réseau Wifi et d'un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'ESP8266.&lt;br /&gt;
* Tester.&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte.&lt;br /&gt;
&lt;br /&gt;
Cela dit ce projet est faisable sur KICAD !&lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur) + connecteur pour la programmation du microcontrôleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne : &lt;br /&gt;
&lt;br /&gt;
Toutes deux sont fonctionnelles, mais une seule sera montré/utilisé dans ce Wiki.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
&lt;br /&gt;
* FTDI pin | ESP pin&lt;br /&gt;
* GND    -&amp;gt; GND&lt;br /&gt;
* VCC    -&amp;gt;  VCC&lt;br /&gt;
* TX    -&amp;gt;    RX&lt;br /&gt;
* RX    -&amp;gt;   TX&lt;br /&gt;
&lt;br /&gt;
[[Fichier:1717052164327.jpg|néant|vignette|266x266px|zoom pin programme]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte en maintenant la pin 0 dans son état.&lt;br /&gt;
&lt;br /&gt;
Pour téléverser le code dans le microcontrôleur, j'ai utilisé le logiciel Platform IO disponible avec [https://fr.wikipedia.org/wiki/Visual_Studio_Code VScode] . Tout les fichiers de configuration pour ce projet se trouve directement dans le dépot GIT. Il suffit de créer un nouveau projet platformIO avec le dossier Projet_S8_ESP12. Une fois cela fait, vous pouvez téléverser le code dans l'ESP8266&lt;br /&gt;
&lt;br /&gt;
lien d'installation de platform IO : https://docs.platformio.org/en/stable/integration/ide/vscode.html&lt;br /&gt;
==== 2)Réalisation du server web ====&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu.&lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité grâce à de multiples librairie comme montré en cours, tel que :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable&lt;br /&gt;
&lt;br /&gt;
De plus :&lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
De plus ce programme permet de filtrer les adresse IP pour garder seulement celle qui sont utile au process permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP &amp;quot;inutile&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter. (''on'' et ''off'' signifiant l'état de l'écran)&lt;br /&gt;
===== Mise en place : =====&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).&lt;br /&gt;
&lt;br /&gt;
Une fois le GIT  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master&lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape faite un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./webServer&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier, il vous suffit de taper :&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./webServer -p nbPort &lt;br /&gt;
#ou &lt;br /&gt;
./webServer --port nbPort&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute et en attendante de requêtes.[[Fichier:Exec serverWeb.png|vignette|509x509px|exécution du programme (serveur web)|néant]]&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois le server web lanceé, nous avons besoin d'afficher les systèmes d'écrans disponibles sur une page web pour ainsi intéragir avec eux plus facilement. &lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. &lt;br /&gt;
&lt;br /&gt;
Et une page web se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    ///évenement &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;La page ci dessous permet d'afficher tout les systèmes d'écrans s'étant connectés au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran.&lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html sans systèmes d'écrans connecté.[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|vignette|1100x1100px|Page HTML 1|néant]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html avec des systèmes d'écrans connectés.[[Fichier:Capture d’écran 2024-05-29 12-54-48.png|vignette|1100x1100px|Page HTML 2|néant]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On peut y voir que deux systèmes d'écrans se sont connecté et que l'état de l'écran est afficher sur les pastille rouges et vertes (qui servent également de bouton)&lt;br /&gt;
&lt;br /&gt;
Une fois que l'on appuie sur un bouton, cela envoie une requette http au système voulu et fera bouger le servo moteur en conséquence. Afin d'allumer ou éteindre l'écran&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe . cf : voir le TP précédant sur les routeurs.&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
WiFi.mode(WIFI_STA);&lt;br /&gt;
WiFi.hostname(newHostname);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if (!WiFi.config(apIP, gateway, subnet, primaryDNS, secondaryDNS)) {&lt;br /&gt;
Serial.println(&amp;quot;STA Failed to configure&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Serial.printf(&amp;quot;connection to %s with %s\n&amp;quot;,ssid, password );&lt;br /&gt;
WiFi.begin(ssid, password);&lt;br /&gt;
int dot_cnt = 1;&lt;br /&gt;
while (WiFi.status() != WL_CONNECTED) {&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;ESP8266WiFi.h&amp;gt; qui sur cette partie de code on peut y voir que l'esp8266 sera en mode station pour venir se connecter au routeur (ligne 1). Par la suite on configure son adresse IP (static) et autre paramètre réseau (ligne 5) et pour finir on le connecte au routeur (ligne 10).&lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
server.on(&amp;quot;/&amp;quot;, HTTP_GET, [](AsyncWebServerRequest *request){&lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;, &amp;quot;text/html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/get&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        String message = &amp;quot;Salut Fotin&amp;quot;;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, &amp;quot;Hello, GET: &amp;quot; + message);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/state&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  getLedState(analogRead(A0)));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/connect&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        send = true;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  &amp;quot;OK&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/on&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;on&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo on&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, HIGH);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/off&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;off&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo off&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, LOW);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a POST request to &amp;lt;IP&amp;gt;/post with a form field message set to &amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/post&amp;quot;, HTTP_POST, [](AsyncWebServerRequest *request){&lt;br /&gt;
        String message;&lt;br /&gt;
        String port;&lt;br /&gt;
        String server;&lt;br /&gt;
        String ServoMin;&lt;br /&gt;
        String ServoMax;&lt;br /&gt;
        if (request-&amp;gt;hasParam(PARAM_MESSAGE_4, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_5, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_2, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_3, true)) {&lt;br /&gt;
            message = request-&amp;gt;getParam(PARAM_MESSAGE, true)-&amp;gt;value();&lt;br /&gt;
            port = request-&amp;gt;getParam(PARAM_MESSAGE_2, true)-&amp;gt;value();&lt;br /&gt;
            server = request-&amp;gt;getParam(PARAM_MESSAGE_3, true)-&amp;gt;value();&lt;br /&gt;
            ServoMin = request-&amp;gt;getParam(PARAM_MESSAGE_4, true)-&amp;gt;value();&lt;br /&gt;
            ServoMax = request-&amp;gt;getParam(PARAM_MESSAGE_5, true)-&amp;gt;value();&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            message = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            port = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            server = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMin = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMax = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        Serial.println(message);&lt;br /&gt;
        Serial.println(port);&lt;br /&gt;
        Serial.println(server);&lt;br /&gt;
        Serial.println(ServoMin);&lt;br /&gt;
        Serial.println(ServoMax);&lt;br /&gt;
        // ajouter si port et server vide alors remplacer avec ceux de base&lt;br /&gt;
        server_port = port;&lt;br /&gt;
        server_ip = server;&lt;br /&gt;
        adjustAnalogR = message.toInt();&lt;br /&gt;
        onPos = ServoMin.toInt();&lt;br /&gt;
        offPos = ServoMax.toInt();&lt;br /&gt;
        &lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    server.onNotFound(notFound);&lt;br /&gt;
&lt;br /&gt;
    DefaultHeaders::Instance().addHeader(&amp;quot;Access-Control-Allow-Origin&amp;quot;, &amp;quot;*&amp;quot;);&lt;br /&gt;
    server.begin();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;AsyncTCP.h&amp;gt; et #include &amp;lt;ESPAsyncTCP.h&amp;gt; qui permettent de gérée les requêtes asynchrones et avons défini plusieurs appels possibles. De plus le programme inclu une page propre au client permettant de configurer les différents paramètres (calibrations LDR, Servo, adresse serveur / port) disponible à l'adresse IP du client (exemple : &amp;lt;nowiki&amp;gt;http://IPadresse/)(visible&amp;lt;/nowiki&amp;gt; sur l'écran OLED après démarrage)    .[[Fichier:Capture d’écran 2024-05-29 13-53-26.png|vignette|902x902px|page configurations client|néant]]&lt;br /&gt;
* envoie de requête http vers le serveur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
void sendGet()&lt;br /&gt;
{&lt;br /&gt;
    WiFiClient client;&lt;br /&gt;
&lt;br /&gt;
    HTTPClient http;&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;[HTTP] begin...\n&amp;quot;);&lt;br /&gt;
    if (http.begin(client, &amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)))) {  // HTTP&lt;br /&gt;
    Serial.println(&amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)));&lt;br /&gt;
&lt;br /&gt;
      Serial.print(&amp;quot;[HTTP] GET...\n&amp;quot;);&lt;br /&gt;
      // start connection and send HTTP header&lt;br /&gt;
      int httpCode = http.GET();&lt;br /&gt;
&lt;br /&gt;
      // httpCode will be negative on error&lt;br /&gt;
      if (httpCode &amp;gt; 0) {&lt;br /&gt;
        // HTTP header has been send and Server response header has been handled&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... code: %d\n&amp;quot;, httpCode);&lt;br /&gt;
&lt;br /&gt;
        // file found at server&lt;br /&gt;
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {&lt;br /&gt;
          String payload = http.getString();&lt;br /&gt;
          Serial.println(payload);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... failed, error: %s\n&amp;quot;, http.errorToString(httpCode).c_str());&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      http.end();&lt;br /&gt;
    } else {&lt;br /&gt;
      Serial.println(&amp;quot;[HTTP] Unable to connect&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour envoyer des requêtes au serveur nous utilisons la librairie : #include &amp;lt;ESP8266HTTPClient.h&amp;gt; qui va permettre d'envoyer au serveur la présence de se système afin d'être sauvegardé dans le fichier IPlist.txt. Et cette requête contient l'adresse du serveur, le port et l'état de la LED de l'écran mesurer par la LDR.&lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
String getLedState(int analog)&lt;br /&gt;
{&lt;br /&gt;
  int state = map(analog, 0, 1024, 0,100);&lt;br /&gt;
  if(state &amp;gt; adjustAnalogR)&lt;br /&gt;
  {&lt;br /&gt;
     return &amp;quot;on&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    return &amp;quot;off&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici cette fonction permet simplement de mesurer la valeur analogique du CAN venant de la LDR et de retourner un String pour mieux l'incorporé dans la requête HTTP.&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
Servo servo1;  // on créé l'objet servo1&lt;br /&gt;
int onPos = 45;&lt;br /&gt;
int offPos = 135;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
servo1.attach(12);  // on dit a cette objet que le servo est sur la pin 12 dans le setup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour controler le Servo nous nous servons de librairie : #include &amp;lt;Servo.h&amp;gt;. Qui va nous permettre de controler l'angle du servo en générant un signal PWM approprié.&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
servo1.write(180);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici le servo ira à sa position 180°.&lt;br /&gt;
*Ajout d'un écran OLED monochrome pour facilité l'utilisation du système et permettre d'autres tâche dans le futur.&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// ### Exemple d'utilisation de cette librairie ###&lt;br /&gt;
#include &amp;lt;U8g2lib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifdef U8X8_HAVE_HW_I2C&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
    &lt;br /&gt;
    u8g2.begin();&lt;br /&gt;
    u8g2.clearBuffer();					// effacer le buffer de l'écran&lt;br /&gt;
    u8g2.setDisplayRotation(U8G2_R1);&lt;br /&gt;
    u8g2.setFlipMode(0);&lt;br /&gt;
    u8g2.setFont(u8g2_font_squeezed_r6_tr);	// choix de la police&lt;br /&gt;
    u8g2.drawStr(0,10,&amp;quot;Projet S8 : start&amp;quot;);	// ce qui s'affichera sur l'écran&lt;br /&gt;
    u8g2.sendBuffer();					// envoie vers le buffer&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour réaliser le support 3D, j'ai utilisé le logiciel gratuit disponible en ligne appelé [[wikipedia:Tinkercad|TinkerCad]] . Cela m'a permis de facilement réaliser des pièces sur mesure afin de faire un support modulable et pouvant s'accrocher à même l'écran pour plus de facilité d'installations.&lt;br /&gt;
&lt;br /&gt;
cf: galerie.&lt;br /&gt;
==== 5) Axes d'amélioration : ====&lt;br /&gt;
===== Lors de ce projet j'ai rencontrer quelques difficultés: =====&lt;br /&gt;
* Mauvais routage des servo sur la carte (inversion des VCC et Signal) =&amp;gt; Solution : fabrication d'un adaptateur &lt;br /&gt;
* Modélisation de plusieurs système d'accroche car le premier ne permettait pas un maintient suffisant sur l'écran.&lt;br /&gt;
* Erreur lors de la fermeture du serveur web et sa re-ouverture (port all ready use), l'erreur s'arrête après quelques secondes et le serveur web peut s'exécuté à nouveau.  &lt;br /&gt;
===== Les améliorations possibles : =====&lt;br /&gt;
* Meilleur routage de la carte en corrigeant les erreurs.&lt;br /&gt;
* Faire un PCB double face, permettant d'inclure directement le circuit de programmation (facilitant l'améliorations du programme).&lt;br /&gt;
* Refaire une nouvelle version du chassis en 3D pour corriger les petites erreurs restantes.&lt;br /&gt;
* Améliorations du programme du serveur web pour ajouter des options (ajout d'un second servo sur une même carte). &lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
Fichier:1716462734375.jpg&lt;br /&gt;
Fichier:1716462734420.jpg&lt;br /&gt;
Fichier:1716462734428.jpg&lt;br /&gt;
Fichier:1716462734409.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734375.jpg|vignette|266x266px|Ecran OLED après connection]]Vidéo disponible sur :  https://www.youtube.com/shorts/fdwK9TlrLNs[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]][[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]][[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;br /&gt;
==== Annexe : ====&lt;br /&gt;
[[Fichier:1716462734409.jpg|vignette|266x266px|dos de l'écran après montage du système]][[Fichier:1716462734428.jpg|vignette|266x266px|avant du système après montage]][[Fichier:1716462734420.jpg|vignette|266x266px|avant du système après montage 2]]Tout les programmes, photos, fichier 3D sont disponibles sur le GIT associer : https://archives.plil.fr/epeeterm/SE2a4_projet_SysRes_Peetermans_Elvis/tree/master&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:1717052164327.jpg&amp;diff=6264</id>
		<title>Fichier:1717052164327.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:1717052164327.jpg&amp;diff=6264"/>
		<updated>2024-05-30T07:08:58Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;zoom pin programme&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6263</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6263"/>
		<updated>2024-05-30T06:42:43Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : ajout photos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
[[Fichier:1716462734356.jpg|427x427px|système sur l'écran|centré|sans_cadre]]&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
==== 2)Réalisation du server web ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html sans systèmes d'écrans connecté.  &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html avec des systèmes d'écrans connectés. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-29 12-54-48.png|gauche|vignette|1100x1100px|Page HTML 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
On peut y voir que deux systèmes d'écrans ce sont connecté et que l'état de l'écran est afficher sur les pastille rouges et vertes (qui servent également de bouton)&lt;br /&gt;
&lt;br /&gt;
Une fois que l'on appuie sur un bouton, cela envoie une requette http au système voulu et fera bouger le servo moteur en conséquence. Afin d'allumer ou éteindre l'écran&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe . cf : voir le TP précédant sur les routeurs.&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
WiFi.mode(WIFI_STA);&lt;br /&gt;
WiFi.hostname(newHostname);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if (!WiFi.config(apIP, gateway, subnet, primaryDNS, secondaryDNS)) {&lt;br /&gt;
Serial.println(&amp;quot;STA Failed to configure&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Serial.printf(&amp;quot;connection to %s with %s\n&amp;quot;,ssid, password );&lt;br /&gt;
WiFi.begin(ssid, password);&lt;br /&gt;
int dot_cnt = 1;&lt;br /&gt;
while (WiFi.status() != WL_CONNECTED) {&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;ESP8266WiFi.h&amp;gt; qui sur cette partie de code on peut y voir que l'esp8266 sera en mode station pour venir se connecter au routeur (ligne 1). Par la suite on configure son adresse IP (static) et autre paramètre réseau (ligne 5) et pour finir on le connecte au routeur (ligne 10).&lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
server.on(&amp;quot;/&amp;quot;, HTTP_GET, [](AsyncWebServerRequest *request){&lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;, &amp;quot;text/html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/get&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        String message = &amp;quot;Salut Fotin&amp;quot;;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, &amp;quot;Hello, GET: &amp;quot; + message);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/state&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  getLedState(analogRead(A0)));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/connect&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        send = true;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  &amp;quot;OK&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/on&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;on&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo on&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, HIGH);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/off&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;off&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo off&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, LOW);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a POST request to &amp;lt;IP&amp;gt;/post with a form field message set to &amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/post&amp;quot;, HTTP_POST, [](AsyncWebServerRequest *request){&lt;br /&gt;
        String message;&lt;br /&gt;
        String port;&lt;br /&gt;
        String server;&lt;br /&gt;
        String ServoMin;&lt;br /&gt;
        String ServoMax;&lt;br /&gt;
        if (request-&amp;gt;hasParam(PARAM_MESSAGE_4, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_5, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_2, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_3, true)) {&lt;br /&gt;
            message = request-&amp;gt;getParam(PARAM_MESSAGE, true)-&amp;gt;value();&lt;br /&gt;
            port = request-&amp;gt;getParam(PARAM_MESSAGE_2, true)-&amp;gt;value();&lt;br /&gt;
            server = request-&amp;gt;getParam(PARAM_MESSAGE_3, true)-&amp;gt;value();&lt;br /&gt;
            ServoMin = request-&amp;gt;getParam(PARAM_MESSAGE_4, true)-&amp;gt;value();&lt;br /&gt;
            ServoMax = request-&amp;gt;getParam(PARAM_MESSAGE_5, true)-&amp;gt;value();&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            message = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            port = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            server = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMin = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMax = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        Serial.println(message);&lt;br /&gt;
        Serial.println(port);&lt;br /&gt;
        Serial.println(server);&lt;br /&gt;
        Serial.println(ServoMin);&lt;br /&gt;
        Serial.println(ServoMax);&lt;br /&gt;
        // ajouter si port et server vide alors remplacer avec ceux de base&lt;br /&gt;
        server_port = port;&lt;br /&gt;
        server_ip = server;&lt;br /&gt;
        adjustAnalogR = message.toInt();&lt;br /&gt;
        onPos = ServoMin.toInt();&lt;br /&gt;
        offPos = ServoMax.toInt();&lt;br /&gt;
        &lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    server.onNotFound(notFound);&lt;br /&gt;
&lt;br /&gt;
    DefaultHeaders::Instance().addHeader(&amp;quot;Access-Control-Allow-Origin&amp;quot;, &amp;quot;*&amp;quot;);&lt;br /&gt;
    server.begin();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;AsyncTCP.h&amp;gt; et #include &amp;lt;ESPAsyncTCP.h&amp;gt; qui permettent de gérée les requêtes asynchrones et avons défini plusieurs appels possibles. De plus le programme inclu une page propre au client permettant de configurer les différents paramètres (calibrations LDR, Servo, adresse serveur / port) disponible à l'adresse IP du client (exemple : &amp;lt;nowiki&amp;gt;http://IPadresse/)(visible&amp;lt;/nowiki&amp;gt; sur l'écran OLED après démarrage)    .      [[Fichier:Capture d’écran 2024-05-29 13-53-26.png|gauche|vignette|902x902px|page configurations client]].&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
* envoie de requête http vers le serveur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
void sendGet()&lt;br /&gt;
{&lt;br /&gt;
    WiFiClient client;&lt;br /&gt;
&lt;br /&gt;
    HTTPClient http;&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;[HTTP] begin...\n&amp;quot;);&lt;br /&gt;
    if (http.begin(client, &amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)))) {  // HTTP&lt;br /&gt;
    Serial.println(&amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)));&lt;br /&gt;
&lt;br /&gt;
      Serial.print(&amp;quot;[HTTP] GET...\n&amp;quot;);&lt;br /&gt;
      // start connection and send HTTP header&lt;br /&gt;
      int httpCode = http.GET();&lt;br /&gt;
&lt;br /&gt;
      // httpCode will be negative on error&lt;br /&gt;
      if (httpCode &amp;gt; 0) {&lt;br /&gt;
        // HTTP header has been send and Server response header has been handled&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... code: %d\n&amp;quot;, httpCode);&lt;br /&gt;
&lt;br /&gt;
        // file found at server&lt;br /&gt;
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {&lt;br /&gt;
          String payload = http.getString();&lt;br /&gt;
          Serial.println(payload);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... failed, error: %s\n&amp;quot;, http.errorToString(httpCode).c_str());&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      http.end();&lt;br /&gt;
    } else {&lt;br /&gt;
      Serial.println(&amp;quot;[HTTP] Unable to connect&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour envoyer des requêtes au serveur nous utilisons la librairie : #include &amp;lt;ESP8266HTTPClient.h&amp;gt; qui va permettre d'envoyer au serveur la présence de se système afin d'être sauvegardé dans le fichier IPlist.txt. Et cette requête contient l'adresse du serveur, le port et l'état de la LED de l'écran mesurer par la LDR.&lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
String getLedState(int analog)&lt;br /&gt;
{&lt;br /&gt;
  int state = map(analog, 0, 1024, 0,100);&lt;br /&gt;
  if(state &amp;gt; adjustAnalogR)&lt;br /&gt;
  {&lt;br /&gt;
     return &amp;quot;on&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    return &amp;quot;off&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici cette fonction permet simplement de mesurer la valeur analogique du CAN venant de la LDR et de retourner un String pour mieux l'incorporé dans la requête HTTP.&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
Servo servo1;  // on créé l'objet servo1&lt;br /&gt;
int onPos = 45;&lt;br /&gt;
int offPos = 135;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
servo1.attach(12);  // on dit a cette objet que le servo est sur la pin 12 dans le setup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour controler le Servo nous nous servons de librairie : #include &amp;lt;Servo.h&amp;gt;. Qui va nous permettre de controler l'angle du servo en générant un signal PWM approprié.&lt;br /&gt;
*Ajout d'un écran OLED monochrome pour facilité l'utilisation du système et permettre d'autres tâche dans le futur.&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// ### Exemple d'utilisation de cette librairie ###&lt;br /&gt;
#include &amp;lt;U8g2lib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifdef U8X8_HAVE_HW_I2C&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
    &lt;br /&gt;
    u8g2.begin();&lt;br /&gt;
    u8g2.clearBuffer();					// effacer le buffer de l'écran&lt;br /&gt;
    u8g2.setDisplayRotation(U8G2_R1);&lt;br /&gt;
    u8g2.setFlipMode(0);&lt;br /&gt;
    u8g2.setFont(u8g2_font_squeezed_r6_tr);	// choix de la police&lt;br /&gt;
    u8g2.drawStr(0,10,&amp;quot;Projet S8 : start&amp;quot;);	// ce qui s'affichera sur l'écran&lt;br /&gt;
    u8g2.sendBuffer();					// envoie vers le buffer&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour réaliser le support 3D, j'ai utilisé le logiciel gratuit disponible en ligne appelé [[wikipedia:Tinkercad|TinkerCad]] . Cela m'a permis de facilement réaliser des pièces sur mesure afin de faire un support modulable et pouvant s'accrocher à même l'écran pour plus de facilité d'installations.&lt;br /&gt;
&lt;br /&gt;
cf: galerie.&lt;br /&gt;
&lt;br /&gt;
==== 5) Axes d'amélioration : ====&lt;br /&gt;
&lt;br /&gt;
===== Lors de ce projet j'ai rencontrer quelques difficultés: =====&lt;br /&gt;
* Mauvais routage des servo sur la carte (inversion des VCC et Signal) =&amp;gt; Solution : fabrication d'un adaptateur &lt;br /&gt;
* Modélisation de plusieurs système d'accroche car le premier ne permettait pas un maintient suffisant sur l'écran.&lt;br /&gt;
* Erreur lors de la fermeture du serveur web et sa re-ouverture (port all ready use), l'erreur s'arrête après quelques secondes et le serveur web peut s'exécuté à nouveau.  &lt;br /&gt;
&lt;br /&gt;
===== Les améliorations possibles : =====&lt;br /&gt;
* Meilleur routage de la carte en corrigeant les erreurs.&lt;br /&gt;
* Faire un PCB double face, permettant d'inclure directement le circuit de programmation (facilitant l'améliorations du programme).&lt;br /&gt;
* Refaire une nouvelle version du chassis en 3D pour corriger les petites erreurs restantes.&lt;br /&gt;
* Améliorations du programme du serveur web pour ajouter des options (ajout d'un second servo sur une même carte). &lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
Fichier:1716462734375.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
[[Fichier:1716462734375.jpg|vignette|266x266px|Ecran OLED après connection]]&lt;br /&gt;
Vidéo disponible sur :  https://www.youtube.com/shorts/fdwK9TlrLNs[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;br /&gt;
&lt;br /&gt;
==== Annexe : ====&lt;br /&gt;
[[Fichier:1716462734409.jpg|vignette|266x266px|dos de l'écran après montage du système]]&lt;br /&gt;
[[Fichier:1716462734428.jpg|vignette|266x266px|avant du système après montage]]&lt;br /&gt;
[[Fichier:1716462734420.jpg|vignette|266x266px|avant du système après montage 2]]&lt;br /&gt;
Tout les programmes, photos, fichier 3D sont disponibles sur le GIT associer.&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:1716462734420.jpg&amp;diff=6262</id>
		<title>Fichier:1716462734420.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:1716462734420.jpg&amp;diff=6262"/>
		<updated>2024-05-30T06:37:10Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;avant du système après montage&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:1716462734428.jpg&amp;diff=6261</id>
		<title>Fichier:1716462734428.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:1716462734428.jpg&amp;diff=6261"/>
		<updated>2024-05-30T06:36:31Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;avant du système après montage&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:1716462734409.jpg&amp;diff=6260</id>
		<title>Fichier:1716462734409.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:1716462734409.jpg&amp;diff=6260"/>
		<updated>2024-05-30T06:35:04Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;dos de l'écran après montage du système&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:1716462734375.jpg&amp;diff=6259</id>
		<title>Fichier:1716462734375.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:1716462734375.jpg&amp;diff=6259"/>
		<updated>2024-05-30T06:33:00Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ecran oled&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6214</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6214"/>
		<updated>2024-05-29T12:03:40Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : ajout détail&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
==== 2)Réalisation du server web ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html sans systèmes d'écrans connecté.  &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html avec des systèmes d'écrans connectés. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-29 12-54-48.png|gauche|vignette|1100x1100px|Page HTML 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
On peut y voir que deux systèmes d'écrans ce sont connecté et que l'état de l'écran est afficher sur les pastille rouges et vertes (qui servent également de bouton)&lt;br /&gt;
&lt;br /&gt;
Une fois que l'on appuie sur un bouton, cela envoie une requette http au système voulu et fera bouger le servo moteur en conséquence. Afin d'allumer ou éteindre l'écran&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe . cf : voir le TP précédant sur les routeurs.&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
WiFi.mode(WIFI_STA);&lt;br /&gt;
WiFi.hostname(newHostname);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if (!WiFi.config(apIP, gateway, subnet, primaryDNS, secondaryDNS)) {&lt;br /&gt;
Serial.println(&amp;quot;STA Failed to configure&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Serial.printf(&amp;quot;connection to %s with %s\n&amp;quot;,ssid, password );&lt;br /&gt;
WiFi.begin(ssid, password);&lt;br /&gt;
int dot_cnt = 1;&lt;br /&gt;
while (WiFi.status() != WL_CONNECTED) {&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;ESP8266WiFi.h&amp;gt; qui sur cette partie de code on peut y voir que l'esp8266 sera en mode station pour venir se connecter au routeur (ligne 1). Par la suite on configure son adresse IP (static) et autre paramètre réseau (ligne 5) et pour finir on le connecte au routeur (ligne 10).&lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
server.on(&amp;quot;/&amp;quot;, HTTP_GET, [](AsyncWebServerRequest *request){&lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;, &amp;quot;text/html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/get&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        String message = &amp;quot;Salut Fotin&amp;quot;;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, &amp;quot;Hello, GET: &amp;quot; + message);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/state&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  getLedState(analogRead(A0)));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/connect&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        send = true;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  &amp;quot;OK&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/on&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;on&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo on&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, HIGH);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/off&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;off&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo off&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, LOW);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a POST request to &amp;lt;IP&amp;gt;/post with a form field message set to &amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/post&amp;quot;, HTTP_POST, [](AsyncWebServerRequest *request){&lt;br /&gt;
        String message;&lt;br /&gt;
        String port;&lt;br /&gt;
        String server;&lt;br /&gt;
        String ServoMin;&lt;br /&gt;
        String ServoMax;&lt;br /&gt;
        if (request-&amp;gt;hasParam(PARAM_MESSAGE_4, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_5, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_2, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_3, true)) {&lt;br /&gt;
            message = request-&amp;gt;getParam(PARAM_MESSAGE, true)-&amp;gt;value();&lt;br /&gt;
            port = request-&amp;gt;getParam(PARAM_MESSAGE_2, true)-&amp;gt;value();&lt;br /&gt;
            server = request-&amp;gt;getParam(PARAM_MESSAGE_3, true)-&amp;gt;value();&lt;br /&gt;
            ServoMin = request-&amp;gt;getParam(PARAM_MESSAGE_4, true)-&amp;gt;value();&lt;br /&gt;
            ServoMax = request-&amp;gt;getParam(PARAM_MESSAGE_5, true)-&amp;gt;value();&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            message = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            port = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            server = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMin = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMax = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        Serial.println(message);&lt;br /&gt;
        Serial.println(port);&lt;br /&gt;
        Serial.println(server);&lt;br /&gt;
        Serial.println(ServoMin);&lt;br /&gt;
        Serial.println(ServoMax);&lt;br /&gt;
        // ajouter si port et server vide alors remplacer avec ceux de base&lt;br /&gt;
        server_port = port;&lt;br /&gt;
        server_ip = server;&lt;br /&gt;
        adjustAnalogR = message.toInt();&lt;br /&gt;
        onPos = ServoMin.toInt();&lt;br /&gt;
        offPos = ServoMax.toInt();&lt;br /&gt;
        &lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    server.onNotFound(notFound);&lt;br /&gt;
&lt;br /&gt;
    DefaultHeaders::Instance().addHeader(&amp;quot;Access-Control-Allow-Origin&amp;quot;, &amp;quot;*&amp;quot;);&lt;br /&gt;
    server.begin();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;AsyncTCP.h&amp;gt; et #include &amp;lt;ESPAsyncTCP.h&amp;gt; qui permettent de gérée les requêtes asynchrones et avons défini plusieurs appels possibles. De plus le programme inclu une page propre au client permettant de configurer les différents paramètres (calibrations LDR, Servo, adresse serveur / port) disponible à l'adresse IP du client (exemple : &amp;lt;nowiki&amp;gt;http://IPadresse/)(visible&amp;lt;/nowiki&amp;gt; sur l'écran OLED après démarrage)    .      [[Fichier:Capture d’écran 2024-05-29 13-53-26.png|gauche|vignette|902x902px|page configurations client]].&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
* envoie de requête http vers le serveur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
void sendGet()&lt;br /&gt;
{&lt;br /&gt;
    WiFiClient client;&lt;br /&gt;
&lt;br /&gt;
    HTTPClient http;&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;[HTTP] begin...\n&amp;quot;);&lt;br /&gt;
    if (http.begin(client, &amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)))) {  // HTTP&lt;br /&gt;
    Serial.println(&amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)));&lt;br /&gt;
&lt;br /&gt;
      Serial.print(&amp;quot;[HTTP] GET...\n&amp;quot;);&lt;br /&gt;
      // start connection and send HTTP header&lt;br /&gt;
      int httpCode = http.GET();&lt;br /&gt;
&lt;br /&gt;
      // httpCode will be negative on error&lt;br /&gt;
      if (httpCode &amp;gt; 0) {&lt;br /&gt;
        // HTTP header has been send and Server response header has been handled&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... code: %d\n&amp;quot;, httpCode);&lt;br /&gt;
&lt;br /&gt;
        // file found at server&lt;br /&gt;
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {&lt;br /&gt;
          String payload = http.getString();&lt;br /&gt;
          Serial.println(payload);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... failed, error: %s\n&amp;quot;, http.errorToString(httpCode).c_str());&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      http.end();&lt;br /&gt;
    } else {&lt;br /&gt;
      Serial.println(&amp;quot;[HTTP] Unable to connect&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour envoyer des requêtes au serveur nous utilisons la librairie : #include &amp;lt;ESP8266HTTPClient.h&amp;gt; qui va permettre d'envoyer au serveur la présence de se système afin d'être sauvegardé dans le fichier IPlist.txt. Et cette requête contient l'adresse du serveur, le port et l'état de la LED de l'écran mesurer par la LDR.&lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
String getLedState(int analog)&lt;br /&gt;
{&lt;br /&gt;
  int state = map(analog, 0, 1024, 0,100);&lt;br /&gt;
  if(state &amp;gt; adjustAnalogR)&lt;br /&gt;
  {&lt;br /&gt;
     return &amp;quot;on&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    return &amp;quot;off&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici cette fonction permet simplement de mesurer la valeur analogique du CAN venant de la LDR et de retourner un String pour mieux l'incorporé dans la requête HTTP.&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
Servo servo1;  // on créé l'objet servo1&lt;br /&gt;
int onPos = 45;&lt;br /&gt;
int offPos = 135;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
servo1.attach(12);  // on dit a cette objet que le servo est sur la pin 12 dans le setup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour controler le Servo nous nous servons de librairie : #include &amp;lt;Servo.h&amp;gt;. Qui va nous permettre de controler l'angle du servo en générant un signal PWM approprié.&lt;br /&gt;
*Ajout d'un écran OLED monochrome pour facilité l'utilisation du système et permettre d'autres tâche dans le futur.&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// ### Exemple d'utilisation de cette librairie ###&lt;br /&gt;
#include &amp;lt;U8g2lib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifdef U8X8_HAVE_HW_I2C&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
    &lt;br /&gt;
    u8g2.begin();&lt;br /&gt;
    u8g2.clearBuffer();					// effacer le buffer de l'écran&lt;br /&gt;
    u8g2.setDisplayRotation(U8G2_R1);&lt;br /&gt;
    u8g2.setFlipMode(0);&lt;br /&gt;
    u8g2.setFont(u8g2_font_squeezed_r6_tr);	// choix de la police&lt;br /&gt;
    u8g2.drawStr(0,10,&amp;quot;Projet S8 : start&amp;quot;);	// ce qui s'affichera sur l'écran&lt;br /&gt;
    u8g2.sendBuffer();					// envoie vers le buffer&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour réaliser le support 3D, j'ai utilisé le logiciel gratuit disponible en ligne appelé [[wikipedia:Tinkercad|TinkerCad]] . Cela m'a permis de facilement réaliser des pièces sur mesure afin de faire un support modulable et pouvant s'accrocher à même l'écran pour plus de facilité d'installations.&lt;br /&gt;
&lt;br /&gt;
cf: galerie.&lt;br /&gt;
&lt;br /&gt;
===== 5) Axes d'amélioration : =====&lt;br /&gt;
&lt;br /&gt;
====== Lors de ce projet j'ai rencontrer quelques difficultés: ======&lt;br /&gt;
&lt;br /&gt;
* Mauvais routage des servo sur la carte (inversion des VCC et Signal) =&amp;gt; Solution : fabrication d'un adaptateur &lt;br /&gt;
* Modélisation de plusieurs système d'accroche car le premier ne permettait pas un maintient suffisant sur l'écran.&lt;br /&gt;
* Erreur lors de la fermeture du serveur web et sa re-ouverture (port all ready use), l'erreur s'arrête après quelques secondes et le serveur web peut s'exécuté à nouveau.  &lt;br /&gt;
&lt;br /&gt;
====== Les améliorations possibles : ======&lt;br /&gt;
&lt;br /&gt;
* Meilleur routage de la carte en corrigeant les erreurs.&lt;br /&gt;
* Faire un PCB double face, permettant d'inclure directement le circuit de programmation (facilitant l'améliorations du programme).&lt;br /&gt;
* Refaire une nouvelle version du chassis en 3D pour corriger les petites erreurs restantes.&lt;br /&gt;
* Améliorations du programme du serveur web pour ajouter des options (ajout d'un second servo sur une même carte). &lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;br /&gt;
&lt;br /&gt;
===== Annexe : =====&lt;br /&gt;
Tout les programmes, photos, fichier 3D sont disponibles sur le GIT associer.&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6213</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6213"/>
		<updated>2024-05-29T12:02:51Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
==== 2)Réalisation du server web ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html sans systèmes d'écrans connecté.  &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html avec des systèmes d'écrans connectés. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-29 12-54-48.png|gauche|vignette|1100x1100px|Page HTML 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
On peut y voir que deux systèmes d'écrans ce sont connecté et que l'état de l'écran est afficher sur les pastille rouges et vertes (qui servent également de bouton)&lt;br /&gt;
&lt;br /&gt;
Une fois que l'on appuie sur un bouton, cela envoie une requette http au système voulu et fera bouger le servo moteur en conséquence. Afin d'allumer ou éteindre l'écran&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe . cf : voir le TP précédant sur les routeurs.&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
WiFi.mode(WIFI_STA);&lt;br /&gt;
WiFi.hostname(newHostname);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if (!WiFi.config(apIP, gateway, subnet, primaryDNS, secondaryDNS)) {&lt;br /&gt;
Serial.println(&amp;quot;STA Failed to configure&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Serial.printf(&amp;quot;connection to %s with %s\n&amp;quot;,ssid, password );&lt;br /&gt;
WiFi.begin(ssid, password);&lt;br /&gt;
int dot_cnt = 1;&lt;br /&gt;
while (WiFi.status() != WL_CONNECTED) {&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;ESP8266WiFi.h&amp;gt; qui sur cette partie de code on peut y voir que l'esp8266 sera en mode station pour venir se connecter au routeur (ligne 1). Par la suite on configure son adresse IP (static) et autre paramètre réseau (ligne 5) et pour finir on le connecte au routeur (ligne 10).&lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
server.on(&amp;quot;/&amp;quot;, HTTP_GET, [](AsyncWebServerRequest *request){&lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;, &amp;quot;text/html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/get&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        String message = &amp;quot;Salut Fotin&amp;quot;;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, &amp;quot;Hello, GET: &amp;quot; + message);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/state&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  getLedState(analogRead(A0)));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/connect&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        send = true;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  &amp;quot;OK&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/on&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;on&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo on&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, HIGH);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/off&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;off&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo off&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, LOW);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a POST request to &amp;lt;IP&amp;gt;/post with a form field message set to &amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/post&amp;quot;, HTTP_POST, [](AsyncWebServerRequest *request){&lt;br /&gt;
        String message;&lt;br /&gt;
        String port;&lt;br /&gt;
        String server;&lt;br /&gt;
        String ServoMin;&lt;br /&gt;
        String ServoMax;&lt;br /&gt;
        if (request-&amp;gt;hasParam(PARAM_MESSAGE_4, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_5, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_2, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_3, true)) {&lt;br /&gt;
            message = request-&amp;gt;getParam(PARAM_MESSAGE, true)-&amp;gt;value();&lt;br /&gt;
            port = request-&amp;gt;getParam(PARAM_MESSAGE_2, true)-&amp;gt;value();&lt;br /&gt;
            server = request-&amp;gt;getParam(PARAM_MESSAGE_3, true)-&amp;gt;value();&lt;br /&gt;
            ServoMin = request-&amp;gt;getParam(PARAM_MESSAGE_4, true)-&amp;gt;value();&lt;br /&gt;
            ServoMax = request-&amp;gt;getParam(PARAM_MESSAGE_5, true)-&amp;gt;value();&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            message = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            port = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            server = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMin = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMax = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        Serial.println(message);&lt;br /&gt;
        Serial.println(port);&lt;br /&gt;
        Serial.println(server);&lt;br /&gt;
        Serial.println(ServoMin);&lt;br /&gt;
        Serial.println(ServoMax);&lt;br /&gt;
        // ajouter si port et server vide alors remplacer avec ceux de base&lt;br /&gt;
        server_port = port;&lt;br /&gt;
        server_ip = server;&lt;br /&gt;
        adjustAnalogR = message.toInt();&lt;br /&gt;
        onPos = ServoMin.toInt();&lt;br /&gt;
        offPos = ServoMax.toInt();&lt;br /&gt;
        &lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    server.onNotFound(notFound);&lt;br /&gt;
&lt;br /&gt;
    DefaultHeaders::Instance().addHeader(&amp;quot;Access-Control-Allow-Origin&amp;quot;, &amp;quot;*&amp;quot;);&lt;br /&gt;
    server.begin();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;AsyncTCP.h&amp;gt; et #include &amp;lt;ESPAsyncTCP.h&amp;gt; qui permettent de gérée les requêtes asynchrones et avons défini plusieurs appels possibles. De plus le programme inclu une page propre au client permettant de configurer les différents paramètres (calibrations LDR, Servo, adresse serveur / port) disponible à l'adresse IP du client (exemple : &amp;lt;nowiki&amp;gt;http://IPadresse/)(visible&amp;lt;/nowiki&amp;gt; sur l'écran OLED après démarrage)    .      [[Fichier:Capture d’écran 2024-05-29 13-53-26.png|gauche|vignette|902x902px|page configurations client]].&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
* envoie de requête http vers le serveur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
void sendGet()&lt;br /&gt;
{&lt;br /&gt;
    WiFiClient client;&lt;br /&gt;
&lt;br /&gt;
    HTTPClient http;&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;[HTTP] begin...\n&amp;quot;);&lt;br /&gt;
    if (http.begin(client, &amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)))) {  // HTTP&lt;br /&gt;
    Serial.println(&amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)));&lt;br /&gt;
&lt;br /&gt;
      Serial.print(&amp;quot;[HTTP] GET...\n&amp;quot;);&lt;br /&gt;
      // start connection and send HTTP header&lt;br /&gt;
      int httpCode = http.GET();&lt;br /&gt;
&lt;br /&gt;
      // httpCode will be negative on error&lt;br /&gt;
      if (httpCode &amp;gt; 0) {&lt;br /&gt;
        // HTTP header has been send and Server response header has been handled&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... code: %d\n&amp;quot;, httpCode);&lt;br /&gt;
&lt;br /&gt;
        // file found at server&lt;br /&gt;
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {&lt;br /&gt;
          String payload = http.getString();&lt;br /&gt;
          Serial.println(payload);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... failed, error: %s\n&amp;quot;, http.errorToString(httpCode).c_str());&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      http.end();&lt;br /&gt;
    } else {&lt;br /&gt;
      Serial.println(&amp;quot;[HTTP] Unable to connect&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour envoyer des requêtes au serveur nous utilisons la librairie : #include &amp;lt;ESP8266HTTPClient.h&amp;gt; qui va permettre d'envoyer au serveur la présence de se système afin d'être sauvegardé dans le fichier IPlist.txt. Et cette requête contient l'adresse du serveur, le port et l'état de la LED de l'écran mesurer par la LDR.&lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
String getLedState(int analog)&lt;br /&gt;
{&lt;br /&gt;
  int state = map(analog, 0, 1024, 0,100);&lt;br /&gt;
  if(state &amp;gt; adjustAnalogR)&lt;br /&gt;
  {&lt;br /&gt;
     return &amp;quot;on&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    return &amp;quot;off&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici cette fonction permet simplement de mesurer la valeur analogique du CAN venant de la LDR et de retourner un String pour mieux l'incorporé dans la requête HTTP.&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
Servo servo1;  // on créé l'objet servo1&lt;br /&gt;
int onPos = 45;&lt;br /&gt;
int offPos = 135;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
servo1.attach(12);  // on dit a cette objet que le servo est sur la pin 12 dans le setup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour controler le Servo nous nous servons de librairie : #include &amp;lt;Servo.h&amp;gt;. Qui va nous permettre de controler l'angle du servo en générant un signal PWM approprié.&lt;br /&gt;
*Ajout d'un écran OLED monochrome pour facilité l'utilisation du système et permettre d'autres tâche dans le futur.&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// ### Exemple d'utilisation de cette librairie ###&lt;br /&gt;
#include &amp;lt;U8g2lib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifdef U8X8_HAVE_HW_I2C&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
    &lt;br /&gt;
    u8g2.begin();&lt;br /&gt;
    u8g2.clearBuffer();					// effacer le buffer de l'écran&lt;br /&gt;
    u8g2.setDisplayRotation(U8G2_R1);&lt;br /&gt;
    u8g2.setFlipMode(0);&lt;br /&gt;
    u8g2.setFont(u8g2_font_squeezed_r6_tr);	// choix de la police&lt;br /&gt;
    u8g2.drawStr(0,10,&amp;quot;Projet S8 : start&amp;quot;);	// ce qui s'affichera sur l'écran&lt;br /&gt;
    u8g2.sendBuffer();					// envoie vers le buffer&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour réaliser le support 3D, j'ai utilisé le logiciel gratuit disponible en ligne appelé [[wikipedia:Tinkercad|TinkerCad]] . Cela m'a permis de facilement réaliser des pièces sur mesure afin de faire un support modulable et pouvant s'accrocher à même l'écran pour plus de facilité d'installations.&lt;br /&gt;
&lt;br /&gt;
cf: galerie.&lt;br /&gt;
&lt;br /&gt;
===== 5) Axes d'amélioration : =====&lt;br /&gt;
&lt;br /&gt;
====== Lors de ce projet j'ai rencontrer quelques difficultés: ======&lt;br /&gt;
&lt;br /&gt;
* Mauvais routage des servo sur la carte (inversion des VCC et Signal) =&amp;gt; Solution : fabrication d'un adaptateur &lt;br /&gt;
* Modélisation de plusieurs système d'accroche car le premier ne permettait pas un maintient suffisant sur l'écran.&lt;br /&gt;
* Erreur lors de la fermeture du serveur web et sa re-ouverture (port all ready use), l'erreur s'arrête après quelques secondes et le serveur web peut s'exécuté à nouveau.  &lt;br /&gt;
&lt;br /&gt;
====== Les améliorations possibles : ======&lt;br /&gt;
&lt;br /&gt;
* Meilleur routage de la carte en corrigeant les erreurs.&lt;br /&gt;
* Faire un PCB double face, permettant d'inclure directement le circuit de programmation (facilitant l'améliorations du programme).&lt;br /&gt;
* Refaire une nouvelle version du chassis en 3D pour corriger les petites erreurs restantes.&lt;br /&gt;
* Améliorations du programme du serveur web pour ajouter des options (ajout d'un second servo sur une même carte). &lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;br /&gt;
&lt;br /&gt;
===== Annexe : =====&lt;br /&gt;
Tout les programmes, photos, fichier 3D sont disponibles sur le GIT associer.&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6212</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6212"/>
		<updated>2024-05-29T12:00:41Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
==== 2)Réalisation du server web ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html sans systèmes d'écrans connecté.  &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html avec des systèmes d'écrans connectés. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-29 12-54-48.png|gauche|vignette|1100x1100px|Page HTML 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
On peut y voir que deux systèmes d'écrans ce sont connecté et que l'état de l'écran est afficher sur les pastille rouges et vertes (qui servent également de bouton)&lt;br /&gt;
&lt;br /&gt;
Une fois que l'on appuie sur un bouton, cela envoie une requette http au système voulu et fera bouger le servo moteur en conséquence. Afin d'allumer ou éteindre l'écran&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe . cf : voir le TP précédant sur les routeurs.&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
WiFi.mode(WIFI_STA);&lt;br /&gt;
WiFi.hostname(newHostname);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if (!WiFi.config(apIP, gateway, subnet, primaryDNS, secondaryDNS)) {&lt;br /&gt;
Serial.println(&amp;quot;STA Failed to configure&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Serial.printf(&amp;quot;connection to %s with %s\n&amp;quot;,ssid, password );&lt;br /&gt;
WiFi.begin(ssid, password);&lt;br /&gt;
int dot_cnt = 1;&lt;br /&gt;
while (WiFi.status() != WL_CONNECTED) {&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;ESP8266WiFi.h&amp;gt; qui sur cette partie de code on peut y voir que l'esp8266 sera en mode station pour venir se connecter au routeur (ligne 1). Par la suite on configure son adresse IP (static) et autre paramètre réseau (ligne 5) et pour finir on le connecte au routeur (ligne 10).&lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
server.on(&amp;quot;/&amp;quot;, HTTP_GET, [](AsyncWebServerRequest *request){&lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;, &amp;quot;text/html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/get&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        String message = &amp;quot;Salut Fotin&amp;quot;;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, &amp;quot;Hello, GET: &amp;quot; + message);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/state&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  getLedState(analogRead(A0)));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/connect&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        send = true;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  &amp;quot;OK&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/on&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;on&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo on&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, HIGH);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/off&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;off&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo off&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, LOW);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a POST request to &amp;lt;IP&amp;gt;/post with a form field message set to &amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/post&amp;quot;, HTTP_POST, [](AsyncWebServerRequest *request){&lt;br /&gt;
        String message;&lt;br /&gt;
        String port;&lt;br /&gt;
        String server;&lt;br /&gt;
        String ServoMin;&lt;br /&gt;
        String ServoMax;&lt;br /&gt;
        if (request-&amp;gt;hasParam(PARAM_MESSAGE_4, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_5, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_2, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_3, true)) {&lt;br /&gt;
            message = request-&amp;gt;getParam(PARAM_MESSAGE, true)-&amp;gt;value();&lt;br /&gt;
            port = request-&amp;gt;getParam(PARAM_MESSAGE_2, true)-&amp;gt;value();&lt;br /&gt;
            server = request-&amp;gt;getParam(PARAM_MESSAGE_3, true)-&amp;gt;value();&lt;br /&gt;
            ServoMin = request-&amp;gt;getParam(PARAM_MESSAGE_4, true)-&amp;gt;value();&lt;br /&gt;
            ServoMax = request-&amp;gt;getParam(PARAM_MESSAGE_5, true)-&amp;gt;value();&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            message = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            port = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            server = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMin = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMax = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        Serial.println(message);&lt;br /&gt;
        Serial.println(port);&lt;br /&gt;
        Serial.println(server);&lt;br /&gt;
        Serial.println(ServoMin);&lt;br /&gt;
        Serial.println(ServoMax);&lt;br /&gt;
        // ajouter si port et server vide alors remplacer avec ceux de base&lt;br /&gt;
        server_port = port;&lt;br /&gt;
        server_ip = server;&lt;br /&gt;
        adjustAnalogR = message.toInt();&lt;br /&gt;
        onPos = ServoMin.toInt();&lt;br /&gt;
        offPos = ServoMax.toInt();&lt;br /&gt;
        &lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    server.onNotFound(notFound);&lt;br /&gt;
&lt;br /&gt;
    DefaultHeaders::Instance().addHeader(&amp;quot;Access-Control-Allow-Origin&amp;quot;, &amp;quot;*&amp;quot;);&lt;br /&gt;
    server.begin();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;AsyncTCP.h&amp;gt; et #include &amp;lt;ESPAsyncTCP.h&amp;gt; qui permettent de gérée les requêtes asynchrones et avons défini plusieurs appels possibles. De plus le programme inclu une page propre au client permettant de configurer les différents paramètres (calibrations LDR, Servo, adresse serveur / port) disponible à l'adresse IP du client (exemple : &amp;lt;nowiki&amp;gt;http://IPadresse/)(visible&amp;lt;/nowiki&amp;gt; sur l'écran OLED après démarrage)    .      [[Fichier:Capture d’écran 2024-05-29 13-53-26.png|gauche|vignette|902x902px|page configurations client]]envoie de requête http vers le serveur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
void sendGet()&lt;br /&gt;
{&lt;br /&gt;
    WiFiClient client;&lt;br /&gt;
&lt;br /&gt;
    HTTPClient http;&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;[HTTP] begin...\n&amp;quot;);&lt;br /&gt;
    if (http.begin(client, &amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)))) {  // HTTP&lt;br /&gt;
    Serial.println(&amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)));&lt;br /&gt;
&lt;br /&gt;
      Serial.print(&amp;quot;[HTTP] GET...\n&amp;quot;);&lt;br /&gt;
      // start connection and send HTTP header&lt;br /&gt;
      int httpCode = http.GET();&lt;br /&gt;
&lt;br /&gt;
      // httpCode will be negative on error&lt;br /&gt;
      if (httpCode &amp;gt; 0) {&lt;br /&gt;
        // HTTP header has been send and Server response header has been handled&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... code: %d\n&amp;quot;, httpCode);&lt;br /&gt;
&lt;br /&gt;
        // file found at server&lt;br /&gt;
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {&lt;br /&gt;
          String payload = http.getString();&lt;br /&gt;
          Serial.println(payload);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... failed, error: %s\n&amp;quot;, http.errorToString(httpCode).c_str());&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      http.end();&lt;br /&gt;
    } else {&lt;br /&gt;
      Serial.println(&amp;quot;[HTTP] Unable to connect&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour envoyer des requêtes au serveur nous utilisons la librairie : #include &amp;lt;ESP8266HTTPClient.h&amp;gt; qui va permettre d'envoyer au serveur la présence de se système afin d'être sauvegardé dans le fichier IPlist.txt. Et cette requête contient l'adresse du serveur, le port et l'état de la LED de l'écran mesurer par la LDR. &lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
String getLedState(int analog)&lt;br /&gt;
{&lt;br /&gt;
  int state = map(analog, 0, 1024, 0,100);&lt;br /&gt;
  if(state &amp;gt; adjustAnalogR)&lt;br /&gt;
  {&lt;br /&gt;
     return &amp;quot;on&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    return &amp;quot;off&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici cette fonction permet simplement de mesurer la valeur analogique du CAN venant de la LDR et de retourner un String pour mieux l'incorporé dans la requête HTTP.&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
Servo servo1;  // on créé l'objet servo1&lt;br /&gt;
int onPos = 45;&lt;br /&gt;
int offPos = 135;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
servo1.attach(12);  // on dit a cette objet que le servo est sur la pin 12 dans le setup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour controler le Servo nous nous servons de librairie : #include &amp;lt;Servo.h&amp;gt;. Qui va nous permettre de controler l'angle du servo en générant un signal PWM approprié.&lt;br /&gt;
*Ajout d'un écran OLED monochrome pour facilité l'utilisation du système et permettre d'autres tâche dans le futur.&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// ### Exemple d'utilisation de cette librairie ###&lt;br /&gt;
#include &amp;lt;U8g2lib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifdef U8X8_HAVE_HW_I2C&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
    &lt;br /&gt;
    u8g2.begin();&lt;br /&gt;
    u8g2.clearBuffer();					// effacer le buffer de l'écran&lt;br /&gt;
    u8g2.setDisplayRotation(U8G2_R1);&lt;br /&gt;
    u8g2.setFlipMode(0);&lt;br /&gt;
    u8g2.setFont(u8g2_font_squeezed_r6_tr);	// choix de la police&lt;br /&gt;
    u8g2.drawStr(0,10,&amp;quot;Projet S8 : start&amp;quot;);	// ce qui s'affichera sur l'écran&lt;br /&gt;
    u8g2.sendBuffer();					// envoie vers le buffer&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour réaliser le support 3D, j'ai utilisé le logiciel gratuit disponible en ligne appelé [[wikipedia:Tinkercad|TinkerCad]] . Cela m'a permis de facilement réaliser des pièces sur mesure afin de faire un support modulable et pouvant s'accrocher à même l'écran pour plus de facilité d'installations.&lt;br /&gt;
&lt;br /&gt;
cf: galerie.&lt;br /&gt;
&lt;br /&gt;
===== 5) Axes d'amélioration : =====&lt;br /&gt;
&lt;br /&gt;
====== Lors de ce projet j'ai rencontrer quelques difficultés: ======&lt;br /&gt;
&lt;br /&gt;
* Mauvais routage des servo sur la carte (inversion des VCC et Signal) =&amp;gt; Solution : fabrication d'un adaptateur &lt;br /&gt;
* Modélisation de plusieurs système d'accroche car le premier ne permettait pas un maintient suffisant sur l'écran.&lt;br /&gt;
* Erreur lors de la fermeture du serveur web et sa re-ouverture (port all ready use), l'erreur s'arrête après quelques secondes et le serveur web peut s'exécuté à nouveau.  &lt;br /&gt;
&lt;br /&gt;
====== Les améliorations possibles : ======&lt;br /&gt;
&lt;br /&gt;
* Meilleur routage de la carte en corrigeant les erreurs.&lt;br /&gt;
* Faire un PCB double face, permettant d'inclure directement le circuit de programmation (facilitant l'améliorations du programme).&lt;br /&gt;
* Refaire une nouvelle version du chassis en 3D pour corriger les petites erreurs restantes.&lt;br /&gt;
* Améliorations du programme du serveur web pour ajouter des options (ajout d'un second servo sur une même carte). &lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;br /&gt;
&lt;br /&gt;
===== Annexe : =====&lt;br /&gt;
Tout les programmes, photos, fichier 3D sont disponibles sur le GIT associer.&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Capture_d%E2%80%99%C3%A9cran_2024-05-29_13-53-26.png&amp;diff=6211</id>
		<title>Fichier:Capture d’écran 2024-05-29 13-53-26.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Capture_d%E2%80%99%C3%A9cran_2024-05-29_13-53-26.png&amp;diff=6211"/>
		<updated>2024-05-29T11:58:02Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;page client&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6210</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6210"/>
		<updated>2024-05-29T11:36:48Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : /* Galerie : */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
==== 2)Réalisation du server web ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html sans systèmes d'écrans connecté.  &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html avec des systèmes d'écrans connectés. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-29 12-54-48.png|gauche|vignette|1100x1100px|Page HTML 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
On peut y voir que deux systèmes d'écrans ce sont connecté et que l'état de l'écran est afficher sur les pastille rouges et vertes (qui servent également de bouton)&lt;br /&gt;
&lt;br /&gt;
Une fois que l'on appuie sur un bouton, cela envoie une requette http au système voulu et fera bouger le servo moteur en conséquence. Afin d'allumer ou éteindre l'écran&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe . cf : voir le TP précédant sur les routeurs.&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
WiFi.mode(WIFI_STA);&lt;br /&gt;
WiFi.hostname(newHostname);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if (!WiFi.config(apIP, gateway, subnet, primaryDNS, secondaryDNS)) {&lt;br /&gt;
Serial.println(&amp;quot;STA Failed to configure&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Serial.printf(&amp;quot;connection to %s with %s\n&amp;quot;,ssid, password );&lt;br /&gt;
WiFi.begin(ssid, password);&lt;br /&gt;
int dot_cnt = 1;&lt;br /&gt;
while (WiFi.status() != WL_CONNECTED) {&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;ESP8266WiFi.h&amp;gt; qui sur cette partie de code on peut y voir que l'esp8266 sera en mode station pour venir se connecter au routeur (ligne 1). Par la suite on configure son adresse IP (static) et autre paramètre réseau (ligne 5) et pour finir on le connecte au routeur (ligne 10).&lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
server.on(&amp;quot;/&amp;quot;, HTTP_GET, [](AsyncWebServerRequest *request){&lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;, &amp;quot;text/html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/get&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        String message = &amp;quot;Salut Fotin&amp;quot;;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, &amp;quot;Hello, GET: &amp;quot; + message);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/state&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  getLedState(analogRead(A0)));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/connect&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        send = true;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  &amp;quot;OK&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/on&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;on&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo on&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, HIGH);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/off&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;off&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo off&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, LOW);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a POST request to &amp;lt;IP&amp;gt;/post with a form field message set to &amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/post&amp;quot;, HTTP_POST, [](AsyncWebServerRequest *request){&lt;br /&gt;
        String message;&lt;br /&gt;
        String port;&lt;br /&gt;
        String server;&lt;br /&gt;
        String ServoMin;&lt;br /&gt;
        String ServoMax;&lt;br /&gt;
        if (request-&amp;gt;hasParam(PARAM_MESSAGE_4, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_5, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_2, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_3, true)) {&lt;br /&gt;
            message = request-&amp;gt;getParam(PARAM_MESSAGE, true)-&amp;gt;value();&lt;br /&gt;
            port = request-&amp;gt;getParam(PARAM_MESSAGE_2, true)-&amp;gt;value();&lt;br /&gt;
            server = request-&amp;gt;getParam(PARAM_MESSAGE_3, true)-&amp;gt;value();&lt;br /&gt;
            ServoMin = request-&amp;gt;getParam(PARAM_MESSAGE_4, true)-&amp;gt;value();&lt;br /&gt;
            ServoMax = request-&amp;gt;getParam(PARAM_MESSAGE_5, true)-&amp;gt;value();&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            message = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            port = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            server = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMin = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMax = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        Serial.println(message);&lt;br /&gt;
        Serial.println(port);&lt;br /&gt;
        Serial.println(server);&lt;br /&gt;
        Serial.println(ServoMin);&lt;br /&gt;
        Serial.println(ServoMax);&lt;br /&gt;
        // ajouter si port et server vide alors remplacer avec ceux de base&lt;br /&gt;
        server_port = port;&lt;br /&gt;
        server_ip = server;&lt;br /&gt;
        adjustAnalogR = message.toInt();&lt;br /&gt;
        onPos = ServoMin.toInt();&lt;br /&gt;
        offPos = ServoMax.toInt();&lt;br /&gt;
        &lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    server.onNotFound(notFound);&lt;br /&gt;
&lt;br /&gt;
    DefaultHeaders::Instance().addHeader(&amp;quot;Access-Control-Allow-Origin&amp;quot;, &amp;quot;*&amp;quot;);&lt;br /&gt;
    server.begin();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;AsyncTCP.h&amp;gt; et #include &amp;lt;ESPAsyncTCP.h&amp;gt; qui permettent de gérée les requêtes asynchrones et avons défini plusieurs appels possibles. &lt;br /&gt;
* envoie de requête http vers le serveur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
void sendGet()&lt;br /&gt;
{&lt;br /&gt;
    WiFiClient client;&lt;br /&gt;
&lt;br /&gt;
    HTTPClient http;&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;[HTTP] begin...\n&amp;quot;);&lt;br /&gt;
    if (http.begin(client, &amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)))) {  // HTTP&lt;br /&gt;
    Serial.println(&amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)));&lt;br /&gt;
&lt;br /&gt;
      Serial.print(&amp;quot;[HTTP] GET...\n&amp;quot;);&lt;br /&gt;
      // start connection and send HTTP header&lt;br /&gt;
      int httpCode = http.GET();&lt;br /&gt;
&lt;br /&gt;
      // httpCode will be negative on error&lt;br /&gt;
      if (httpCode &amp;gt; 0) {&lt;br /&gt;
        // HTTP header has been send and Server response header has been handled&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... code: %d\n&amp;quot;, httpCode);&lt;br /&gt;
&lt;br /&gt;
        // file found at server&lt;br /&gt;
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {&lt;br /&gt;
          String payload = http.getString();&lt;br /&gt;
          Serial.println(payload);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... failed, error: %s\n&amp;quot;, http.errorToString(httpCode).c_str());&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      http.end();&lt;br /&gt;
    } else {&lt;br /&gt;
      Serial.println(&amp;quot;[HTTP] Unable to connect&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour envoyer des requêtes au serveur nous utilisons la librairie : #include &amp;lt;ESP8266HTTPClient.h&amp;gt; qui va permettre d'envoyer au serveur la présence de se système afin d'être sauvegardé dans le fichier IPlist.txt. Et cette requête contient l'adresse du serveur, le port et l'état de la LED de l'écran mesurer par la LDR.&lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
String getLedState(int analog)&lt;br /&gt;
{&lt;br /&gt;
  int state = map(analog, 0, 1024, 0,100);&lt;br /&gt;
  if(state &amp;gt; adjustAnalogR)&lt;br /&gt;
  {&lt;br /&gt;
     return &amp;quot;on&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    return &amp;quot;off&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici cette fonction permet simplement de mesurer la valeur analogique du CAN venant de la LDR et de retourner un String pour mieux l'incorporé dans la requête HTTP.&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
Servo servo1;  // on créé l'objet servo1&lt;br /&gt;
int onPos = 45;&lt;br /&gt;
int offPos = 135;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
servo1.attach(12);  // on dit a cette objet que le servo est sur la pin 12 dans le setup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour controler le Servo nous nous servons de librairie : #include &amp;lt;Servo.h&amp;gt;. Qui va nous permettre de controler l'angle du servo en générant un signal PWM approprié.&lt;br /&gt;
*Ajout d'un écran OLED monochrome pour facilité l'utilisation du système et permettre d'autres tâche dans le futur.&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// ### Exemple d'utilisation de cette librairie ###&lt;br /&gt;
#include &amp;lt;U8g2lib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifdef U8X8_HAVE_HW_I2C&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
    &lt;br /&gt;
    u8g2.begin();&lt;br /&gt;
    u8g2.clearBuffer();					// effacer le buffer de l'écran&lt;br /&gt;
    u8g2.setDisplayRotation(U8G2_R1);&lt;br /&gt;
    u8g2.setFlipMode(0);&lt;br /&gt;
    u8g2.setFont(u8g2_font_squeezed_r6_tr);	// choix de la police&lt;br /&gt;
    u8g2.drawStr(0,10,&amp;quot;Projet S8 : start&amp;quot;);	// ce qui s'affichera sur l'écran&lt;br /&gt;
    u8g2.sendBuffer();					// envoie vers le buffer&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour réaliser le support 3D, j'ai utilisé le logiciel gratuit disponible en ligne appelé [[wikipedia:Tinkercad|TinkerCad]] . Cela m'a permis de facilement réaliser des pièces sur mesure afin de faire un support modulable et pouvant s'accrocher à même l'écran pour plus de facilité d'installations.&lt;br /&gt;
&lt;br /&gt;
cf: galerie.&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;br /&gt;
&lt;br /&gt;
===== Annexe : =====&lt;br /&gt;
Tout les programmes, photos, fichier 3D sont disponibles sur le GIT associer.&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6209</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6209"/>
		<updated>2024-05-29T11:35:05Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : /* 2)Réalisation du server web en cours */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
==== 2)Réalisation du server web ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html sans systèmes d'écrans connecté.  &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html avec des systèmes d'écrans connectés. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-29 12-54-48.png|gauche|vignette|1100x1100px|Page HTML 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
On peut y voir que deux systèmes d'écrans ce sont connecté et que l'état de l'écran est afficher sur les pastille rouges et vertes (qui servent également de bouton)&lt;br /&gt;
&lt;br /&gt;
Une fois que l'on appuie sur un bouton, cela envoie une requette http au système voulu et fera bouger le servo moteur en conséquence. Afin d'allumer ou éteindre l'écran&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe . cf : voir le TP précédant sur les routeurs.&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
WiFi.mode(WIFI_STA);&lt;br /&gt;
WiFi.hostname(newHostname);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if (!WiFi.config(apIP, gateway, subnet, primaryDNS, secondaryDNS)) {&lt;br /&gt;
Serial.println(&amp;quot;STA Failed to configure&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Serial.printf(&amp;quot;connection to %s with %s\n&amp;quot;,ssid, password );&lt;br /&gt;
WiFi.begin(ssid, password);&lt;br /&gt;
int dot_cnt = 1;&lt;br /&gt;
while (WiFi.status() != WL_CONNECTED) {&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;ESP8266WiFi.h&amp;gt; qui sur cette partie de code on peut y voir que l'esp8266 sera en mode station pour venir se connecter au routeur (ligne 1). Par la suite on configure son adresse IP (static) et autre paramètre réseau (ligne 5) et pour finir on le connecte au routeur (ligne 10).&lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
server.on(&amp;quot;/&amp;quot;, HTTP_GET, [](AsyncWebServerRequest *request){&lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;, &amp;quot;text/html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/get&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        String message = &amp;quot;Salut Fotin&amp;quot;;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, &amp;quot;Hello, GET: &amp;quot; + message);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/state&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  getLedState(analogRead(A0)));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/connect&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        send = true;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  &amp;quot;OK&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/on&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;on&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo on&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, HIGH);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/off&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;off&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo off&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, LOW);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a POST request to &amp;lt;IP&amp;gt;/post with a form field message set to &amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/post&amp;quot;, HTTP_POST, [](AsyncWebServerRequest *request){&lt;br /&gt;
        String message;&lt;br /&gt;
        String port;&lt;br /&gt;
        String server;&lt;br /&gt;
        String ServoMin;&lt;br /&gt;
        String ServoMax;&lt;br /&gt;
        if (request-&amp;gt;hasParam(PARAM_MESSAGE_4, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_5, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_2, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_3, true)) {&lt;br /&gt;
            message = request-&amp;gt;getParam(PARAM_MESSAGE, true)-&amp;gt;value();&lt;br /&gt;
            port = request-&amp;gt;getParam(PARAM_MESSAGE_2, true)-&amp;gt;value();&lt;br /&gt;
            server = request-&amp;gt;getParam(PARAM_MESSAGE_3, true)-&amp;gt;value();&lt;br /&gt;
            ServoMin = request-&amp;gt;getParam(PARAM_MESSAGE_4, true)-&amp;gt;value();&lt;br /&gt;
            ServoMax = request-&amp;gt;getParam(PARAM_MESSAGE_5, true)-&amp;gt;value();&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            message = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            port = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            server = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMin = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMax = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        Serial.println(message);&lt;br /&gt;
        Serial.println(port);&lt;br /&gt;
        Serial.println(server);&lt;br /&gt;
        Serial.println(ServoMin);&lt;br /&gt;
        Serial.println(ServoMax);&lt;br /&gt;
        // ajouter si port et server vide alors remplacer avec ceux de base&lt;br /&gt;
        server_port = port;&lt;br /&gt;
        server_ip = server;&lt;br /&gt;
        adjustAnalogR = message.toInt();&lt;br /&gt;
        onPos = ServoMin.toInt();&lt;br /&gt;
        offPos = ServoMax.toInt();&lt;br /&gt;
        &lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    server.onNotFound(notFound);&lt;br /&gt;
&lt;br /&gt;
    DefaultHeaders::Instance().addHeader(&amp;quot;Access-Control-Allow-Origin&amp;quot;, &amp;quot;*&amp;quot;);&lt;br /&gt;
    server.begin();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;AsyncTCP.h&amp;gt; et #include &amp;lt;ESPAsyncTCP.h&amp;gt; qui permettent de gérée les requêtes asynchrones et avons défini plusieurs appels possibles. &lt;br /&gt;
* envoie de requête http vers le serveur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
void sendGet()&lt;br /&gt;
{&lt;br /&gt;
    WiFiClient client;&lt;br /&gt;
&lt;br /&gt;
    HTTPClient http;&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;[HTTP] begin...\n&amp;quot;);&lt;br /&gt;
    if (http.begin(client, &amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)))) {  // HTTP&lt;br /&gt;
    Serial.println(&amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)));&lt;br /&gt;
&lt;br /&gt;
      Serial.print(&amp;quot;[HTTP] GET...\n&amp;quot;);&lt;br /&gt;
      // start connection and send HTTP header&lt;br /&gt;
      int httpCode = http.GET();&lt;br /&gt;
&lt;br /&gt;
      // httpCode will be negative on error&lt;br /&gt;
      if (httpCode &amp;gt; 0) {&lt;br /&gt;
        // HTTP header has been send and Server response header has been handled&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... code: %d\n&amp;quot;, httpCode);&lt;br /&gt;
&lt;br /&gt;
        // file found at server&lt;br /&gt;
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {&lt;br /&gt;
          String payload = http.getString();&lt;br /&gt;
          Serial.println(payload);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... failed, error: %s\n&amp;quot;, http.errorToString(httpCode).c_str());&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      http.end();&lt;br /&gt;
    } else {&lt;br /&gt;
      Serial.println(&amp;quot;[HTTP] Unable to connect&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour envoyer des requêtes au serveur nous utilisons la librairie : #include &amp;lt;ESP8266HTTPClient.h&amp;gt; qui va permettre d'envoyer au serveur la présence de se système afin d'être sauvegardé dans le fichier IPlist.txt. Et cette requête contient l'adresse du serveur, le port et l'état de la LED de l'écran mesurer par la LDR.&lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
String getLedState(int analog)&lt;br /&gt;
{&lt;br /&gt;
  int state = map(analog, 0, 1024, 0,100);&lt;br /&gt;
  if(state &amp;gt; adjustAnalogR)&lt;br /&gt;
  {&lt;br /&gt;
     return &amp;quot;on&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    return &amp;quot;off&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici cette fonction permet simplement de mesurer la valeur analogique du CAN venant de la LDR et de retourner un String pour mieux l'incorporé dans la requête HTTP.&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
Servo servo1;  // on créé l'objet servo1&lt;br /&gt;
int onPos = 45;&lt;br /&gt;
int offPos = 135;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
servo1.attach(12);  // on dit a cette objet que le servo est sur la pin 12 dans le setup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour controler le Servo nous nous servons de librairie : #include &amp;lt;Servo.h&amp;gt;. Qui va nous permettre de controler l'angle du servo en générant un signal PWM approprié.&lt;br /&gt;
*Ajout d'un écran OLED monochrome pour facilité l'utilisation du système et permettre d'autres tâche dans le futur.&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// ### Exemple d'utilisation de cette librairie ###&lt;br /&gt;
#include &amp;lt;U8g2lib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifdef U8X8_HAVE_HW_I2C&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
    &lt;br /&gt;
    u8g2.begin();&lt;br /&gt;
    u8g2.clearBuffer();					// effacer le buffer de l'écran&lt;br /&gt;
    u8g2.setDisplayRotation(U8G2_R1);&lt;br /&gt;
    u8g2.setFlipMode(0);&lt;br /&gt;
    u8g2.setFont(u8g2_font_squeezed_r6_tr);	// choix de la police&lt;br /&gt;
    u8g2.drawStr(0,10,&amp;quot;Projet S8 : start&amp;quot;);	// ce qui s'affichera sur l'écran&lt;br /&gt;
    u8g2.sendBuffer();					// envoie vers le buffer&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour réaliser le support 3D, j'ai utilisé le logiciel gratuit disponible en ligne appelé [[wikipedia:Tinkercad|TinkerCad]] . Cela m'a permis de facilement réaliser des pièces sur mesure afin de faire un support modulable et pouvant s'accrocher à même l'écran pour plus de facilité d'installations.&lt;br /&gt;
&lt;br /&gt;
cf: galerie.&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6208</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6208"/>
		<updated>2024-05-29T11:33:39Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html sans systèmes d'écrans connecté.  &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html avec des systèmes d'écrans connectés. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-29 12-54-48.png|gauche|vignette|1100x1100px|Page HTML 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
On peut y voir que deux systèmes d'écrans ce sont connecté et que l'état de l'écran est afficher sur les pastille rouges et vertes (qui servent également de bouton)&lt;br /&gt;
&lt;br /&gt;
Une fois que l'on appuie sur un bouton, cela envoie une requette http au système voulu et fera bouger le servo moteur en conséquence. Afin d'allumer ou éteindre l'écran&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe . cf : voir le TP précédant sur les routeurs.&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
WiFi.mode(WIFI_STA);&lt;br /&gt;
WiFi.hostname(newHostname);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if (!WiFi.config(apIP, gateway, subnet, primaryDNS, secondaryDNS)) {&lt;br /&gt;
Serial.println(&amp;quot;STA Failed to configure&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Serial.printf(&amp;quot;connection to %s with %s\n&amp;quot;,ssid, password );&lt;br /&gt;
WiFi.begin(ssid, password);&lt;br /&gt;
int dot_cnt = 1;&lt;br /&gt;
while (WiFi.status() != WL_CONNECTED) {&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;ESP8266WiFi.h&amp;gt; qui sur cette partie de code on peut y voir que l'esp8266 sera en mode station pour venir se connecter au routeur (ligne 1). Par la suite on configure son adresse IP (static) et autre paramètre réseau (ligne 5) et pour finir on le connecte au routeur (ligne 10).&lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
server.on(&amp;quot;/&amp;quot;, HTTP_GET, [](AsyncWebServerRequest *request){&lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;, &amp;quot;text/html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/get&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        String message = &amp;quot;Salut Fotin&amp;quot;;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, &amp;quot;Hello, GET: &amp;quot; + message);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/state&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  getLedState(analogRead(A0)));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/connect&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        send = true;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  &amp;quot;OK&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/on&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;on&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo on&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, HIGH);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/off&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;off&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo off&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, LOW);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a POST request to &amp;lt;IP&amp;gt;/post with a form field message set to &amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/post&amp;quot;, HTTP_POST, [](AsyncWebServerRequest *request){&lt;br /&gt;
        String message;&lt;br /&gt;
        String port;&lt;br /&gt;
        String server;&lt;br /&gt;
        String ServoMin;&lt;br /&gt;
        String ServoMax;&lt;br /&gt;
        if (request-&amp;gt;hasParam(PARAM_MESSAGE_4, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_5, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_2, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_3, true)) {&lt;br /&gt;
            message = request-&amp;gt;getParam(PARAM_MESSAGE, true)-&amp;gt;value();&lt;br /&gt;
            port = request-&amp;gt;getParam(PARAM_MESSAGE_2, true)-&amp;gt;value();&lt;br /&gt;
            server = request-&amp;gt;getParam(PARAM_MESSAGE_3, true)-&amp;gt;value();&lt;br /&gt;
            ServoMin = request-&amp;gt;getParam(PARAM_MESSAGE_4, true)-&amp;gt;value();&lt;br /&gt;
            ServoMax = request-&amp;gt;getParam(PARAM_MESSAGE_5, true)-&amp;gt;value();&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            message = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            port = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            server = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMin = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMax = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        Serial.println(message);&lt;br /&gt;
        Serial.println(port);&lt;br /&gt;
        Serial.println(server);&lt;br /&gt;
        Serial.println(ServoMin);&lt;br /&gt;
        Serial.println(ServoMax);&lt;br /&gt;
        // ajouter si port et server vide alors remplacer avec ceux de base&lt;br /&gt;
        server_port = port;&lt;br /&gt;
        server_ip = server;&lt;br /&gt;
        adjustAnalogR = message.toInt();&lt;br /&gt;
        onPos = ServoMin.toInt();&lt;br /&gt;
        offPos = ServoMax.toInt();&lt;br /&gt;
        &lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    server.onNotFound(notFound);&lt;br /&gt;
&lt;br /&gt;
    DefaultHeaders::Instance().addHeader(&amp;quot;Access-Control-Allow-Origin&amp;quot;, &amp;quot;*&amp;quot;);&lt;br /&gt;
    server.begin();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;AsyncTCP.h&amp;gt; et #include &amp;lt;ESPAsyncTCP.h&amp;gt; qui permettent de gérée les requêtes asynchrones et avons défini plusieurs appels possibles. &lt;br /&gt;
* envoie de requête http vers le serveur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
void sendGet()&lt;br /&gt;
{&lt;br /&gt;
    WiFiClient client;&lt;br /&gt;
&lt;br /&gt;
    HTTPClient http;&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;[HTTP] begin...\n&amp;quot;);&lt;br /&gt;
    if (http.begin(client, &amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)))) {  // HTTP&lt;br /&gt;
    Serial.println(&amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)));&lt;br /&gt;
&lt;br /&gt;
      Serial.print(&amp;quot;[HTTP] GET...\n&amp;quot;);&lt;br /&gt;
      // start connection and send HTTP header&lt;br /&gt;
      int httpCode = http.GET();&lt;br /&gt;
&lt;br /&gt;
      // httpCode will be negative on error&lt;br /&gt;
      if (httpCode &amp;gt; 0) {&lt;br /&gt;
        // HTTP header has been send and Server response header has been handled&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... code: %d\n&amp;quot;, httpCode);&lt;br /&gt;
&lt;br /&gt;
        // file found at server&lt;br /&gt;
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {&lt;br /&gt;
          String payload = http.getString();&lt;br /&gt;
          Serial.println(payload);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... failed, error: %s\n&amp;quot;, http.errorToString(httpCode).c_str());&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      http.end();&lt;br /&gt;
    } else {&lt;br /&gt;
      Serial.println(&amp;quot;[HTTP] Unable to connect&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour envoyer des requêtes au serveur nous utilisons la librairie : #include &amp;lt;ESP8266HTTPClient.h&amp;gt; qui va permettre d'envoyer au serveur la présence de se système afin d'être sauvegardé dans le fichier IPlist.txt. Et cette requête contient l'adresse du serveur, le port et l'état de la LED de l'écran mesurer par la LDR.&lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
String getLedState(int analog)&lt;br /&gt;
{&lt;br /&gt;
  int state = map(analog, 0, 1024, 0,100);&lt;br /&gt;
  if(state &amp;gt; adjustAnalogR)&lt;br /&gt;
  {&lt;br /&gt;
     return &amp;quot;on&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    return &amp;quot;off&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici cette fonction permet simplement de mesurer la valeur analogique du CAN venant de la LDR et de retourner un String pour mieux l'incorporé dans la requête HTTP.&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
Servo servo1;  // on créé l'objet servo1&lt;br /&gt;
int onPos = 45;&lt;br /&gt;
int offPos = 135;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
servo1.attach(12);  // on dit a cette objet que le servo est sur la pin 12 dans le setup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour controler le Servo nous nous servons de librairie : #include &amp;lt;Servo.h&amp;gt;. Qui va nous permettre de controler l'angle du servo en générant un signal PWM approprié.&lt;br /&gt;
*Ajout d'un écran OLED monochrome pour facilité l'utilisation du système et permettre d'autres tâche dans le futur.&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// ### Exemple d'utilisation de cette librairie ###&lt;br /&gt;
#include &amp;lt;U8g2lib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifdef U8X8_HAVE_HW_I2C&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
    &lt;br /&gt;
    u8g2.begin();&lt;br /&gt;
    u8g2.clearBuffer();					// effacer le buffer de l'écran&lt;br /&gt;
    u8g2.setDisplayRotation(U8G2_R1);&lt;br /&gt;
    u8g2.setFlipMode(0);&lt;br /&gt;
    u8g2.setFont(u8g2_font_squeezed_r6_tr);	// choix de la police&lt;br /&gt;
    u8g2.drawStr(0,10,&amp;quot;Projet S8 : start&amp;quot;);	// ce qui s'affichera sur l'écran&lt;br /&gt;
    u8g2.sendBuffer();					// envoie vers le buffer&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour réaliser le support 3D, j'ai utilisé le logiciel gratuit disponible en ligne appelé [[wikipedia:Tinkercad|TinkerCad]] . Cela m'a permis de facilement réaliser des pièces sur mesure afin de faire un support modulable et pouvant s'accrocher à même l'écran pour plus de facilité d'installations.&lt;br /&gt;
&lt;br /&gt;
cf: galerie.&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6207</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6207"/>
		<updated>2024-05-29T11:33:15Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : ajout code ESP8266&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html sans systèmes d'écrans connecté.  &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
Ci-dessous la page html avec des systèmes d'écrans connectés. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-29 12-54-48.png|gauche|vignette|1100x1100px|Page HTML 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
On peut y voir que deux systèmes d'écrans ce sont connecté et que l'état de l'écran est afficher sur les pastille rouges et vertes (qui servent également de bouton)&lt;br /&gt;
&lt;br /&gt;
Une fois que l'on appuie sur un bouton, cela envoie une requette http au système voulu et fera bouger le servo moteur en conséquence. Afin d'allumer ou éteindre l'écran&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe . cf : voir le TP précédant sur les routeurs.&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
WiFi.mode(WIFI_STA);&lt;br /&gt;
WiFi.hostname(newHostname);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if (!WiFi.config(apIP, gateway, subnet, primaryDNS, secondaryDNS)) {&lt;br /&gt;
Serial.println(&amp;quot;STA Failed to configure&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Serial.printf(&amp;quot;connection to %s with %s\n&amp;quot;,ssid, password );&lt;br /&gt;
WiFi.begin(ssid, password);&lt;br /&gt;
int dot_cnt = 1;&lt;br /&gt;
while (WiFi.status() != WL_CONNECTED) {&lt;br /&gt;
    Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;ESP8266WiFi.h&amp;gt; qui sur cette partie de code on peut y voir que l'esp8266 sera en mode station pour venir se connecter au routeur (ligne 1). Par la suite on configure son adresse IP (static) et autre paramètre réseau (ligne 5) et pour finir on le connecte au routeur (ligne 10).&lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
server.on(&amp;quot;/&amp;quot;, HTTP_GET, [](AsyncWebServerRequest *request){&lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;, &amp;quot;text/html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/get&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        String message = &amp;quot;Salut Fotin&amp;quot;;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, &amp;quot;Hello, GET: &amp;quot; + message);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/state&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  getLedState(analogRead(A0)));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/connect&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        send = true;&lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;,  &amp;quot;OK&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/on&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;on&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo on&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, HIGH);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a GET request to &amp;lt;IP&amp;gt;/get?message=&amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/off&amp;quot;, HTTP_GET, [] (AsyncWebServerRequest *request) {&lt;br /&gt;
        const char* message = &amp;quot;off&amp;quot;;&lt;br /&gt;
        Serial.println(&amp;quot;servo off&amp;quot;);&lt;br /&gt;
        digitalWrite(LED, LOW);&lt;br /&gt;
        servo1.write(onPos);&lt;br /&gt;
        delay(500);&lt;br /&gt;
        servo1.write(offPos); &lt;br /&gt;
        request-&amp;gt;send(200, &amp;quot;text/plain&amp;quot;, String(message));&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    // Send a POST request to &amp;lt;IP&amp;gt;/post with a form field message set to &amp;lt;message&amp;gt;&lt;br /&gt;
    server.on(&amp;quot;/post&amp;quot;, HTTP_POST, [](AsyncWebServerRequest *request){&lt;br /&gt;
        String message;&lt;br /&gt;
        String port;&lt;br /&gt;
        String server;&lt;br /&gt;
        String ServoMin;&lt;br /&gt;
        String ServoMax;&lt;br /&gt;
        if (request-&amp;gt;hasParam(PARAM_MESSAGE_4, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_5, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_2, true) &amp;amp;&amp;amp; request-&amp;gt;hasParam(PARAM_MESSAGE_3, true)) {&lt;br /&gt;
            message = request-&amp;gt;getParam(PARAM_MESSAGE, true)-&amp;gt;value();&lt;br /&gt;
            port = request-&amp;gt;getParam(PARAM_MESSAGE_2, true)-&amp;gt;value();&lt;br /&gt;
            server = request-&amp;gt;getParam(PARAM_MESSAGE_3, true)-&amp;gt;value();&lt;br /&gt;
            ServoMin = request-&amp;gt;getParam(PARAM_MESSAGE_4, true)-&amp;gt;value();&lt;br /&gt;
            ServoMax = request-&amp;gt;getParam(PARAM_MESSAGE_5, true)-&amp;gt;value();&lt;br /&gt;
            &lt;br /&gt;
        } else {&lt;br /&gt;
            message = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            port = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            server = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMin = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
            ServoMax = &amp;quot;No message sent&amp;quot;;&lt;br /&gt;
        }&lt;br /&gt;
        Serial.println(message);&lt;br /&gt;
        Serial.println(port);&lt;br /&gt;
        Serial.println(server);&lt;br /&gt;
        Serial.println(ServoMin);&lt;br /&gt;
        Serial.println(ServoMax);&lt;br /&gt;
        // ajouter si port et server vide alors remplacer avec ceux de base&lt;br /&gt;
        server_port = port;&lt;br /&gt;
        server_ip = server;&lt;br /&gt;
        adjustAnalogR = message.toInt();&lt;br /&gt;
        onPos = ServoMin.toInt();&lt;br /&gt;
        offPos = ServoMax.toInt();&lt;br /&gt;
        &lt;br /&gt;
        request-&amp;gt;send(FS_SYS, &amp;quot;/index.html&amp;quot;);&lt;br /&gt;
    });&lt;br /&gt;
&lt;br /&gt;
    server.onNotFound(notFound);&lt;br /&gt;
&lt;br /&gt;
    DefaultHeaders::Instance().addHeader(&amp;quot;Access-Control-Allow-Origin&amp;quot;, &amp;quot;*&amp;quot;);&lt;br /&gt;
    server.begin();&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici nous utilisons la librairie : #include &amp;lt;AsyncTCP.h&amp;gt; et #include &amp;lt;ESPAsyncTCP.h&amp;gt; qui permettent de gérée les requêtes asynchrones et avons défini plusieurs appels possibles. &lt;br /&gt;
* envoie de requête http vers le serveur&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
void sendGet()&lt;br /&gt;
{&lt;br /&gt;
    WiFiClient client;&lt;br /&gt;
&lt;br /&gt;
    HTTPClient http;&lt;br /&gt;
&lt;br /&gt;
    Serial.print(&amp;quot;[HTTP] begin...\n&amp;quot;);&lt;br /&gt;
    if (http.begin(client, &amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)))) {  // HTTP&lt;br /&gt;
    Serial.println(&amp;quot;http://&amp;quot; + String(server_ip) + &amp;quot;:&amp;quot; + server_port +&amp;quot;/&amp;quot; + getLedState(analogRead(A0)));&lt;br /&gt;
&lt;br /&gt;
      Serial.print(&amp;quot;[HTTP] GET...\n&amp;quot;);&lt;br /&gt;
      // start connection and send HTTP header&lt;br /&gt;
      int httpCode = http.GET();&lt;br /&gt;
&lt;br /&gt;
      // httpCode will be negative on error&lt;br /&gt;
      if (httpCode &amp;gt; 0) {&lt;br /&gt;
        // HTTP header has been send and Server response header has been handled&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... code: %d\n&amp;quot;, httpCode);&lt;br /&gt;
&lt;br /&gt;
        // file found at server&lt;br /&gt;
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {&lt;br /&gt;
          String payload = http.getString();&lt;br /&gt;
          Serial.println(payload);&lt;br /&gt;
        }&lt;br /&gt;
      } else {&lt;br /&gt;
        Serial.printf(&amp;quot;[HTTP] GET... failed, error: %s\n&amp;quot;, http.errorToString(httpCode).c_str());&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
      http.end();&lt;br /&gt;
    } else {&lt;br /&gt;
      Serial.println(&amp;quot;[HTTP] Unable to connect&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour envoyer des requêtes au serveur nous utilisons la librairie : #include &amp;lt;ESP8266HTTPClient.h&amp;gt; qui va permettre d'envoyer au serveur la présence de se système afin d'être sauvegardé dans le fichier IPlist.txt. Et cette requête contient l'adresse du serveur, le port et l'état de la LED de l'écran mesurer par la LDR.&lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
String getLedState(int analog)&lt;br /&gt;
{&lt;br /&gt;
  int state = map(analog, 0, 1024, 0,100);&lt;br /&gt;
  if(state &amp;gt; adjustAnalogR)&lt;br /&gt;
  {&lt;br /&gt;
     return &amp;quot;on&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  else&lt;br /&gt;
  {&lt;br /&gt;
    return &amp;quot;off&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ici cette fonction permet simplement de mesurer la valeur analogique du CAN venant de la LDR et de retourner un String pour mieux l'incorporé dans la requête HTTP.&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
Servo servo1;  // on créé l'objet servo1&lt;br /&gt;
int onPos = 45;&lt;br /&gt;
int offPos = 135;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
servo1.attach(12);  // on dit a cette objet que le servo est sur la pin 12 dans le setup&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Pour controler le Servo nous nous servons de librairie : #include &amp;lt;Servo.h&amp;gt;. Qui va nous permettre de controler l'angle du servo en générant un signal PWM approprié.&lt;br /&gt;
*Ajout d'un écran OLED monochrome pour facilité l'utilisation du système et permettre d'autres tâche dans le futur.&amp;lt;syntaxhighlight lang=&amp;quot;c++&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// ### Exemple d'utilisation de cette librairie ###&lt;br /&gt;
#include &amp;lt;U8g2lib.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#ifdef U8X8_HAVE_HW_I2C&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
    &lt;br /&gt;
    u8g2.begin();&lt;br /&gt;
    u8g2.clearBuffer();					// effacer le buffer de l'écran&lt;br /&gt;
    u8g2.setDisplayRotation(U8G2_R1);&lt;br /&gt;
    u8g2.setFlipMode(0);&lt;br /&gt;
    u8g2.setFont(u8g2_font_squeezed_r6_tr);	// choix de la police&lt;br /&gt;
    u8g2.drawStr(0,10,&amp;quot;Projet S8 : start&amp;quot;);	// ce qui s'affichera sur l'écran&lt;br /&gt;
    u8g2.sendBuffer();					// envoie vers le buffer&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour réaliser le support 3D, j'ai utilisé le logiciel gratuit disponible en ligne appelé [[wikipedia:Tinkercad|TinkerCad]] . Cela m'a permis de facilement réaliser des pièces sur mesure afin de faire un support modulable et pouvant s'accrocher à même l'écran pour plus de facilité d'installations.&lt;br /&gt;
&lt;br /&gt;
cf: galerie.&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Capture_d%E2%80%99%C3%A9cran_2024-05-29_12-54-48.png&amp;diff=6200</id>
		<title>Fichier:Capture d’écran 2024-05-29 12-54-48.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Capture_d%E2%80%99%C3%A9cran_2024-05-29_12-54-48.png&amp;diff=6200"/>
		<updated>2024-05-29T11:00:53Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;page html&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6197</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6197"/>
		<updated>2024-05-29T06:01:53Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe .&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur &lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&lt;br /&gt;
* envoie de requête http vers le serveur &lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6196</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6196"/>
		<updated>2024-05-29T06:01:36Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe .&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur &lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&lt;br /&gt;
* envoie de requête http vers le serveur &lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6195</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6195"/>
		<updated>2024-05-29T06:01:04Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
___________________________________________________________________&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe .&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur &lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&lt;br /&gt;
* envoie de requête http vers le serveur &lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6194</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6194"/>
		<updated>2024-05-29T06:00:31Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : test&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
___________________________________________________________________&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
&lt;br /&gt;
..&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe .&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur &lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&lt;br /&gt;
* envoie de requête http vers le serveur &lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6193</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6193"/>
		<updated>2024-05-29T05:59:18Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
___________________________________________________________________&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
___________________________________________________________________&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe .&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur &lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&lt;br /&gt;
* envoie de requête http vers le serveur &lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6192</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6192"/>
		<updated>2024-05-29T05:58:27Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
___________________________________________________________________&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
___________________________________________________________________&lt;br /&gt;
&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe .&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur &lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&lt;br /&gt;
* envoie de requête http vers le serveur &lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6191</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6191"/>
		<updated>2024-05-29T05:57:30Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : /* 3)Réalisation du code contenu dans l'ESP8266 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe .&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur &lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&lt;br /&gt;
* envoie de requête http vers le serveur &lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6190</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6190"/>
		<updated>2024-05-29T05:55:59Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : /* 3)Réalisation du code contenu dans l'ESP8266 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe .&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur &lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&lt;br /&gt;
* envoie de requête http vers le serveur &lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6189</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6189"/>
		<updated>2024-05-29T05:55:13Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe .&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur &lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&lt;br /&gt;
* envoie de requête http vers le serveur &lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6188</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6188"/>
		<updated>2024-05-29T05:53:38Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe .&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur &lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&lt;br /&gt;
* envoie de requête http vers le serveur &lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
==== fds ====&lt;br /&gt;
&amp;lt;gallery&amp;gt;&lt;br /&gt;
Fichier:Carte1.jpg&lt;br /&gt;
Fichier:1716462734325.jpg&lt;br /&gt;
Fichier:1716462734505.jpg&lt;br /&gt;
Fichier:1716462734496.jpg&lt;br /&gt;
Fichier:1716462734356.jpg&lt;br /&gt;
&amp;lt;/gallery&amp;gt;[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6184</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6184"/>
		<updated>2024-05-28T11:44:05Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : /* 3)Réalisation du code contenu dans l'ESP8266 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe .&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur &lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&lt;br /&gt;
* envoie de requête http vers le serveur &lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6183</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6183"/>
		<updated>2024-05-28T11:42:46Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : correction affichage&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe .&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur &lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&lt;br /&gt;
* envoie de requête http vers le serveur &lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6182</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6182"/>
		<updated>2024-05-28T11:41:43Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : ajout contenu (code C)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
&lt;br /&gt;
===== Contenu : =====&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
Le serveur web permet de recuprérer chaque requête HTTP d'être analysé et de répondre au client la page ou l'information souhaité au client grâce à de multiples librairie comme montré en cours, tel que : &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;netinet/in.h&amp;gt; // gère les sockets &lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;pthread.h&amp;gt; // gère les différents client qui pourrait se connecter simultanément&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;#&amp;lt;/nowiki&amp;gt;include &amp;lt;getopt.h&amp;gt; // permet de rentrer des paramètres lors de l'exécution de l'exécutable  &lt;br /&gt;
&lt;br /&gt;
De plus : &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter.  &lt;br /&gt;
&lt;br /&gt;
===== Mise en place : ===== &lt;br /&gt;
&lt;br /&gt;
Le dossier du serveur s'accompagne d'un makeFile facilitant la compilation des programmes situé dans plusieurs dossier différents (facilité la visibilité du code).  &lt;br /&gt;
&lt;br /&gt;
Une fois le GIt  cloner vous pouvez vous dirigez vers le dossier appelé : Simple-HTTP-Server-master  &lt;br /&gt;
&lt;br /&gt;
et une fois dans celui-ci, lancer un terminal et lancer la commande : &amp;quot;make&amp;quot;. Une fois cette étape fait un fichier exécutable devrait être apparu dans le répertoire courant. pour le lancer, taper dans le terminal : &amp;quot;./webServer&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Par défaut le port sera 4242 mais si vous voulez lui préciser un port particulier une vous suffit de taper : &amp;quot;./webServer -p nbPort&amp;quot; ou &amp;quot;./webServer --port nbPort&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Une fois le programme lancer vous devriez voir apparaitre un message indiquant que le serveur est en écoute en attendant des requête. &lt;br /&gt;
[[Fichier:Exec serverWeb.png|gauche|vignette|509x509px|exécution du programme (serveur web)]]  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Affichage : =====&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
&lt;br /&gt;
Une fois le serveur web lancer, nous avons besoin d'afficher les système d'écran disponible sur une page web pour ainsi intéragir avec eux plus facilement. c'est pourquoi nous devons programmer une page web permettant cela.&lt;br /&gt;
&lt;br /&gt;
Pour ce faire nous avons besoin de 3 langages, l'HTML, CSS et JavaScript. Et un programme se fait en général sous cette forme :&amp;lt;syntaxhighlight lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
    /* Graphisme */&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;!-- squelette de la page--&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
    // Action &lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La page ci dessous permet d'afficher tout les système d'écran s'étant connecté au server de façon dynamique. c'est à dire que l'on viendra lire la contenu du fichier listIP.txt (reprenant les adresse Ip sauvegardé par le serveur) et viendra construire selon le nombre d'adresse enregistré, le même nombre de bouton et étiquette permettant d'intéragir de facon individuel avec chaque système d'écran. &lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1100x1100px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe .&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur &lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&lt;br /&gt;
* envoie de requête http vers le serveur &lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&lt;br /&gt;
&lt;br /&gt;
==== 4) Réalisation d'un support en 3D ====&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Exec_serverWeb.png&amp;diff=6179</id>
		<title>Fichier:Exec serverWeb.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Exec_serverWeb.png&amp;diff=6179"/>
		<updated>2024-05-28T11:27:10Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;terminal&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6173</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6173"/>
		<updated>2024-05-28T11:03:28Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
Etat : &lt;br /&gt;
&lt;br /&gt;
1) créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu. &lt;br /&gt;
&lt;br /&gt;
- Il permet d'enregistrer l'adresse IP qui se connecte au server afin de l'afficher sur la page HTML et ainsi permettra à plusieurs système d'écran de se connectés et d'être contrôlés par la suite.&lt;br /&gt;
&lt;br /&gt;
de plus ce programme permet de filtrer les adresse IP pour seulement celle qui sont utile au process soit sauvegarder permettant ainsi de ne pas polluer l'affichage graphique avec des adresse IP (inutile).&lt;br /&gt;
&lt;br /&gt;
- Il enregistrera toute adresse IP ayant envoyé une requête du type : &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/on&amp;lt;/nowiki&amp;gt;&amp;quot; ou &amp;quot;&amp;lt;nowiki&amp;gt;http://adresseIP/off&amp;lt;/nowiki&amp;gt;&amp;quot; au serveur pour se connecter. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) Créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation.&lt;br /&gt;
[[Fichier:Capture d’écran 2024-05-28 12-51-16.png|gauche|vignette|1467x1467px|Page HTML 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe .&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur &lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&lt;br /&gt;
* envoie de requête http vers le serveur &lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Capture_d%E2%80%99%C3%A9cran_2024-05-28_12-51-16.png&amp;diff=6172</id>
		<title>Fichier:Capture d’écran 2024-05-28 12-51-16.png</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Capture_d%E2%80%99%C3%A9cran_2024-05-28_12-51-16.png&amp;diff=6172"/>
		<updated>2024-05-28T10:55:49Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;photo page html&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6136</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=6136"/>
		<updated>2024-05-23T11:32:12Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12|266x266px]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
[[Fichier:1716462734325.jpg|vignette|266x266px|Progammeur et cablage pour téléversement du code sur l'esp12]]&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu.&lt;br /&gt;
# créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation&lt;br /&gt;
&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe .&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur &lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&lt;br /&gt;
* envoie de requête http vers le serveur &lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&lt;br /&gt;
&lt;br /&gt;
==== Galerie : ====&lt;br /&gt;
[[Fichier:1716462734505.jpg|vignette|266x266px|Vu d'ensemble]]&lt;br /&gt;
[[Fichier:1716462734496.jpg|vignette|266x266px|programmeur]]&lt;br /&gt;
[[Fichier:1716462734356.jpg|vignette|266x266px|système sur l'écran]]&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:1716462734356.jpg&amp;diff=6135</id>
		<title>Fichier:1716462734356.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:1716462734356.jpg&amp;diff=6135"/>
		<updated>2024-05-23T11:31:49Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;système attaché sur l'écran&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:1716462734496.jpg&amp;diff=6134</id>
		<title>Fichier:1716462734496.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:1716462734496.jpg&amp;diff=6134"/>
		<updated>2024-05-23T11:30:18Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;programmeur&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:1716462734505.jpg&amp;diff=6133</id>
		<title>Fichier:1716462734505.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:1716462734505.jpg&amp;diff=6133"/>
		<updated>2024-05-23T11:29:18Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;vu d'ensemble sur le circuit&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:1716462734325.jpg&amp;diff=6132</id>
		<title>Fichier:1716462734325.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:1716462734325.jpg&amp;diff=6132"/>
		<updated>2024-05-23T11:25:54Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Programmeur&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=5926</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=5926"/>
		<updated>2024-04-11T10:28:20Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
[[Fichier:Carte1.jpg|vignette|Carte projet avec ESP12]]&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
deux cartes ont été brasées avec un pistolet à air chaud et un fer à souder, voici ce que ça donne :&lt;br /&gt;
&lt;br /&gt;
toutes deux sont fonctionnel, car j'ai reussi à téléverser un code à l'aide d'un programmeur FTDI type FT232.&lt;br /&gt;
&lt;br /&gt;
===== Schéma de cablage : =====&lt;br /&gt;
FTDI pin | ESP pin&lt;br /&gt;
&lt;br /&gt;
GND -&amp;gt; GND&lt;br /&gt;
&lt;br /&gt;
VCC -&amp;gt; VCC&lt;br /&gt;
&lt;br /&gt;
TX -&amp;gt; RX&lt;br /&gt;
&lt;br /&gt;
RX -&amp;gt; TX&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
pour passer l'ESP12 en mode programmation, il faut mettre la pin 0 au GND et reset la carte. &lt;br /&gt;
&lt;br /&gt;
Puis téléverser.&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu.&lt;br /&gt;
# créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation&lt;br /&gt;
&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe .&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur &lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&lt;br /&gt;
* envoie de requête http vers le serveur &lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Carte1.jpg&amp;diff=5914</id>
		<title>Fichier:Carte1.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=Fichier:Carte1.jpg&amp;diff=5914"/>
		<updated>2024-04-11T10:20:43Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;photo de la carte recto&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=5836</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=5836"/>
		<updated>2024-03-29T09:20:57Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : /* Projet USB S8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
==== Introduction : ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un [https://fr.wikipedia.org/wiki/Serveur_web server web] qu'il aura créer.&lt;br /&gt;
&lt;br /&gt;
De plus un autre serveur web sera démarrer sur la machine hôte qui permettra ainsi d'envoyer et recevoir des requêtes entres les deux serveur.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Préparer un GIT pour sauvegarder sa progression &lt;br /&gt;
* Réaliser un server web sur hôte.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
====  1) Réalisé la carte ====&lt;br /&gt;
J'ai utilisé le site / logiciel EasyEDA pour réaliser la carte. &lt;br /&gt;
&lt;br /&gt;
Faisable sur KICAD ! &lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
* Un port USB Mini pour alimentation 5V uniquemen&lt;br /&gt;
* Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP)&lt;br /&gt;
* [https://fr.wikipedia.org/wiki/ESP8266 L'ESP8266] au format ESP12E&lt;br /&gt;
* 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
* Un bouton pour IHM&lt;br /&gt;
* Une led rouge témoin&lt;br /&gt;
* Un port I2C pour ajouter un écran OLED ou autre module externe&lt;br /&gt;
* (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
====  2)Réalisation du server web en cours ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# créer un programme en C capable de créer un server web sur un port prédéfini puis prendre en compte les différente requêtes reçu.&lt;br /&gt;
# créer la page HTML permettant de gérer les différents requêtes et afficher les états des écrans à contrôler dans un environnement pratique d'utilisation&lt;br /&gt;
&lt;br /&gt;
====  3)Réalisation du code contenu dans l'ESP8266 ====&lt;br /&gt;
Etat : en cours...&lt;br /&gt;
&lt;br /&gt;
# Mise en Place d'un point d'accès pour que l'ESP puisse se connecter au même réseau que l'hôte, via un routeur Cisco externe .&lt;br /&gt;
# Programme permettant à ESP de dialoguer avec le serveur web (en temps que client)&lt;br /&gt;
&lt;br /&gt;
* Connection au réseau WiFi créer par le routeur &lt;br /&gt;
* prise en compte des requêtes http reçu de la part du serveur (façon asynchrone)&lt;br /&gt;
* envoie de requête http vers le serveur &lt;br /&gt;
* lecture de l'état de la led de l'écran via LDR&lt;br /&gt;
* mouvement du(des) servo(s) en fonction des requêtes reçue)&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=5676</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=5676"/>
		<updated>2024-03-26T17:16:54Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : /* Projet USB S8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un server web.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Réaliser un server web.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) Réalisé la carte (fait) -&amp;gt; en production...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Contenu de la carte :&lt;br /&gt;
&lt;br /&gt;
- Un port USB Mini pour alimentation 5V uniquement&lt;br /&gt;
&lt;br /&gt;
- Un LDO pour le 5v vers 3v3 (tension d'alim de l'ESP) &lt;br /&gt;
&lt;br /&gt;
- L'ESP8266 au format ESP12E &lt;br /&gt;
&lt;br /&gt;
- 2 ports pour Servo moteur alimenté avec le 5v du port USB&lt;br /&gt;
&lt;br /&gt;
- Un bouton pour IHM&lt;br /&gt;
&lt;br /&gt;
- Une led rouge témoin &lt;br /&gt;
&lt;br /&gt;
- Un port I2C pour ajouter un écran OLED ou autre module externe &lt;br /&gt;
&lt;br /&gt;
- (composant passif (resistance et condensateur ) + connecteur pour la programmation du microcontroleur)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2)Réalisation du server web en cours&lt;br /&gt;
&lt;br /&gt;
- Première étape effectué (localhost:4242/index.html) OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3)Réalisation du code contenu dans l'ESP8266 en cours, besoin de tester avec le routeur de l'école&lt;br /&gt;
&lt;br /&gt;
- Mais recepetion de requête HTTP (GET, POST) OK&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E2&amp;diff=5565</id>
		<title>SE2a4 USB 2023/2024 E2</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E2&amp;diff=5565"/>
		<updated>2024-03-20T09:54:28Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : Projet USB - S8 - Justine&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques.&lt;br /&gt;
&lt;br /&gt;
Le système est composé des éléments suivants :&lt;br /&gt;
&lt;br /&gt;
* des cartes USB fixées sur les écrans et connectées en USB sur la station la plus proche ;&lt;br /&gt;
* des serveurs Web sur chaque station qui peuvent être accédés en utilisant un navigateur Web classique.&lt;br /&gt;
&lt;br /&gt;
Le serveur Web d'une station, en plus de servir des pages Web, va gérer les cartes USB locales et écouter les requêtes UDP de gestion des écrans.&lt;br /&gt;
&lt;br /&gt;
Il vous faut programmer à la fois le micro-contrôleur des cartes USB et le serveur Web.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Etapes en résumer:&lt;br /&gt;
&lt;br /&gt;
* Server Web (Client , Server)&lt;br /&gt;
* Carte électronique&lt;br /&gt;
* programme ATmega16u4&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
	<entry>
		<id>https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=5564</id>
		<title>SE2a4 USB 2023/2024 E14</title>
		<link rel="alternate" type="text/html" href="https://wiki-se.plil.fr/mediawiki/index.php?title=SE2a4_USB_2023/2024_E14&amp;diff=5564"/>
		<updated>2024-03-20T09:52:01Z</updated>

		<summary type="html">&lt;p&gt;Epeeterm : Projet ESP8266 - Servo - S8&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Projet USB S8''' ==&lt;br /&gt;
&lt;br /&gt;
=== L'objectif est de concevoir un système permettant de gérer l'état des écrans d'une salle de travaux pratiques. ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour cela j'utiliserai un micro-controleur différend, ici, un ESP8266 qui permettra de faire la gestion du servo moteur en Reseau uniquement, Grace à un server web.&lt;br /&gt;
&lt;br /&gt;
Etapes :&lt;br /&gt;
&lt;br /&gt;
* Réaliser un server web.&lt;br /&gt;
* Réaliser le programme de l'esp.&lt;br /&gt;
* Faire la carte électronique.&lt;br /&gt;
* Tester.&lt;/div&gt;</summary>
		<author><name>Epeeterm</name></author>
	</entry>
</feed>