DEMANDE D'AIDE

Portrait de ADOU

Bonjour j'ai réaliser un point d'accés avec esp01  pour conaitre la température et humiditer tout  fonctionnait au début mais aprés mon moniteur série d'arduino n'arrive plus à  affiche adresse ip.(que je doit utiliser pour me connecter)

le probleme ait que mon moniteur serien'arrive plus a afficher les donner  

voila le code 

#include <SoftwareSerial.h>
#include "DHT.h"
#define DHTTYPE DHT22 
#define DHTPIN 12     // Pin Data DHT 22
#define DEBUG true

SoftwareSerial espSerial(6, 7); // RX | TX
DHT dht(DHTPIN, DHTTYPE);
void setup()
{
  Serial.begin(9600);      //Serial monitor 
  espSerial.begin(115200);  //ESP Baud rate
  dht.begin();
  
  sendData("AT+RST\r\n",2000,DEBUG);    // reset module
  sendData("AT+CWMODE=2\r\n",1000,DEBUG);   // ESP01 sebagai access point
  sendData("AT+CIFSR\r\n",1000,DEBUG);    // Cek ip address
  sendData("AT+CIPMUX=1\r\n",1000,DEBUG);   // Konfig multiple connections
  sendData("AT+CIPSERVER=1,80\r\n",1000,DEBUG); //server on port 80
}

