#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <ESP32Servo.h>
#include "DHT.h"
#define SCREEN_WIDTH 128 // Ancho de la pantalla OLED, en píxeles
#define SCREEN_HEIGHT 64 // Alto de la pantalla OLED, en píxeles
// Crear un objeto de pantalla OLED conectado a I2C
Adafruit_SSD1306 oled(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
Servo myServo; // Crea un objeto servo para controlar un servomotor
const int motorPin1 = 15;
const int motorPin2 = 4;
const int enablePin = 2;
int x = 0; // Variable para indicar el estado del sistema
#define R 14 // Pin del LED indicador
#define DHTPIN 13
#define DHTTYPE DHT22 // Tipo de sensor DHT (DHT11 o DHT22)
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
// Inicialización del sensor DHT
dht.begin();
// Inicialización del servo
myServo.attach(27);
// Configuración de la pantalla OLED
if (!oled.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Suponiendo una dirección I2C de 0x3C
Serial.println(F("Error al inicializar la pantalla OLED"));
while (true); // Si hay un error, detener aquí
}
// Configuración de los pines del motor
pinMode(motorPin1, OUTPUT);
pinMode(motorPin2, OUTPUT);
pinMode(enablePin, OUTPUT);
// Configuración del LED indicador
pinMode(R, OUTPUT);
}
void loop() {
// Lectura de la temperatura y humedad
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// Control del motor basado en la temperatura
if (temperature > 25) {
digitalWrite(motorPin1, HIGH);
digitalWrite(motorPin2, LOW);
analogWrite(enablePin, 255);
// Mover el servomotor a la posición de 90 grados
myServo.write(90);
// Mostrar un mensaje de alerta en la pantalla OLED
oled.clearDisplay(); // Limpiar la pantalla
oled.setTextSize(1.5); // Establecer el tamaño del texto
oled.setTextColor(WHITE); // Establecer el color del texto
oled.setCursor(0, 0); // Establecer la posición para mostrar el mensaje
oled.println("ALERTA: Temperatura alta");
oled.println("Temperatura:");
String tempString = String(temperature) + "Celcius";
oled.println(tempString);
oled.println("Motor: ON");
oled.println("Servo: 90");
oled.display(); // Mostrar en la pantalla OLED
// Encender el LED indicador
digitalWrite(R, HIGH);
} else {
// Apagar el motor y el servomotor
digitalWrite(motorPin1, LOW);
digitalWrite(motorPin2, LOW);
analogWrite(enablePin, 0);
myServo.write(0);
// Mostrar el estado normal en la pantalla OLED
oled.clearDisplay(); // Limpiar la pantalla
oled.setTextSize(1.5); // Establecer el tamaño del texto
oled.setTextColor(WHITE); // Establecer el color del texto
oled.setCursor(0, 0); // Establecer la posición para mostrar el mensaje
oled.println("Temperatura normal");
oled.println("Temperatura:");
String tempString = String(temperature) + "Celcius";
oled.println(tempString);
oled.display(); // Mostrar en la pantalla OLED
// Apagar el LED indicador
digitalWrite(R, LOW);
}
}