#include <WiFi.h>
#include <PubSubClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <ESP32Servo.h>
#define ONE_WIRE_BUS 4
#define PIN_LDR 33
#define PIN_SERVO 19
#define MQTT_BROKER "broker.mqttdashboard.com"
#define MQTT_PORT 1883
#define MQTT_TOPIC "Virtus3/temperatura"
#define PIN_TRIGGER 14
#define PIN_ECHO 27
const int PIN_R = 18;
const int PIN_G = 5;
const int PIN_B = 17;
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
Servo myservo;
WiFiClient wifiClient;
PubSubClient client(wifiClient);
void setup() {
Serial.begin(115200);
sensors.begin();
WiFi.begin("Wokwi-GUEST", ""); // Conecte-se à rede Wi-Fi aberta
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Conectado à rede Wi-Fi!");
client.setServer(MQTT_BROKER, MQTT_PORT);
pinMode(PIN_LDR, INPUT);
myservo.attach(PIN_SERVO, 500, 2400);
pinMode(PIN_TRIGGER, OUTPUT);
pinMode(PIN_ECHO, INPUT);
pinMode(PIN_R, OUTPUT);
pinMode(PIN_G, OUTPUT);
pinMode(PIN_B, OUTPUT);
}
void loop() {
sensors.requestTemperatures();
float temperature = sensors.getTempCByIndex(0);
Serial.print("Temperatura: ");
Serial.println(temperature);
float Iluminacao = digitalRead(PIN_LDR);
float angle;
if (digitalRead(PIN_LDR) == LOW) {
angle = 90;
Serial.print("Iluminação: Light \n");
} else {
angle = 0;
Serial.print("Iluminação: Dark \n");
}
myservo.write(angle);
Serial.print("Angulo: ");
Serial.print(angle);
Serial.print("\n");
digitalWrite(PIN_TRIGGER, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIGGER, LOW);
float pulso_tempo = pulseIn(PIN_ECHO, HIGH);
float distancia = pulso_tempo / 58;
Serial.print("Distancia : ");
Serial.print(distancia);
Serial.print("Cm \n");
int PorcTanqueAgua;
if (distancia < 70) { // Menos de 20 % --> vermelho
analogWrite(PIN_R, 255);
analogWrite(PIN_G, 0);
analogWrite(PIN_B, 0);
PorcTanqueAgua = 20;
}else if (distancia < 150) { // Menos 40 % --> Amarelo
analogWrite(PIN_R, 255);
analogWrite(PIN_G, 255);
analogWrite(PIN_B, 0);
PorcTanqueAgua = 40;
}else if (distancia < 250) { // Menos de 70 % --> Verde
analogWrite(PIN_R, 0);
analogWrite(PIN_G, 255);
analogWrite(PIN_B, 0);
PorcTanqueAgua = 70;
}else { // maior que 70 % --> azul
analogWrite(PIN_R, 0);
analogWrite(PIN_G, 0);
analogWrite(PIN_B, 255);
PorcTanqueAgua = 100;
}
if (client.connect("EVirtusClientTest")) {
client.publish(MQTT_TOPIC, String(temperature).c_str());
client.publish(MQTT_TOPIC, String(Iluminacao).c_str());
client.publish(MQTT_TOPIC, String(angle).c_str());
client.publish(MQTT_TOPIC, String(distancia).c_str());
client.publish(MQTT_TOPIC, String(PorcTanqueAgua).c_str());
client.disconnect();
Serial.println("Dados enviados para o broker MQTT!");
} else {
Serial.println("Falha na conexão com o broker MQTT.");
}
delay(100); // Envie a cada 10 segundos
}
Loading
ds18b20
ds18b20