Bonjour je voulais faire une commande de mon esp8266 depuis l'extérieur cet à dire hors de porté de wifi(de n'importe ou avec le tel sans wifi) ,avec mon tel piloté l'esp8266 pour allumé une led , wifi tel désactivé ,données mobiles tel activées, c'est mon cahier des charges.
Et la commence la malédiction.
J'ai trouvé un code que j'arrive à compilé et téléversé mais qui ne fonctionne pas au bout de quelques ... jours je me rends compte que je n'ai pas la bonne version de librairie installée (pour mon cas la version 2.3.0) , la je me dis ça va fonctionner mais (entre temps le disque dur de mon ordi est HS ) suite à mon problème de disque dur qui lâche en pleins projet je le fait changer , et au bout de quelques ... jours je me dis la c'est bon ça va fonctionner , mais surprise (bon je m'y attendais quand même) ça ne fonctionne pas malgré la redirection de port fait dans la "freebox" ,ou bout de quelques... jours on me signale qu'il me faut demander à free une adresse IP publique fixe et non partagé pour que mon projet fonctionne ,donc je fais la demande d'une adresse IP publique fixe que l'on m'attribut en trente minute(bravo free) et au bout de... trente minutes je me dis "yes ça va fonctionner je suis le meilleur" et bien non ça fonctionne pas quand je tape mon adresse IP+:7689/1234/LED_OFF avec le wifi tel actif cela fonctionne ,mais quand je désactive le wifi et active les données mobile tel cela ne fonctionne pas, une histoire de fou ,c'est pour ça que je fais ce post pour q' une personne comme moi qui veut faire un projet similaire ne cherche pas pour rien, je laisse le code que l'on trouve sur le net mais qui ne fonctionne pas!
#include <ESP8266WiFi.h>
// Informations de connexion Wi-Fi
const char* ssid = "nom de reseau wifi" ;
const char* password = "mot de passe" ;
const int ledPin = D1 ;
// Adresse IP fixe :
IPAddress staticIP ( 192 , 168 , 0 , 50 ) ; // l'adresse de mon esp8266
IPAddress gateway ( 192 , 168 , 0 , 1 ) ;
IPAddress subnet ( 255 , 255 , 255 , 0 ) ;
// Clé d'accès
const String accessKey = "1234" ; // pour sécurisé un peut plus
// Création du serveur HTTP
WiFiServer server ( 7689 ) ; // j'ai défini ce port.
// Prototypes des fonctions
void sendControlPage ( WiFiClient & client , int ledState = LOW ) ;
void sendForbiddenPage ( WiFiClient & client ) ;
void setup ( )
{
// Définition de la broche de la LED
pinMode ( ledPin , OUTPUT ) ;
digitalWrite ( ledPin , LOW ) ;
// Initialisation du port série pour le débogage
Serial . begin ( 115200 ) ;
Serial . println ( "Démarrage..." ) ;
// Configuration de l'adresse IP fixe
WiFi . config ( staticIP , gateway , subnet ) ;
// Connexion au Wi-Fi
Serial . print ( "Connexion à " ) ;
Serial . println ( ssid ) ;
WiFi . begin ( ssid , password ) ;
// Attente de la connexion Wi-Fi
while ( WiFi . status ( ) != WL_CONNECTED )
{
delay ( 500 ) ;
Serial . print ( "." ) ;
}
// Affichage des informations de connexion
Serial . println ( "" ) ;
Serial . println ( "Wi-Fi connecté !" ) ;
Serial . print ( "Adresse IP : " ) ;
Serial . println ( WiFi . localIP ( ) ) ;
// Démarrage du serveur
server . begin ( ) ;
Serial . println ( "Serveur HTTP démarré !" ) ;
}
void loop ( )
{
// Vérification de l'arrivée d'un client
WiFiClient client = server . available ( ) ;
if ( ! client )
{
return ; // Aucun client connecté
}
// Attente des données du client
while ( ! client.available ( ) )
{
delay ( 1 ) ;
}
// Lecture de la requête du client
String request = client.readStringUntil('\r');
client.flush();
// Debug: Afficher la requête reçue
Serial . println ( "Requête reçue :" ) ;
Serial . println ( request ) ;
// Vérifier si la requête contient la clé d'accès
if ( ! request . startsWith ( "GET /"+accessKey+"/" ) )
{
sendForbiddenPage ( client ) ;
return ;
}
// Supprimer la clé d'accès de la requête pour analyser les commandes
request = request . substring ( accessKey . length ( ) + 6 ) ;
if ( request . startsWith ( "LED_ON" ) )
{
digitalWrite ( ledPin , HIGH ) ; // Allumer la LED
sendControlPage ( client , HIGH ) ;
}
else if ( request . startsWith ( "LED_OFF" ) )
{
digitalWrite ( ledPin , LOW ) ; // Éteindre la LED
sendControlPage ( client , LOW ) ;
}
else
{
sendForbiddenPage ( client ) ;
}
}
void sendControlPage ( WiFiClient & client , int ledState )
{
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
client.println("<style>");
client.println("body { font-family: Arial; text-align: center; margin: 0; display: flex; flex-direction: column; "
"justify-content: flex-start; align-items: center; height: 100vh; padding: 20px; box-sizing: border-box; }");
client.println("h1 { color: black; font-size: 36px; margin-bottom: 5px; }"); // "Contrôle LED" en noir
client.println("p { font-size: 24px; color: black; margin-bottom: 20px; }"); // "État :" en noir
client.println("div { margin-top: 30px; }"); // Espacement entre l'état et les boutons
client.println("button { padding: 15px; margin: 10px; font-size: 18px; background-color: #6a0dad; color: white; border: none; "
"border-radius: 5px; cursor: pointer; }"); // Boutons en violet
client.println("button:hover { background-color: #4b0082; }"); // Style hover pour les boutons violets
client.println("footer { margin-top: 40px; font-size: 20px; color: green; }"); // Style général pour "Emma ma chérie"
client.println("footer span { font-size: 40px; font-weight: bold; color: green; }"); // "Emma" en police plus grosse
client.println("footer span + span { font-size: 20px; font-weight: normal; color: black; }"); // "ma chérie" en noir
client.println("</style>");
client.println("</head>");
client.println("<body>");
client.println("<h1>Contrôle LED</h1>"); // "Contrôle" avec l'accent correctement encodé
client.println("<p>État : <strong>" + String((ledState == HIGH) ? "Allumée" : "Éteinte") + "</strong></p>"); // Accents sur "État", "Allumée", "Éteinte"
// Section des boutons avec espacement
client.println("<div>");
client.println("<a href=\"/"+accessKey+"/LED_ON\"><button>Allumer</button></a>");
client.println("<a href=\"/"+accessKey+"/LED_OFF\"><button>Éteindre</button></a>"); // "Éteindre" avec l'accent
client.println("</div>");
// Ajout du texte "Emma ma chérie" avec un espace entre "Emma" et "ma chérie"
client.println("<footer><span>Emma</span> <span> ma chérie</span></footer>"); // Espace entre "Emma" et "ma chérie"
// Ajout d'un espace plus grand entre "Emma ma chérie" et "vive le ski"
client.println("<footer style=\"color: blue; font-size: 24px; margin-top: 30px;\">vive le ski</footer>"); // "vive le ski" en bleu
client.println("</body>");
client.println("</html>");
}
void sendForbiddenPage ( WiFiClient & client )
{
client.println("HTTP/1.1 403 Forbidden");
client.println("Content-Type: text/html");
client.println("Connection: close");
client.println();
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<head>");
client.println("<style>");
client.println("body { font-family: Arial; text-align: center; background-color: #f8f9fa; "
"display: flex; justify-content: center; align-items: center; "
"height: 100vh; margin: 0; flex-direction: column; }"); // Flexbox avec orientation verticale
client.println("h1 { color: #dc3545; font-size: 72px; margin: 0; }"); // Très grosse police pour "Accès refusé"
client.println("p { font-size: 48px; color: #dc3545; margin: 0; }"); // Police plus grande pour "Clé d'accès incorrecte"
client.println("</style>");
client.println("</head>");
client.println("<body>");
client.println("<h1>Accès refusé</h1>");
client.println("<p>Clé d'accès incorrecte.</p>");
client.println("</body>");
client.println("</html>");
}

