#include <WiFi.h>
#include <ESPAsyncWebServer.h>
#define TRIGGER_PIN 22
#define ECHO_PIN 23
#define LED_DIST_VERMELHO 2
#define LED_DIST_AMARELO 4
#define LED_DIST_VERDE 5
#define SENSOR_FOTO 32
#define LED_LUZ_VERDE 33
#define LED_LUZ_VERMELHO 25
#define BUZZER_PIN 26
bool leds_inicializados = false;
bool luz_acesa = false;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
AsyncWebServer server(80);
const char* host = "api.thingspeak.com";
const char* APIkeyWrite = "P93YX6CUSRMLEJ6K";
void setup() {
Serial.begin(9600);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("conectando ao Wi-Fi...");
}
Serial.println("conectado ao Wi-Fi...");
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_DIST_VERMELHO, OUTPUT);
pinMode(LED_DIST_AMARELO, OUTPUT);
pinMode(LED_DIST_VERDE, OUTPUT);
pinMode(SENSOR_FOTO, INPUT);
pinMode(LED_LUZ_VERDE, OUTPUT);
pinMode(LED_LUZ_VERMELHO, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
delay(5000);
Serial.println(WiFi.localIP());
server.on("/sensor",
HTTP_GET, []
(AsyncWebServerRequest
*request){
int sensoru = analogRead(SENSOR_FOTO);
String sensordata = String(sensoru);
request->send(200, "text/plain", sensordata);
});
server.begin();
server.on("/acionar-buzzer",
HTTP_GET, []
(AsyncWebServerRequest
*request){
digitalWrite(BUZZER_PIN, HIGH);
delay(5000);
digitalWrite(BUZZER_PIN, LOW);
request->send(200, "text/plain", "Buzzer ativado");
});
server.begin();
}
void loop() {
float distancia = medirDistancia();
float luz = medirLuz();
if (distancia < 10) {
digitalWrite(LED_DIST_VERMELHO, HIGH);
digitalWrite(LED_DIST_AMARELO, LOW);
digitalWrite(LED_DIST_VERDE, LOW);
} else if (distancia >= 10 && distancia <= 20) {
digitalWrite(LED_DIST_VERMELHO, LOW);
digitalWrite(LED_DIST_AMARELO, HIGH);
digitalWrite(LED_DIST_VERDE, LOW);
} else if (distancia > 20 ) {
digitalWrite(LED_DIST_VERMELHO, LOW);
digitalWrite(LED_DIST_AMARELO, LOW);
digitalWrite(LED_DIST_VERDE, HIGH);
}
// Verifica a luz
if (luz > 0) {
digitalWrite(LED_LUZ_VERMELHO, HIGH); // presença de luz
digitalWrite(LED_LUZ_VERDE, LOW);
luz_acesa = true;
} else {
digitalWrite(LED_LUZ_VERMELHO, LOW); // sem luz
digitalWrite(LED_LUZ_VERDE, HIGH);
luz_acesa = false;
}
// Ativa o buzzer se o LED vermelho de distância estiver ativo
if (digitalRead(LED_DIST_VERMELHO) == HIGH) {
ativarBuzzer();
}
leds_inicializados = true; // Indica que os LEDs foram inicializados
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort))
{
return;
}
String url = "/update?api_key=";
url += APIkeyWrite;
url += "&field1=";
url += String(distancia);
url += "\r\n";
Serial.println(url);
String endereco = String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n";
Serial.println(endereco);
client.print(endereco);
delay(10000);
delay(1000); // Delay de 1 segundo
}
float medirDistancia() {
digitalWrite(TRIGGER_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGGER_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGGER_PIN, LOW);
float duration = pulseIn(ECHO_PIN, HIGH);
float distance = 0.000001 * duration * 340.3 * 100 / 2;
return distance;
}
float medirLuz() {
return analogRead(SENSOR_FOTO);
}
void ativarBuzzer() {
digitalWrite(BUZZER_PIN, HIGH);
delay(1000);
digitalWrite(BUZZER_PIN, LOW);
}