#include <WiFi.h>
#include "ThingSpeak.h"
#include "secrets.h"
#include <DHTesp.h>
#include <LiquidCrystal_I2C.h>
#define red 14
#define yellow 12
#define green 13
#define buzzer 32
#define sensor 5
#define DHT_PIN 19
DHTesp dhtSensor;
LiquidCrystal_I2C lcd(0x27, 16, 2);
//Initialize the LCD display
unsigned long myChannelNumber = SECRET_CH_ID;
const char * myWriteAPIKey = SECRET_WRITE_APIKEY;
char ssid[] = SECRET_SSID; // your network SSID (name)
char pass[] = SECRET_PASS; // your network password
WiFiClient client;
String alerta = "N";
void sendData (int gas, int temp, int hum, String alerta) {
ThingSpeak.setField(1, gas);
ThingSpeak.setField(2, temp);
ThingSpeak.setField(3, hum);
ThingSpeak.setField(4, alerta);
int httpCode = ThingSpeak.writeFields(myChannelNumber, myWriteAPIKey);
if (httpCode == 200) {
Serial.println("Channel write successful.");
}
else {
Serial.println("Problem writing to channel. HTTP error code " + String(httpCode));
}
}
void setup() {
Serial.begin(115200);
lcd.init(); // empieza el lcd
lcd.backlight();
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
delay(100);
WiFi.mode(WIFI_STA);
ThingSpeak.begin(client); //inicializar con parámetro cliente
pinMode(red, OUTPUT);
pinMode(yellow, OUTPUT);
pinMode(green, OUTPUT);
pinMode(buzzer, OUTPUT);
}
void HandleResponse() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
float temperature = (data.temperature);
float humidity = (data.humidity);
int value = analogRead(sensor);
value = map(value, 0, 4095, 0, 100);
if (temperature <= 28) { //Normal
digitalWrite(red, 0);
digitalWrite(yellow, 0);
digitalWrite(green, 1);
digitalWrite(buzzer, LOW);
noTone(buzzer);
alerta = "Nom";
sendData(temperature, humidity, value, alerta);
}
if (temperature < 28 && temperature <= 35) { //Advertencia
digitalWrite(red, 0);
digitalWrite(yellow, 1);
digitalWrite(green, 0);
digitalWrite(buzzer, LOW);
noTone(buzzer);
alerta = "Ad";
sendData(temperature, humidity, value, alerta);
}
if (temperature > 35) { //Crítica
digitalWrite(red, 0);
digitalWrite(yellow, 1);
digitalWrite(green, 1);
digitalWrite(buzzer, HIGH);
tone(buzzer, 100);
alerta = "C";
sendData(temperature, humidity, value, alerta);
}
if (temperature > 40) { //Alerta Crítica
digitalWrite(red, 1);
digitalWrite(yellow, 0);
digitalWrite(green, 0);
digitalWrite(buzzer, HIGH);
tone(buzzer, 100);
alerta = "Ur";
sendData(temperature, humidity, value, alerta);
}
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Alerta:");
lcd.print(alerta); //imprime alerta
lcd.setCursor(0, 1);
lcd.print("Temp:");
lcd.print(temperature); //imprime temp
delay(2000);
}
void loop() {
HandleResponse();
if (WiFi.status() != WL_CONNECTED) {
Serial.print("Attempting to connect to SSID: ");
Serial.println(SECRET_SSID);
while (WiFi.status() != WL_CONNECTED) {
WiFi.begin(ssid, pass); // Connect to WPA/WPA2 network. Change this line if using open or WEP network
Serial.print(".");
delay(5000);
}
Serial.println("\nConnected.");
}
delay(20000);
}