Je découvre les esp8266 avec l'IDE arduino. Pour l'instant j'arrive juste a exécuter du code dessus. Je n'ai pas encore explorer la partie WIFI. J'ai fait de nombreuses recherches à ce sujet sur internet mais c'est trop nébuleux donc je suis venu m'inscrire afin de poser mes questions directement.
Mon projet avec l'esp8266 est simple: J'ai un bouton poussoir sur l'esp8266 et je dois lire son état en temps réel sur mon smartphone en connexion directe (sans passer par un internet ou un router).
Ce que je sais c'est que pour établir une connexion directe entre esp8266 et smartphone on utilise le mode AP (access point) en utilisant la classe SoftAP inclue dans la librairie ESP8266WiFi.h.
Par contre comment mettre à jour les données en temps réel ?
vous mettez l'ESP en mode point d'accès, ça devient une borne WiFi sur laquelle vous connectez votre téléphone (vous n'êtes donc plus connecté à votre WiFi à la maison par exemple). Votre smartphone est alors un client WiFi de l'ESP, ils sont tous les 2 sur même réseau privé IP
votre ESP pourrait par exemple être un serveur web et vous lancez un navigateur sur votre smartphone et vous vous connectez à la page publiée par l'ESP. avec certaines techniques on peut faire que la page web se rafraîchisse toutes les secondes par exemple et vous montrer l'état du bouton. cf par exemple Techniques "avancées" de serveur web sur ESP8266 ou le post 25 de ce tuto (application à un ESP) Exemple d'usage du shield Ethernet pour faire un serveur interactif
Je pense qu'il y a énormément de malentendu avec ces CI Espressif.
On lit que c'est formidable, qu'avec ces nouveaux produits tout est devenu facile.
Pas si facile que ça. Ce n'est pas le CI qui fait le site Ethernet, car c'est bien un site Ethernet qu'il faut écrire dans le CI Espressif.
Le CI Espressif ce n'est qu'un morceau de silicium.
Le WiFi c'est juste un protocole normalisé. Il faut apprendre à faire des sites, pas avec des CMS comme Wordpress ou Joomla qui ne tiendront jamais dans la mémoire d'un microcontrôleur, mais en codant basiquement en HTML et en utilisant les CSS et javascript.
ESP8266 ou ESP32 oui, mais après avoir consulté des tutos de HTML , CSS, javascript ou fréquenter des forums spécialisés en html et css.
Oui ça c'est ce que j'avais compris et c'est exactement ce que je veux
Là par-contre je comprends moins. Ou alors il y a un malentendu... quand on parle d'esp8266 configuré en serveur web c'est bien qu'il y a un rapport avec internet (le web) non ?
Ça tombe bien je connais l'html et le css (j'avais réalisés quelques petits sites perso il y a quelques années) le truc c'est, par exemple, qu'il faut savoir comment lier la variable bouton de mon code arduino au html...
Il y a un rapport… mais vous pouvez avoir un navigateur qui accède votre serveur web hébergé sur votre ESP tout cela dans votre réseau IP privé composé de 2 machines, L’ESP et le smartphone. Pas besoin De Internet pour cela.
le “Web” que vous avez en tête c’est un peu la même chose mais avec des centaines de millions de machines et serveurs, tous reliés dans un grand réseau IP par le biais d’Internet.
Bah, on parle généralement du web pour parler du world wide web qui est internet. Jamais entendu parler du web pour désigner un réseau privé. Enfin, bref c'est pas un problème
Sinon,le lien renvoie vers un programme de portail captif totalement non-commenté. Ça m'aide pas trop.
Où alors faisiez-vous juste référence à la bibliothèque ESPAsyncWebServer ?
Non pas tout à fait. Le World Wide Web — communément appelé WWW , W3 , ou le web — est un système de pages web publiques interconnectées à travers l'Internet.
Le web et l'internet ne sont pas la même chose : le web est l'une des nombreuses applications bâties au-dessus de l'internet.
Ensuite un navigateur web peut être utilisé en dehors d’internet, sur un réseau privé et parler à un serveur web qui est aussi disponible que sur ce réseau privé.
Le portail captif c’est ce que vous voulez en fait. Le code met L’ESP en mode point accès WiFi et offre une interface d’accès automatique lorsque vous choisissez ce réseau sur votre smartphone. Reste plus qu’à publier ensuite l’état de votre pin
/* ESP8266 12E configuré en Serveur HTTP en mode point d'acces. */
/* Appuyer sur le bouton allume la led*/
/* La page web donne l'état des broches de la led(GPIO2), du bouton(GPIO5) et d'une autre (GPIO4)*/
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
const char *ssid = "8266ap";
const char *password = "thereisnospoon";
const int LED = 2; // led bleu d'origine (état logique inversée)
const int BTN = 5; // bouton poussoir
int btnstate = 0;
char header[] = "<!DOCTYPE html><html><head><title>ESP8266</title><meta charset=\"utf-8\"></head><body>";
char footer[] = "</body></html>";
ESP8266WebServer server(80); // création de l'objet serveur
void handleRoot() {
char buffer[800];
strcpy(buffer, header);
sprintf(buffer, "%s<table border=\"1\"><tr><td>GPIO2</td><td>%s</td></tr>", buffer, digitalRead(2) == HIGH ? "HIGH" : "LOW");
sprintf(buffer, "%s<tr><td>GPIO4</td><td>%s</td></tr>", buffer, digitalRead(4) == HIGH ? "HIGH" : "LOW");
sprintf(buffer, "%s<tr><td>GPIO5</td><td>%s</td></tr></table>", buffer, digitalRead(5) == HIGH ? "HIGH" : "LOW");
strcat(buffer, footer);
server.send(200, "text/html", buffer);
}
void setup() {
pinMode (LED, OUTPUT);
pinMode (BTN, INPUT);
digitalWrite (LED, HIGH); // led éteinte
Serial.begin(115200);
Serial.println();
Serial.print("Configuring access point...");
WiFi.softAP(ssid, password);
IPAddress myIP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(myIP);
server.on("/", handleRoot); //faire le lien entre une URL et une fonction grâce à la fonction on
server.begin();
Serial.println("HTTP server started");
}
void loop() {
server.handleClient(); //dire au serveur de s'occuper des clients:
btnstate = digitalRead(BTN);
if (btnstate == HIGH)
{
digitalWrite(LED, LOW);
}
else
{
digitalWrite(LED, HIGH);
}
Serial.println(btnstate);
delay(1);
}
Bonjour à tous, beaucoup de soucis de compréhension vient des abus de langage.
Boxo ce que tu veux c'est un serveur HTTP, le serveur WEB utilisant l'internet et les serveur HTTP entre autre.
Pourquoi ce limiter au mode AP, alors qu'il serait beaucoup plus simple d'utiliser en mode station, si tu compte l'utiliser chez toi et qu'il y a déjà un réseau accessible par le WIFI?
Pour avoir l'état de ton bouton en temps réel le plus simple est de demander la donnée toutes les x secondes en utilisant "setintervale" et "XMLHttpRequest".
Je n'ai jamais testé sur un ESP8266, mais l'utilisation d'une websocket serait encore mieux, mais moins simple, je trouve.