#define BLYNK_PRINT Serial
#define BLYNK_TEMPLATE_ID "TMPL6EaYGxiuG"
#define BLYNK_TEMPLATE_NAME "lux meter"
#define BLYNK_AUTH_TOKEN "N2vACviNO6OD1sEEnooEcX1bsV4ALzAY"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <DHTesp.h>
#include <ESP32Servo.h>
#include <BlynkSimpleEsp32.h>
#include <WiFiClient.h>
const char* apiEndpoint = "https://super-trout-69r5764wx65h56rr-5000.app.github.dev/sensor_data";
const char* ssid = "Wokwi-GUEST";
const char* password = "";
int pinDHT = 15;
int pinBuzzer = 12;
int pinServo = 4;
DHTesp dht;
Servo servo;
const float GAMMA = 0.7;
const float RL10 = 50;
char auth[] = "N2vACviNO6OD1sEEnooEcX1bsV4ALzAY";
char ssidd[] = "Wokwi- GUEST";
char pass[] = "";
BlynkTimer timer;
// LCD configuration
LiquidCrystal_I2C lcd(0x27, 16, 2);
void sendSensor()
{
int analogValue = analogRead(36);
float voltage = analogValue * 5/4095.0;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
Serial.print("Lux: ");
Serial.println(lux);
Blynk.virtualWrite(V0, lux);
}
void setupWifi()
{
Serial.begin(9600);
Serial.print("Connecting to WiFi");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.print(" Connected: ");
Serial.println(WiFi.localIP());
}
void setup()
{
Serial.begin(115200);
dht.setup(pinDHT, DHTesp::DHT22);
servo.attach(pinServo);
setupWifi();
Blynk.begin(auth, ssidd, pass);
timer.setInterval(1L, sendSensor);
// Inicializar pines del buzzer
pinMode(pinBuzzer, OUTPUT);
// Initialize the LCD
lcd.init();
lcd.backlight();
}
void sendData(float temperature, float humidity)
{
Serial.print("Sending data to API: ");
HTTPClient http;
http.begin(apiEndpoint);
http.addHeader("Content-Type", "application/json");
StaticJsonDocument<200> doc;
doc["temperature"] = temperature;
doc["humidity"] = humidity;
doc["date_time"] = "2021-01-01 00:00:00";
String json;
serializeJson(doc, json);
int httpResponseCode = http.POST(json);
if (httpResponseCode > 0)
{
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
String responseString = http.getString();
Serial.println("Received response: " + responseString);
}
else
{
Serial.print("Error code: ");
Serial.println(httpResponseCode);
}
http.end();
}
void moveServo(int angle)
{
servo.write(angle);
delay(500);
servo.write(0);
}
void loop()
{
TempAndHumidity data = dht.getTempAndHumidity();
// Display on Serial Monitor
Serial.println("Temperature: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("---");
// Display on LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: " + String(data.temperature, 2) + "C");
lcd.setCursor(0, 1);
lcd.print("Humidity: " + String(data.humidity, 1) + "%");
// Verificar umbrales y activar buzzer y servo
if (data.temperature > 30.0 || data.humidity > 20.0)
{
digitalWrite(pinBuzzer, HIGH);
moveServo(90);
}
else
{
digitalWrite(pinBuzzer, LOW);
moveServo(180);
}
delay(1000);
sendData(data.temperature, data.humidity);
}