Problema con ESP32 e creazione sito web

Salve a tutti, mi scuso ma non so se sono nella sezione inglese o italiana (non sto usando la traduzione automatica) ma nel sito mi spuntano metà cose in italiano e un altra metà in inglese.
Premettiamo che non sono ancora un esperto nel linguaggio Arduino e nella programmazione ma me la cavo.
Volevo parlarvi di questo problema: ho un codice che quando lo vado a caricare nella mia ESP32 non mi da nessun problema, in breve il codice consiste nel creare un piccolo sito web dove l'ESP32 andrà a scrivere i dati di umidità e temperatura presi da un sensore DHT11.
Ecco il codice:

#include <WiFi.h>
#include <DHT.h>
#define DHTPIN 27 // define the pin where the DHT11 sensor is connected
#define DHTTYPE DHT11 // define the type of DHT sensor
#include <WiFiClient.h>

DHT dht(DHTPIN, DHTTYPE); // initialize the DHT sensor

// Network credentials Here
const char* ssid     = "ESP32 di Mazy";
const char* password = "mazymazy32";

// Set web server port number to 80
WiFiServer server(80);


// Current time
unsigned long currentTime = millis();
// Previous time
unsigned long previousTime = 0;
// Define timeout time in milliseconds
const long timeoutTime = 2000;

void setup() {
  Serial.begin(115200);
  
  WiFi.softAP(ssid,password);
  
  // Print IP address and start web server
  Serial.println("");
  Serial.println("IP address: ");
  Serial.println(WiFi.softAPIP());
  server.begin();
}

void loop() {
  WiFiClient client = server.available();   // Listen for incoming client
}

void handleRoot() {
  float humidity = dht.readHumidity(); // read humidity value from DHT sensor
  float temperature = dht.readTemperature(); // read temperature value from DHT sensor

  String html = "<html><head><title>ESP32 DHT11 Sensor</title></head><body>"; // create HTML page
  html += "<h1>ESP32 DHT11 Sensor</h1>";
  html += "<p>Humidity: " + String(humidity) + "%</p>"; // add humidity value to HTML page
  html += "<p>Temperature: " + String(temperature) + "°C</p>"; // add temperature value to HTML page
  html += "</body></html>";
  delay (200);
  server.printf ("html");
}


Quando però vado a connettermi al sito web mi da l'errore "ERR_CONNECTION_RESET" dicendomi che la pagina non ha inviato dati.
Sapete gentilmente darmi una soluzione per far si che ciò non accada?

Perché infatti non gli stai inviando nulla...
Secondo me stai facendo confusione con gli esempi NON per ESP32.

Il consiglio è quello di aprire uno degli esempi inclusi nel core ESP32 per Arduino e partire da li come base di sviluppo.

Ad esempio questo qui:

Lo so sto avendo un po di confusione perché ho fatto un mix di tanti codici che ho trovato online per soddisfare quel che voglio realizzare

Ok grazie mille per l'esempio che mi hai mandato, ma il codice che avevo prima era in parte giusto? (Solo quando leggeva i dati e li scriveva in un html )
Perché se lo è posso mettere quella parte nel codice che mi hai fornito e risolvere

Un software non si scrive facendo taglia e cuci...
I presunti "tutorial" che si trovano online sono il male assoluto se uno vuole imparare per davvero.

Quando parti da un progetto/esempio già scritto come in questo caso devi prima analizzarlo, capire cosa e come fa e solo quando ti è tutto chiaro inserisci le funzionalità che mancano e di cui hai bisogno.

Questo ovviamente richiede studio ed approfondimenti che vanno oltre il copia e incolla.

Prendiamo l'esempio che ti ho suggerito:

Viene usata la libreria WebServer inclusa nel core (non è quindi necessario installare nessuna libreria esterna)

#include <WebServer.h>
WebServer server(80);

La libreria in questione consente di definire degli "handler" che vengono associati a specifiche richieste da parte del client:
http:/192.168.4.1/ la richiesta è '/'
http:/192.168.4.1/ledon la richiesta è '/ledon'

// Questa funzione verrà associata nel setup() alla chiamata HTTP / 
// ovvero la radice del webserver (es:  http://192.168.4.1/)
void handleRoot() {
  digitalWrite(led, 1);
  server.send(200, "text/plain", "hello from esp32!");
  digitalWrite(led, 0);
}

// Questa funzione invece sarà eseguita quando il client 
// richiede una risorsa che il server non gestisce
void handleNotFound() {
  ......
}

// Allo stesso modo, puoi definire altri handlers dove 
// vai ad implementare tu quello che il server dovrà fare
void handleDHT() {
  // Costruisco a runtime il contenuto della risposta del server
  float humidity = dht.readHumidity(); // read humidity value from DHT sensor
  float temperature = dht.readTemperature(); // read temperature value from DHT sensor

  String html = "<html><head><title>ESP32 DHT11 Sensor</title></head><body>"; // create HTML page
  html += "<h1>ESP32 DHT11 Sensor</h1>";
  html += "<p>Humidity: " + String(humidity) + "%</p>"; // add humidity value to HTML page
  html += "<p>Temperature: " + String(temperature) + "°C</p>"; // add temperature value to HTML page
  html += "</body></html>";
  
  // Invio al client la risposta appena costruita
  server.send(200, "text/plain", html );
}

void setup() {
 ....
 server.on("/", handleRoot);
 server.onNotFound(handleNotFound);
 
 // aggiungo il nuovo handler. 
 // Se vuoi che questa risposta sia servita quando 
 // il browser chiama la radice / rimuovi l'handler precedente.
 server.on("/dht", handleDHT);
 ....
1 Like

Si mi rendo conto che stavolta ho fatto un macello :joy:!
Altre volte mi ha funzionato (ma con codici più semplici), stavolta no

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.