#include "DHTesp.h"
#include <Stepper.h>
#include <Wire.h>
#include "RTClib.h"
#include <WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
//Ejemplo
#define BOTtoken "7656204038:AAEdjM5pNWg7RnpOcuRnssC9xKT0wZp6SvY"
#define CHAT_ID "6381180768"
const char* ssid = "Wokwi-GUEST";
const char* password = "";
WiFiClientSecure client;
UniversalTelegramBot bot(BOTtoken, client);
RTC_DS1307 rtc;
#define CS_PIN 5
int pinDHT1 = 32;
int pinDHT2 = 33;
int pininiciar = 16;
int titulo; //Nombre del estado
long intervalotem = 1000;
long anteriormillis = 0;
enum State {
esperar, comenzar, estado1, estado2, estado3, estado4, avisar, salir
};
State state;
DHTesp dht1;
DHTesp dht2;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(pininiciar,INPUT_PULLUP);
dht1.setup(pinDHT1, DHTesp::DHT22);
dht2.setup(pinDHT2, DHTesp::DHT22);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
client.setCACert(TELEGRAM_CERTIFICATE_ROOT);
if (WiFi.status() != WL_CONNECTED) {
delay(1000);//Millis
}
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush(); //Que hace?
abort();
}
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running, let's set the time!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
TempAndHumidity data1 = dht1.getTempAndHumidity();
TempAndHumidity data2 = dht2.getTempAndHumidity();
bool iniciar = digitalRead(pininiciar);
long actualmillis = millis();
DateTime time = rtc.now();
iniciar = (iniciar) ? false : true;
if (iniciar && state == esperar) {
state = comenzar;
Serial.println(String("DateTime::TIMESTAMP_FULL:\t")+time.timestamp(DateTime::TIMESTAMP_FULL));
Serial.println("Botón de inicio presionado, cambiando a estado 'comenzar'");
}
switch (state){
case comenzar:
if (actualmillis - anteriormillis > intervalotem){
state = estado1;
titulo = 0;
anteriormillis = actualmillis;
}
break;
case estado1:
if(titulo == 0 ){
Serial.println("Comenzando estado 1");
titulo++;
}
if (actualmillis - anteriormillis > intervalotem){
Serial.print("tem="+String(data1.temperature, 2));
Serial.println("&hum="+String(data1.humidity, 1));
anteriormillis = actualmillis;
}
if(data1.temperature > 40.00) {
Serial.println("Fin estado: Temperatura superada");
state = estado2;
}
break;
case estado2:
if(titulo == 1){
Serial.println("Comenzando estado 2");
++titulo;}
if (actualmillis - anteriormillis > intervalotem){
Serial.print("tem="+String(data1.temperature, 2));
Serial.println("&hum="+String(data1.humidity, 1));
anteriormillis = actualmillis;
if(data1.temperature < 40.00) {
Serial.println("Fin estado: Temperatura superada");
state = estado3;
}
}
break;
case estado3:
if(titulo == 2){
Serial.println("Comenzando estado 3");
++titulo;}
if (actualmillis - anteriormillis > intervalotem){
Serial.print("tem="+String(data1.temperature, 2));
Serial.println("&hum="+String(data1.humidity, 1));
anteriormillis = actualmillis;
if(data1.temperature < data2.temperature + 2.0) {
Serial.println("Compost estabilizado a Temperatura Anbiente");
state = estado4;
}
}
break;
case estado4:
if(titulo == 3){
Serial.println("Comenzando estado 4 Avisar");
bot.sendMessage(CHAT_ID, "Comenzando estado 4");
Serial.println(String("DateTime::TIMESTAMP_FULL:\t")+time.timestamp(DateTime::TIMESTAMP_FULL));
Serial.println("Envio a telegram");
++titulo;
state = salir;
}
break;
case salir:
if (iniciar) {
state = comenzar;
Serial.println("Botón de inicio presionado, cambiando a estado 'comenzar'");
}
break;
default:
break;
}
}