/*
Pinout:
Sensor de humedad y temperatura = D4
sensor de luvia = VP = D36
sensor de humedad en suelo = 35
pantalla 3v = SCL = D22 // SDA = D21
servomotor 5v = D15
RTC = SCL = SCL = D22 // SDA = D21
RELÉ = D25
Botón 1 = D27
Botón 2 = D26
Led indicador de techo = D5
Led indicador de riego = D34
*/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "RTClib.h"
#include <ESP32Servo.h>
#include "DHT.h"
Servo miServo;
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
#define pinDHT 4 //GPIO4 = D4 en ESP32
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing reset pin)
#define AO_PIN 36
#define HUM_PISO_PIN 35
Adafruit_SSD1306 display (SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
const int pinServo = 15; // Pin GPIO al que está conectado el servo
DHT sensorTH (pinDHT, DHT22);
int estadoTecho = 0;
void setup()
{
Serial.begin(9600);
miServo.attach(pinServo,500,2500);
sensorTH.begin ();
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
if(! display.begin(SSD1306_SWITCHCAPVCC, 0x3C))
{
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
display.display();
delay(2);
display.clearDisplay();
display.clearDisplay();
display.setTextColor(WHITE);
//display.startscrollright(0x00, 0x0F);
display.setTextSize(2);
display.setCursor(0,5);
display.print(" Info ");
display.display();
delay(3000);
}
void loop()
{
DateTime now = rtc.now();
int humedad = round(sensorTH.readHumidity());
int temperatura = round(sensorTH.readTemperature());
int rain_value = analogRead(AO_PIN);
float sensorHumPiso = analogRead(HUM_PISO_PIN);
display.clearDisplay();
if(now.second() >= 0 && now.second() < 5 || now.second() >= 10 && now.second() < 15 || now.second() >= 20 && now.second() < 25|| now.second() >= 30 && now.second() < 35|| now.second() >= 40 && now.second() < 45|| now.second() >= 50 && now.second() < 55 ){
display.setTextSize(2);
display.setCursor(75,0);
display.println(now.second(), DEC);
display.setTextSize(2);
display.setCursor(25,0);
display.println(":");
display.setTextSize(2);
display.setCursor(65,0);
display.println(":");
display.setTextSize(2);
display.setCursor(40,0);
display.println(now.minute(), DEC);
display.setTextSize(2);
display.setCursor(0,0);
display.println(now.hour(), DEC);
}else{
display.setTextSize(1);
display.setCursor(0,0);
display.println("Humedad Tierra: ");
display.setTextSize(1);
display.setCursor(92,0);
display.println(sensorHumPiso);
}
if(now.second() >= 0 && now.second() < 10 || now.second() >= 20 && now.second() < 30 || now.second() >= 40 && now.second() < 50 ){
display.setTextSize(1);
display.setCursor(0,20);
display.println("Temperatura: ");
display.setTextSize(1);
display.setCursor(70,20);
display.println (temperatura);
display.setTextSize(1);
display.setCursor(85,20);
display.println("Grados");
}else{
display.setTextSize(1);
display.setCursor(0,20);
display.println("Humedad: ");
display.setTextSize(1);
display.setCursor(50,20);
display.println(humedad);
display.setTextSize(1);
display.setCursor(65,20);
display.println("%");
}
//Servomotor que cambia cada 10 segundo
if(now.second() >= 0 && now.second() < 10 || now.second() >= 20 && now.second() < 30 || now.second() >= 40 && now.second() < 50 )
{
estadoTecho = 90;
miServo.write(estadoTecho);
}else{
estadoTecho = 0;
miServo.write(estadoTecho);
}
if(now.second() >= 0 && now.second() < 5 || now.second() >= 10 && now.second() < 15 || now.second() >= 20 && now.second() < 25|| now.second() >= 30 && now.second() < 35|| now.second() >= 40 && now.second() < 45|| now.second() >= 50 && now.second() < 55 ){
display.setTextSize(2);
display.setCursor(0,40);
if(estadoTecho == 90){
display.print("Techo ON");
}else if(estadoTecho == 0){
display.print("Techo OFF");
}
}else{
display.setTextSize(1);
display.setCursor(0,40);
display.print("Lluvia: ");
display.setTextSize(1);
display.setCursor(50,40);
display.print(rain_value, DEC);
}
display.display();
}