Resum tècnic: alimenta el sensor a 3.3V, afegeix pull‑up 4.7–10k al pin de dades si el breakout no en porta, respecta l'interval de lectura (DHT11 ≥1s, DHT22 ≥2s). Aquest fitxer conté instruccions, sketches Arduino (inclòs servidor web SSE), blocs de codi amb copy i consells de resolució d'errors.
| Pin sensor | Connexió |
|---|---|
| VCC | 3.3V (no 5V amb ESP32) |
| DATA | GPIO digital (p.ex. 4, 15, 27). Afegir pull‑up 4.7k–10k entre DATA i VCC si cal |
| GND | GND |
Evita pins que afectin el boot mode. Si la placa no arrenca amb el sensor connectat, prova un altre GPIO per DATA.
Cada bloc té un botó per copiar el codi. Canvia DHTPIN, DHTTYPE, ssid i password segons la teva configuració.
// DHT22 mínim per ESP32
#include "DHT.h"
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
delay(1000);
dht.begin();
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Error: lectura DHT fallida");
} else {
Serial.printf("Temp: %.2f C Hum: %.2f %%\n", t, h);
}
delay(2500); // DHT22: >=2000 ms
}
// DHT11 mínim per ESP32
#include "DHT.h"
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
delay(1000);
dht.begin();
}
void loop() {
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Error: lectura DHT fallida");
} else {
Serial.printf("Temp: %.2f C Hum: %.2f %%\n", t, h);
}
delay(1200); // DHT11: >=1000 ms
}
// ESP32 DHT WebServer amb SSE
// Requereix: Adafruit Unified Sensor, DHT sensor library (Adafruit),
// AsyncTCP, ESPAsyncWebServer
#include
#include
#include
#include "DHT.h"
// --- CONFIGURA AQUI ---
const char* ssid = "TU_SSID";
const char* password = "TU_PASSWORD";
#define DHTPIN 15 // GPIO on connectes DATA
#define DHTTYPE DHT22 // DHT22 o DHT11
DHT dht(DHTPIN, DHTTYPE);
AsyncWebServer server(80);
AsyncEventSource events("/events");
unsigned long lastRead = 0;
const unsigned long readInterval = (DHTTYPE == DHT22) ? 2500UL : 1200UL;
float lastTemp = NAN;
float lastHum = NAN;
void setup(){
Serial.begin(115200);
delay(1000);
dht.begin();
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.print("Connexió WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("IP: ");
Serial.println(WiFi.localIP());
// Serveix pàgina principal (HTML embegut)
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
request->send_P(200, "text/html", R"rawliteral(
DHT Web Server
DHT sensor — Lectures en temps real
Temperatura: -- °C
Humitat: -- %
Última actualització: --
)rawliteral");
});
server.addHandler(&events);
server.begin();
}
void loop(){
unsigned long now = millis();
if (now - lastRead >= readInterval) {
lastRead = now;
float h = dht.readHumidity();
float t = dht.readTemperature();
if (isnan(h) || isnan(t)) {
Serial.println("Error: lectura DHT fallida");
events.send("{\"t\":null,\"h\":null}", "reading", millis());
} else {
lastTemp = t;
lastHum = h;
String payload = "{\"t\":" + String(t,2) + ",\"h\":" + String(h,2) + "}";
events.send(payload.c_str(), "reading", millis());
Serial.printf("Temp: %.2f C Hum: %.2f %%\n", t, h);
}
}
// No fer delay() per no bloquejar el servidor asíncron
}
/events estigui actiu.fetch() cada X segons des del navegador (més senzill però menys eficient).