#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
#include <DHT.h>
#define DHTPIN 15 // Pin al que conectas el DHT22 en el ESP32 (puedes cambiarlo según tu conexión)
#define DHTTYPE DHT22 // Tipo de sensor DHT
#define RADIATION_PIN 14 // Módulo de fotorresistor conectado a GPIO 34
// Crear instancias de los sensores
DHT dht(DHTPIN, DHTTYPE);
Adafruit_BMP280 bmp(5);
// Variables para almacenar datos de los sensores
float temperature, humidity, pressure, lightIntensity;
void setup() {
Serial.begin(115200);
dht.begin();
// Inicializar BMP280
if (!bmp.begin(0x76)) { // Dirección I2C por defecto del BMP280
Serial.println("No se pudo encontrar un sensor BMP280 válido, ¡revisa el cableado!");
while (1);
}
}
void loop() {
// Leer temperatura y humedad del DHT22
temperature = dht.readTemperature();
humidity = dht.readHumidity();
// Leer intensidad de luz del módulo de fotorresistor
lightIntensity = analogRead(14);
const float GAMMA = 0.7;
const float RL10 = 50;
// Convert the analog value into lux value:
float voltage = lightIntensity / 4096. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
// Conversión aproximada, ajusta según sea necesario
// Supongamos que el valor máximo (4095) corresponde aproximadamente a 1000 lux
// Verificar si alguna lectura falló y mostrar el resultado
if (isnan(temperature) || isnan(humidity)) {
Serial.println("¡Error al leer el sensor DHT!");
} else {
Serial.print("Temperatura: ");
Serial.print(temperature);
Serial.println(" °C");
Serial.print("Humedad: ");
Serial.print(humidity);
Serial.println(" %");
}
if (isnan(pressure)) {
Serial.println("¡Error al leer el sensor BMP280!");
} else {
Serial.print("Presión: ");
Serial.print(bmp.readPressure());
Serial.println(" Pa");
}
Serial.print("Intensidad de luz: ");
Serial.print(lux);
Serial.println(" lux (aproximado)");
Serial.println("------------------------------------");
delay(200); // Actualizar cada 2 segundos
}