#include <PubSubClient.h>
#include <WiFi.h>
#include <ESP32Servo.h>
const char* mqttServer = "broker.hivemq.com";
const int mqttPort = 1883;
WiFiClient espClient;
PubSubClient client(espClient);
Servo myservo;
bool servomotorLigado = false;
void reconnect() {
while (!client.connected()) {
Serial.println("Tentando conectar ao MQTT Broker...");
if (client.connect("ESP32_2")) {
Serial.println("Conectado ao MQTT Broker!");
client.subscribe("temperatura_status");
} else {
delay(2000);
}
}
}
void setup() {
Serial.begin(115200);
myservo.attach(19);
myservo.write(0);
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Conectado!");
client.setServer(mqttServer, mqttPort);
client.setCallback(callback);
reconnect();
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// Verifique se o servomotor deve ser ligado ou desligado com base na variável servomotorLigado
if (servomotorLigado) {
// Ligue o servomotor
for (int pos = 0; pos <= 180; pos += 1) {
myservo.write(pos);
delay(15);
}
delay(1000); // Mantenha ligado por 1 segundo
// Desligue o servomotor
for (int pos = 180; pos >= 0; pos -= 1) {
myservo.write(pos);
delay(15);
}
delay(1000); // Espere um segundo antes de repetir o ciclo
}
}
void callback(char* topic, byte* payload, unsigned int length) {
String message = "";
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
if (message == "Superaquecimento") {
servomotorLigado = true;
client.publish("servomotor", "Ligado");
} else {
servomotorLigado = false;
client.publish("servomotor", "Desligado");
}
}