#include <WiFi.h>
#include <HTTPClient.h>
// --- Wi-Fi ---
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// --- HCSR04 ---
const int trigPin = 5;
const int echoPin = 18;
// --- LEDs ---
const int LED_BAIXO = 23;
const int LED_MEDIO = 22;
const int LED_ALTO = 21;
// --- Node-RED ---
const char* serverName = "http://127.0.0.1:1880/nivel"; // Substitua pelo IP do seu Node-RED
void setup() {
Serial.begin(115200);
// Inicia pinos do sensor
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
// Inicia pinos dos LEDs
pinMode(LED_BAIXO, OUTPUT);
pinMode(LED_MEDIO, OUTPUT);
pinMode(LED_ALTO, OUTPUT);
// Conecta ao Wi-Fi
setup_wifi();
}
void loop() {
float distance = getDistance();
Serial.print("Distância: ");
Serial.print(distance);
Serial.println(" cm");
String level = checkLevel(distance);
level="123"; //Forçado
// if (level != "") { //comentado
sendLevelToServer(level);
// } //comentado
delay(2000); // Medição a cada 2s
}
// --- FUNÇÃO WIFI ---
void setup_wifi() {
Serial.print("Conectando a ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi conectado");
Serial.print("IP: ");
Serial.println(WiFi.localIP());
}
// --- FUNÇÃO SENSOR ---
float getDistance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
long duration = pulseIn(echoPin, HIGH);
float distance = duration * 0.034 / 2;
return distance;
}
// --- FUNÇÃO CHECA NÍVEL E CONTROLA LEDs ---
String checkLevel(float distance) {
// Desliga todos os LEDs antes
digitalWrite(LED_BAIXO, LOW);
digitalWrite(LED_MEDIO, LOW);
digitalWrite(LED_ALTO, LOW);
String level = "";
if (distance <= 17.0) {
digitalWrite(LED_BAIXO, HIGH);
level = "BAIXO";
} else if (distance > 17.0 && distance <= 27.0) {
digitalWrite(LED_MEDIO, HIGH);
level = "MEDIO";
} else if (distance > 27.0 && distance <= 43.0) {
digitalWrite(LED_ALTO, HIGH);
level = "ALTO";
} else {
Serial.println("TRANSBORDOU/BRUMADINHO2");
}
Serial.print("Nível: ");
Serial.println(level);
return level;
}
// --- FUNÇÃO LOGICA PARA NODE-RED ---
void sendLevelToServer(String level) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
String serverPath = serverName;
serverPath += "?level=" + level;
http.begin(serverPath);
Serial.print("HTTP/GET Message: ");
Serial.println(serverPath);
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
} else {
Serial.print("Erro HTTP: ");
Serial.println(httpResponseCode);
}
http.end();
} else {
Serial.println("WiFi Desconectado");
}
}