// Code ESP32_1:
#include <WiFi.h>
#include <PubSubClient.h>
const char* SSID = "Wokwi-GUEST";
const char* PASSWORD = "";
const char* MQTT_BROKER = "broker.emqx.io";
const int MQTT_PORT = 1883;
const int PIN_BOTAO = 13;
const int PIN_BOTAO2 = 26;
const int LED_AZUL = 2;
const int LED_VERMELHO = 4;
const int LED_LARANJA = 15;
// MQTT Topics
const char* TOPICO_BOTAO = "fiap/iot//mahmoud1/botao";
const char* TOPICO_BOTAO2 = "fiap/iot//mahmoud1/botao2";
const char* TOPICO_TEMP = "fiap/iot//mahmoud2/temperatura";
// const char* TOPICO_STATUS_LED = "fiap/iot/mahmoud2/led/status";
WiFiClient espClient;
PubSubClient client(espClient);
bool ultimoEstadoBotao = HIGH;
bool estadoBotaoAtual = HIGH;
bool ultimoEstadoBotao2 = HIGH;
bool estadoBotaoAtual2 = HIGH;
unsigned long ultimoDebounce = 0;
const unsigned long debounceDelay = 50;
void conectarWiFi() {
Serial.print("Conectando ao WiFi");
WiFi.begin(SSID, PASSWORD, 6);
while (WiFi.status() != WL_CONNECTED) {
delay(300);
Serial.print(".");
}
Serial.println();
Serial.println("WiFi conectado!");
Serial.print("IP: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* payload, unsigned int length) {
String mensagem = "";
for (unsigned int i = 0; i < length; i++) {
mensagem += (char)payload[i];
}
mensagem.trim();
mensagem.toUpperCase();
Serial.print("Mensagem recebida no tópico: ");
Serial.println(topic);
Serial.print("Payload: ");
Serial.println(mensagem);
// Recebe a temperatura publicada pelo Aluno 2
if (String(topic) == TOPICO_TEMP) {
float temperatura = mensagem.toFloat();
Serial.print("Temperatura recebida de mahmoud 2: ");
Serial.println(temperatura);
if (temperatura < 25.0) {
digitalWrite(LED_AZUL, HIGH);
digitalWrite(LED_VERMELHO, LOW);
digitalWrite(LED_LARANJA, LOW);
Serial.println("LED azul ligado - temperatura baixa");
} else (temperatura > 10.0) {
digitalWrite(LED_AZUL, LOW);
digitalWrite(LED_VERMELHO, HIGH);
digitalWrite(LED_LARANJA, LOW);
Serial.println("LED vermelho ligado - temperatura alta");
} else {
digitalWrite(LED_AZUL, LOW);
digitalWrite(LED_VERMELHO, LOW);
digitalWrite(LED_LARANJA, HIGH);
Serial.println("LED laranja ligado - temperatura estavel");
}
}
// // Recebe confirmação do LED do Aluno 2
// if (String(topic) == TOPICO_STATUS_LED) {
// Serial.print("Status do LED de mahmoud 2: ");
// Serial.println(mensagem);
// }
}
void conectarMQTT() {
while (!client.connected()) {
Serial.print("Conectando ao broker MQTT... ");
String clientId = "ESP32_mahmoud1_";
clientId += String((uint32_t)esp_random(), HEX);
if (client.connect(clientId.c_str())) {
Serial.println("conectado!");
// Assina os tópicos necessários
client.subscribe(TOPICO_TEMP);
// client.subscribe(TOPICO_STATUS_LED);
Serial.println("Tópicos assinados:");
Serial.println(TOPICO_TEMP);
// Serial.println(TOPICO_STATUS_LED);
} else {
Serial.print("falhou, rc=");
Serial.print(client.state());
Serial.println(" tentando novamente em 2s...");
delay(2000);
}
}
}
void verificarBotao() {
bool leitura = digitalRead(PIN_BOTAO);
if (leitura != ultimoEstadoBotao) {
ultimoDebounce = millis();
}
if ((millis() - ultimoDebounce) > debounceDelay) {
if (leitura != estadoBotaoAtual) {
estadoBotaoAtual = leitura;
// Botão pressionado (INPUT_PULLUP -> LOW)
if (estadoBotaoAtual == LOW) {
Serial.println("Botão pressionado! Enviando comando a mahmoud 2...");
client.publish(TOPICO_BOTAO, "PRESSED");
}
}
}
ultimoEstadoBotao = leitura;
}
void verificarBotao2() {
bool leitura = digitalRead(PIN_BOTAO2);
if (leitura != ultimoEstadoBotao2) {
ultimoDebounce = millis();
}
if ((millis() - ultimoDebounce) > debounceDelay) {
if (leitura != estadoBotaoAtual2) {
estadoBotaoAtual2 = leitura;
// Botão pressionado (INPUT_PULLUP -> LOW)
if (estadoBotaoAtual2 == LOW) {
Serial.println("Botão pressionado! Enviando comando a mahmoud 2...");
client.publish(TOPICO_BOTAO2, "PRESSED");
}
}
}
ultimoEstadoBotao2 = leitura;
}
void setup() {
Serial.begin(115200);
Serial.println("Iniciando ESP32 de mahmoud 1...");
pinMode(PIN_BOTAO, INPUT_PULLUP);
pinMode(PIN_BOTAO2, INPUT_PULLUP);
pinMode(LED_AZUL, OUTPUT);
pinMode(LED_VERMELHO, OUTPUT);
pinMode(LED_LARANJA, OUTPUT);
digitalWrite(LED_AZUL, LOW);
digitalWrite(LED_VERMELHO, LOW);
digitalWrite(LED_LARANJA, LOW);
conectarWiFi();
client.setServer(MQTT_BROKER, MQTT_PORT);
client.setCallback(callback);
conectarMQTT();
}
void loop() {
if (WiFi.status() != WL_CONNECTED) {
conectarWiFi();
}
if (!client.connected()) {
conectarMQTT();
}
client.loop();
verificarBotao();
verificarBotao2();
}Desliga
Liga