#include <WiFi.h>
#include <PubSubClient.h>
// Definindo os pinos dos IoTs e do novo botão no ESP32
const int TEMP_INTERNA_1_PIN = 34;
const int TEMP_INTERNA_2_PIN = 35;
const int TEMP_EXTERNA_3_PIN = 32;
const int buttonPin = 23; // Novo botão
const int LED_ALERTA_PIN = 13; // Sinal luminoso intermitente
const int BUZZER_PIN = 12; // Sinal sonoro
// Faixas de temperatura para cada IoT
float limite_ineficiencia_1 = 68;
float limite_ideal_1 = 79;
float limite_alarmante_1 = 100;
float limite_ineficiencia_2 = 20;
float limite_ideal_2 = 35;
float limite_alarmante_2 = 40;
float limite_ineficiencia_3 = 9;
float limite_ideal_3 = 10;
float limite_alarmante_3 = 30;
// Configurações de WiFi e MQTT
const char* ssid = "Wokwi-GUEST"; // Substituir pelo seu SSID
const char* password = ""; // Substituir pela senha da sua rede WiFi
const char* mqtt_server = "test.mosquitto.org"; // Endereço do seu broker Mosquitto
WiFiClient espClient;
PubSubClient client(espClient);
// Função para reconectar ao MQTT
void reconnect() {
while (!client.connected()) {
Serial.print("Tentando conectar ao broker MQTT...");
if (client.connect("ESP32Caldeira")) {
Serial.println("Conectado!");
client.subscribe("caldeira/comando"); // Caso queira controlar algo via Node-RED
} else {
Serial.print("Falha, rc=");
Serial.print(client.state());
Serial.println(" Tentando novamente em 5 segundos...");
delay(5000);
}
}
}
// Função de callback para tratar comandos recebidos via MQTT
void callback(char* topic, byte* payload, unsigned int length) {
String mensagem;
for (unsigned int i = 0; i < length; i++) {
mensagem += (char)payload[i];
}
Serial.print("Mensagem recebida no tópico: ");
Serial.println(topic);
Serial.print("Mensagem: ");
Serial.println(mensagem);
}
// Função para ativar alerta
void ativarAlerta() {
digitalWrite(LED_ALERTA_PIN, HIGH); // Liga o LED (sinal luminoso)
tone(BUZZER_PIN, 1000); // Emite som contínuo
}
// Função para desativar alerta
void desativarAlerta() {
digitalWrite(LED_ALERTA_PIN, LOW); // Desliga o LED
noTone(BUZZER_PIN); // Para o som
}
void setup() {
// Configurando os pinos de entrada/saída
pinMode(TEMP_INTERNA_1_PIN, INPUT);
pinMode(TEMP_INTERNA_2_PIN, INPUT);
pinMode(TEMP_EXTERNA_3_PIN, INPUT);
pinMode(buttonPin, INPUT_PULLUP); // Configurando o novo botão
pinMode(LED_ALERTA_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
Serial.begin(115200);
// Conexão WiFi
Serial.println("Conectando ao WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println("\nWiFi conectado");
// Configuração do cliente MQTT
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
// Conectar ao broker MQTT
reconnect();
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// Leitura das temperaturas dos sensores
float temp_interna_1 = analogRead(TEMP_INTERNA_1_PIN) * (100.0 / 4095.0); // Leitura do ADC do ESP32 (0-4095)
float temp_interna_2 = analogRead(TEMP_INTERNA_2_PIN) * (50.0 / 4095.0); // Ajuste o fator conforme necessário
float temp_externa_3 = analogRead(TEMP_EXTERNA_3_PIN) * (40.0 / 4095.0); // Ajuste o fator conforme necessário
// Publica as leituras no broker MQTT
String mensagem = "Temperatura Interna 1: " + String(temp_interna_1) + " ºC, ";
mensagem += "Temperatura Interna 2: " + String(temp_interna_2) + " ºC, ";
mensagem += "Temperatura Externa 3: " + String(temp_externa_3) + " ºC";
client.publish("caldeira/leituras", mensagem.c_str());
Serial.println(mensagem);
// Verificando condições de alerta
if (temp_interna_1 >= limite_alarmante_1 || temp_interna_2 >= limite_alarmante_2 || temp_externa_3 >= limite_alarmante_3) {
ativarAlerta();
client.publish("caldeira/alerta", "Alerta: Temperatura Alarmante!");
} else {
desativarAlerta();
}
// Verifica o novo botão
int buttonState = digitalRead(buttonPin);
if (buttonState == LOW) {
ativarAlerta();
client.publish("caldeira/alerta", "Botão pressionado! Desligando máquina.");
Serial.println("Botão pressionado! Desligando máquina e enviando alerta.");
} else {
desativarAlerta();
}
delay(1000); // Pausa de 1 segundo entre as leituras
}