float baca_suhu(){
  float temp = dht.readTemperature();
  if (isnan(temp)){
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  return(temp);
 }
 
float baca_kelembaban(){
  float hum = dht.readHumidity();
  if (isnan(hum)){
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  return(hum);
 }
 
int Id_koneksi;
void loop(){
  if(espSerial.available()){
  //kirim data ke browser
  if(espSerial.find("+IPD,")){
    delay(300);
    Id_koneksi = espSerial.read()-48;
    
    String webpage;
    webpage = "HTTP/1.1 200 OK\r\n";
    webpage += "Content-Type: text/html\r\n";
    webpage += "Connection: close\r\n";
    webpage += "Refresh: 20\r\n"; //refresh browser 15 detik
    webpage += "\r\n";
    webpage += "<!DOCTYPE HTML>\r\n";
    webpage += "<html>\r\n";
    webpage += "<body style=\"background-color:powderblue;\">";
    webpage +="<h1 align=\"center\" style=\"font-size:80px;\">DHT Monitor</h1>";
    espsend(webpage);
     if(baca_suhu() != 0){
      String div_suhu="<p style=\"font-size:60px;\">Temperature: ";
      String div_suhu_data =  String(baca_suhu(), 2);
      div_suhu+= div_suhu_data;
      div_suhu+=" &#x2103";   //code Hexa untuk derajat Celcius
      div_suhu+="</p>";
      espsend(div_suhu);
     }    
     else{
      String sensor_status="sensor is not conneted";
      espsend(sensor_status);                                     
     } 
     
     if(baca_kelembaban() != 0){
      String div_kelembaban="<p style=\"font-size:60px;\">Kelembaban: ";
      String div_kelembaban_data =  String(baca_kelembaban(), 2);
      div_kelembaban+= div_kelembaban_data;
      div_kelembaban+=" &#37";   //code Html untuk persen
      div_kelembaban+="</p>";
      espsend(div_kelembaban);
     }    
     else{
      String sensor_status="sensor is not conneted";
      espsend(sensor_status);                                     
     }
     
     String webpage2;
     webpage2="</body></html>";
     espsend(webpage2);
      
     String closeCommand = "AT+CIPCLOSE=";  //menutup koneksi 
     closeCommand+=Id_koneksi; 
     closeCommand+="\r\n";
     sendData(closeCommand,3000,DEBUG);
    }
  }
}
 
//kirim data ESP ke halaman web browser
 void espsend(String d){
   String cipSend = " AT+CIPSEND=";
   cipSend += Id_koneksi; 
   cipSend += ",";
   cipSend +=d.length();
   cipSend +="\r\n";
   sendData(cipSend,1000,DEBUG);
   sendData(d,1000,DEBUG); 
}

//menampilkan data dari ESP di Serial Monitor         
String sendData(String command, const int timeout, boolean debug){
  String response = "";
  espSerial.print(command);
  long int time = millis();
  while( (time+timeout) > millis()){
     while(espSerial.available()){
       char c = espSerial.read(); 
       response+=c;
    }  
  }
  
  if(debug){
    Serial.print(response); //Tampilkan respon ESP di serial monitor arduino
  }
  return response;
}

merci d'avance

Portrait de wolfram69

Je suis désolé ADOU en dehors qu fait que tu parles d'un ESP01 et que le code ne correspond pas du tout à ce module je ne comprends pas grand chose à ton code qui me parait d'une complexité inutile si tu veux uniquement avoir un module qui t'affiche une page HTML avec des infos sur la température et l'humidité.

De plus je n'ai jamais rien compris au commande "AT" qui ne fonctionnent pas toujours et dont je fuis comme la gale !

Donc ne compte pas trop sur mon aide.

Portrait de wolfram69

Par contre j'ai écrit un code qui me semble beaucoup plus clair mais comme je n'utilise que des Wemos D1 je l'ai écrit pour cette carte, je pense que tu n'auras pas de difficulté particulière avec la tienne

Voilà mon code qui n'est peut être pas optimisé à 100 % mais plus concis  :

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include "DHT.h"
#define DHTPIN D4
#define DHTTYPE DHT22
float Humidite;
float Temperature;
const char *Reseau = "ServeurMeteo";
const char *MotDePasse = "";
String html ;

ESP8266WebServer serveur(80);
DHT monDHT(DHTPIN, DHTTYPE);

void setup() {
  delay(100);
  Serial.begin(115200);
  monDHT.begin();
  pinMode(LED_BUILTIN,OUTPUT);
  Serial.println();
  Serial.print("Configuration du point d'acces...");
  WiFi.softAP(Reseau, MotDePasse);
  IPAddress monIP = WiFi.softAPIP();
  Serial.print("Addresse du point d'accès: ");
  Serial.println(monIP);
  serveur.on("/", PageWeb);
  serveur.begin();
  Serial.println("Serveur HTTP demarre");
}

void loop() {
  serveur.handleClient();
}
void PageWeb() {
 
  Humidite = monDHT.readHumidity();
  Temperature = monDHT.readTemperature();
  if (isnan(Humidite))
    return;

digitalWrite(LED_BUILTIN,LOW);
  html = "<!DOCTYPE html> <html> <body> <h1>Temperature</h1> <head><meta http-equiv=\"refresh\"";
  html += "content=\"2\"><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.5\"></head>";
  html += String(Temperature, 1) + " Degres Celsius</div><h1>Humidite</h1>";
  html += String(Humidite, 1) + " %</div> </body> </html>";
  serveur.send(200, "text/html", html);
  digitalWrite(LED_BUILTIN,HIGH);
 
}

Pour l'utiliser il faut se connecter sur le Réseau dont le SSID est ServeurMeteo et lancer 192.168.4.1 dans un navigateur !

Après une utilisation prolongée j'ai apporté quelques modifications en gras dans le code car DHT22 donne des erreurs de temps à autre

Je prépare une vidéo démo sur youtub !

Portrait de Walter

Bonjour Adou, question bête mais ton IDE arduino est bien configuré en 9600 bauds?
Sinon essaye de tout mettre en commentaire sauf le Serian.begin et de mettre un 'Serial.println("Coucou!");' dans la fonction loop pour voir ce qui ce passe.
Sinon tu n'a rien mis sur les broches TX/RX de ta carte arduino?

Portrait de wolfram69

Joubliai je ne pense pas que ton code puisse fonctionner car tu as plusieurs lignes

return;
Alors que dans une fonction non vide ( void ) il faut utiliser :
return(Valeur);

Autrement le compilateur plante !!!!

Portrait de wolfram69

Mon code a été modifié suite à des erreurs du DHT22 !