Arduino Mega, wifi ESP8266 affichage Page Web de data

Bonjour tout le monde,

Je me permet d'écrire a la communauté car après de longue recherche ces derniers jours je sèche totalement sur une chose qui me parait si simple et qui pourtant me donne des cheveux blancs !

Je suis acutellement entrain de faire un système de répartition de chaleur automotiser avec comme source principal un poele a bois et dans un deuxième temps j'y ajouterais un aerotherme.

Comme vous le deviner, tout celà est gérer par un Arduino Mega, les prises des températures dans avec des DHT22 et la régulation (tirage/nourrisse de répartition de chaleur) avec des servo de modélisme, et biensur la commande de la ventilation avec un relais .... rien de bien extraordinaire .

Tout fonctionne en maquettage, les informations sont visible dans le serial monitor, les veleurs sont paramétrable via une carte SD dans un fichier TXT (simple/efficace.... je débute !)

J'ai acheté un ESP8266 EPS-01, jusque là, pas de soucis, le branchement pose a première vue pas de soucis sauf l'alim 3.3 solutionner sans grande difficultée.

Le soucis, c'est que c'est un domaine qui me dépasse .... le wifi ... je pensait m'en sortir, mais non .... je tatonne, je test et c'est échec sur échec ....

Alors me voilà ... avec une question simple mais trop complexe pour que je la solutionne seul avec mon niveau

