#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <DHT.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
#define DHTPIN 5 // Pino de conexão do sensor DHT11 (D5)
#define DHTTYPE DHT11 // Tipo do sensor DHT (DHT11 neste caso)
#define RELAY1_PIN 25
#define RELAY2_PIN 33
#define RELAY3_PIN 32
#define RELAY4_PIN 35
DHT dht(DHTPIN, DHTTYPE);
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
void setup() {
Serial.begin(9600);
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("Falha ao inicializar o display OLED"));
for (;;);
}
display.display();
delay(2000);
display.clearDisplay();
pinMode(RELAY1_PIN, OUTPUT);
pinMode(RELAY2_PIN, OUTPUT);
pinMode(RELAY3_PIN, OUTPUT);
pinMode(RELAY4_PIN, OUTPUT);
// Inicialmente, todos os relés estão abertos
digitalWrite(RELAY1_PIN, LOW);
digitalWrite(RELAY2_PIN, LOW);
digitalWrite(RELAY3_PIN, LOW);
digitalWrite(RELAY4_PIN, LOW);
dht.begin();
}
void loop() {
// Mede a temperatura e umidade
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Limpa o display
display.clearDisplay();
// Exibe os valores de temperatura e umidade no display OLED
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.print("Temperatura:");
display.setTextSize(2);
display.setCursor(0, 10);
display.print(temperature);
display.setTextSize(1);
display.print(" C");
display.setTextSize(1);
display.setCursor(0, 30);
display.print("Umidade:");
display.setTextSize(2);
display.setCursor(0, 40);
display.print(humidity);
display.setTextSize(1);
display.print(" %");
// Atualiza o display
display.display();
// Aciona o relé IN1 (fecha por 2 segundos e abre)
digitalWrite(RELAY1_PIN, HIGH);
delay(2000);
digitalWrite(RELAY1_PIN, LOW);
delay(1000);
// Aciona o relé IN2 (fecha por 2 segundos e abre)
digitalWrite(RELAY2_PIN, HIGH);
delay(2000);
digitalWrite(RELAY2_PIN, LOW);
delay(1000);
// Aciona o relé IN3 (fecha por 2 segundos e abre)
digitalWrite(RELAY3_PIN, HIGH);
delay(2000);
digitalWrite(RELAY3_PIN, LOW);
delay(1000);
// Aciona o relé IN4 (fecha por 2 segundos e abre)
digitalWrite(RELAY4_PIN, HIGH);
delay(2000);
digitalWrite(RELAY4_PIN, LOW);
delay(1000);
// Todos os relés fecham por 5 segundos
digitalWrite(RELAY1_PIN, HIGH);
digitalWrite(RELAY2_PIN, HIGH);
digitalWrite(RELAY3_PIN, HIGH);
digitalWrite(RELAY4_PIN, HIGH);
delay(5000);
// Todos os relés abrem
digitalWrite(RELAY1_PIN, LOW);
digitalWrite(RELAY2_PIN, LOW);
digitalWrite(RELAY3_PIN, LOW);
digitalWrite(RELAY4_PIN, LOW);
delay(1000);
// Fechamento simultâneo dos relés por 5 segundos
digitalWrite(RELAY1_PIN, HIGH);
digitalWrite(RELAY2_PIN, HIGH);
digitalWrite(RELAY3_PIN, HIGH);
digitalWrite(RELAY4_PIN, HIGH);
delay(5000);
// Todos os relés abrem novamente
digitalWrite(RELAY1_PIN, LOW);
digitalWrite(RELAY2_PIN, LOW);
digitalWrite(RELAY3_PIN, LOW);
digitalWrite(RELAY4_PIN, LOW);
delay(1000);
}