#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
// -------------------------
// Pines
// -------------------------
#define I2C_SDA_PIN 21
#define I2C_SCL_PIN 22
#define DHT_PIN 4
#define DHT_TYPE DHT22
#define FLOW_PIN 34
// -------------------------
// Objetos de sensores
// -------------------------
Adafruit_BMP085 bmp;
Adafruit_MPU6050 mpu;
DHT dht(DHT_PIN, DHT_TYPE);
// -------------------------
// Variables de lectura
// -------------------------
float pressure_hPa = 0.0;
float bmpTemperatureC = 0.0;
float dhtTemperatureC = 0.0;
float humidity = 0.0;
float accelX = 0.0;
float accelY = 0.0;
float accelZ = 0.0;
int flowRaw = 0;
float flowPercent = 0.0;
unsigned long lastReadTime = 0;
const unsigned long READ_INTERVAL_MS = 1000; // 1 segundo
// -------------------------
// Funciones auxiliares
// -------------------------
void readSensors() {
// BMP180
pressure_hPa = bmp.readPressure() / 100.0; // Pa -> hPa
bmpTemperatureC = bmp.readTemperature();
// DHT22
dhtTemperatureC = dht.readTemperature();
humidity = dht.readHumidity();
// MPU6050
sensors_event_t accel, gyro, temp;
mpu.getEvent(&accel, &gyro, &temp);
accelX = accel.acceleration.x;
accelY = accel.acceleration.y;
accelZ = accel.acceleration.z;
// Potenciómetro como flow sensor
flowRaw = analogRead(FLOW_PIN); // 0 a 4095
flowPercent = (flowRaw / 4095.0) * 100.0; // porcentaje simple
}
void printReadings() {
Serial.println("===== Initial Sensor Snapshot =====");
Serial.print("BMP180 Pressure [hPa]: ");
Serial.println(pressure_hPa, 2);
Serial.print("BMP180 Temperature [C]: ");
Serial.println(bmpTemperatureC, 2);
Serial.print("DHT22 Temperature [C]: ");
if (isnan(dhtTemperatureC)) {
Serial.println("ERROR");
} else {
Serial.println(dhtTemperatureC, 2);
}
Serial.print("DHT22 Humidity [%]: ");
if (isnan(humidity)) {
Serial.println("ERROR");
} else {
Serial.println(humidity, 2);
}
Serial.print("MPU6050 Accel X [m/s^2]: ");
Serial.println(accelX, 3);
Serial.print("MPU6050 Accel Y [m/s^2]: ");
Serial.println(accelY, 3);
Serial.print("MPU6050 Accel Z [m/s^2]: ");
Serial.println(accelZ, 3);
Serial.print("Flow Raw [0-4095]: ");
Serial.println(flowRaw);
Serial.print("Flow [%]: ");
Serial.println(flowPercent, 2);
Serial.println("==================================");
Serial.println();
}
void setup() {
Serial.begin(115200);
delay(500);
Serial.println("Starting ESP32 well sensor initialization...");
// Inicialización I2C
Wire.begin(I2C_SDA_PIN, I2C_SCL_PIN);
// Configuración ADC del ESP32
pinMode(FLOW_PIN, INPUT);
// Inicialización DHT22
dht.begin();
// Inicialización BMP180
if (!bmp.begin()) {
Serial.println("ERROR: BMP180 not found. Check wiring.");
} else {
Serial.println("BMP180 initialized successfully.");
}
// Inicialización MPU6050
if (!mpu.begin()) {
Serial.println("ERROR: MPU6050 not found. Check wiring.");
} else {
Serial.println("MPU6050 initialized successfully.");
}
Serial.println("DHT22 initialized.");
Serial.println("ADC flow input initialized.");
Serial.println();
// Captura inicial
readSensors();
printReadings();
}
void loop() {
unsigned long now = millis();
if (now - lastReadTime >= READ_INTERVAL_MS) {
lastReadTime = now;
readSensors();
printReadings();
}
}
Loading
bmp180
bmp180