--> Comment afficher des datas (par exemple valeur d'un sonde DHT22), dans une "page web" qui serais en faite dans la barre de tache non pas un http://blabla.com/index.htm mais l'adresse IP de l'ESP8266 donc de l'arduino ?

Pour accéder au valeur (equivalente ou presque au serial monitor), via un navigateur web en ce connectant non pas a mon réseau wifi local internet mais directement à l'ESP8266 et en entrant je suppose un IP dans la barre de tache qui ouvrirait une page avec uniquement du texte raffraichit tout XXsecondes ...

Possible ou pas ?

Si une âme charitable pourrais me faire un code de base ça serais juste royal ... vraiment royal ... un code qui initialiserais l'ESP sur un arduino mega et qui me permettrais simplement d'écrire avec l'équivalent du "serial.print" dans un navigateur web ....

Merci beaucoup par avance à tout ceux qui ce pencheront sur ma question ...

See u soon ... i hope.

vous pouvez toujours lire mon tuto mais À mon avis il faut laisser Tomber le ESP01 Et vous pencher vers des Wemos D1 ou similaire (vu que vous avez peu de pins à gérer (combien de capteurs de Temp sur le bus?) le mega n’est pas nécessaire) et lire mon début de tuto sur SPIFFS

Vous pourriez aussi acheter un shield ethernet connecté à votre box et lire un de mes autres tutos (la technique est utilisable aussi avec le wifi)

Merci J-M-L pour votre réponse, j'ai ouvert votre premier lien et déjà "ça me parle", donc je vais étudier ça de pret ...

Le Mega gère dans la configuration final:

-8 DHT22
-2 thermocouple (sondeK)
-9 Servos
-4 Relais
-1 Sd card
-1 LCD I2C
-1 Horloge temps réel
-1 Esp8266
-2 Interrupteur ON/OFF (Test et Marche/arrêt)
-1 Interrupteur ON/OFF/ON (Hiver/OFF/Eté)

Le code est assez "lourd", il y aurais moyen de le simplifier, mais je ne gère pas assez le language C pour le moment mais la "logique" d'un ancien language (le Basics) que je connait relativement bien, ce qui n'économise pas les "lignes" de conditions ...

De toute évidence, si j'arrive a faire ce morceau de programme concernant l'ESP, je reviendrais vers vous pour l'exposer.

Une nouvelle fois, Merci pour tout ces liens.

Im Back,

Bon, après lecture du post à J-M-L que je remercie au passage, j’ai réussi a faire un morceau de code qui fonctionne moyennement.

Le problème est le suivant : Sans pouvoir déterminer le moment ou la page Web seras appelé, les informations peuvent être envoyer partiellement, un raffraichissement au petit bonheur la chance permet d’avoir les informations complète … parfois.

Il me semble que ça soit l’absence de la fonction “if (esp8266.available () )”, mais après de multiple essai je n’arrive pas a la faire fonctionner , ça bloque tout… de plus, j’ai figé le +IPD à la valeur 0 car la fonction de “lecture” de celui ci me revoit toujours la même erreur lors de la compilation ( …if(esp8266.find("+IPD,")) ) [l’erreur est a l’avant dernière parenthèse … why ??? ) et je n’arrive pas à la solutionner …

Donc, si l’un de vous trouve le moyen de résoudre tout celà, et éventuellement faire un rafraichissment de la page toute les XX secondes ça serais super !

Voici le code :

NB : Beaucoup de delay pour bien voir les étapes dans le moniteur série, Utilisation de l’ESP8266 en Serveur uniquement, donc connection en Wifi avec celui ci, et adresse IP (dans mon cas 192.168.4.1) à taper dans le navigateur Web.

#include <SoftwareSerial.h>
SoftwareSerial esp8266(1, 0); // RX, TX de L'ESP
#include <DHT.h>
#define DHTPINSOURCE 6 // DHT en Pin-6
#define DHTTYPESOURCE DHT22 // Le DHT est un modèle "22"
DHT dht(DHTPINSOURCE,DHTTYPESOURCE); // "dht" seras donc l'association des deux du dessus

 void setup() {

  esp8266.begin(115200); // Vitesse de communication de l'ESP
  delay(500);
    esp8266.println("AT+RESTORE");  // Remise a Zero
  delay(2000);
    esp8266.println("AT"); // Test --> Ok 
  delay(2000);
    esp8266.println("AT+CWMODE=2"); // Mode serveur
  delay(2000);
    esp8266.println("AT+CIFSR"); // Connaitre l'IP de L'ESP , dans mon cas 194.168.4.1
  delay(2000);
    esp8266.println("AT+CIPMUX=1"); // Autorisation des connections TCP Multiples
  delay(2000);
    esp8266.println("AT+CIPSERVER=1,80"); // Creation du serveur TCP qui ecoute le port 80
  
 }

void loop()
{ 

  float hsource = dht.readHumidity();
float tsource = dht.readTemperature(); // tsource = temperature releve du capteur
float fsource = dht.readTemperature(true);

delay(1000);
  esp8266.println("AT+CIPSEND=0,13"); // prepa envoi de 12 caracteres
  delay(1000);
  esp8266.println("Temperature:"); // envoi des 12 caractères
  delay(1000);
  esp8266.println("AT+CIPSEND=0,6"); // prepa envoi de 5 caracteres
  delay(1000);
  esp8266.println(tsource); // envoi de la temperature (tsource) sur 5 caracteres
  delay(1000);
  esp8266.println("AT+CIPCLOSE=0"); // fermeture de la conversation 
  delay(1000);

}

Pourquoi passer en SoftwareSerial SoftwareSerial esp8266(1, 0); // RX, TX de L'ESPalors que vous utilisez le port matériel lié à Serial?? Tout va se mélanger.

Comme vous avez un mega laissez Serial pour le debug (pin 0 et 1 liées à l’USB) et utiliser Serial1 ou Serial2 pour votre ESP. N’utilisez pas softwareSerial.


Identez (appuyez ctrl-T) votre code proprement...

esp8266.println("AT+CIPSEND=0,13"); // prepa envoi de 12 caracteres12 ou 13?


Et Recomptez le nombre de caractères ... sans oublier le /r et /n

esp8266.println("Temperature:"); // envoi des 12 caractères

Comment garantissez vous que tsource est sur le bon nombre d’octets?

Où est le HTML? (Header, balises etc?)


Pour rafraîchir une page web vous pouvez regarder ce qu’est en HTML un “Meta refresh” par exemple

Petite info en passant, (je ne maitrise pas du tout ce sujet)

J'ai lu dans un article d'elektor que la vitesse du port série des esp01 était un peu capricieuse.

Il ya une dérive dû à l'horloge je pense.

Donc l'astuce était, au moment de la définition de la vitesse:

esp8266.begin(115200);

faire une loop, en envoyant une commande 'At' et attendre le ok avec un timeout, ajuster la vitesse jusqu'à obtention du 'ok'.

Cela permattait d'assurer une communication stable entre l'arduino et et l'esp.

Comme toute communication série il ne faut pas traiter de manière synchrone un orocesssus asynchrone - donc pour chaque commande il faut attendre la réponse - cf mon tuto