#include <WiFi.h> // Biblioteca para conexão Wi-Fi
#include <PubSubClient.h> // Biblioteca para MQTT
// Configurações de Wi-Fi (no Wokwi, use "Wokwi-GUEST")
const char* ssid = "Wokwi-GUEST"; // Nome da rede (simulada no Wokwi)
const char* password = ""; // Senha (vazia no Wokwi)
// Broker MQTT público
const char* mqtt_server = "mqtt.eclipseprojects.io"; // Servidor MQTT
WiFiClient espClient; // Cliente Wi-Fi para conexão
PubSubClient client(espClient); // Cliente MQTT
const int ledPin = 27; // LED conectado ao GPIO2 (no Wokwi)
// ==================== CALLBACK ====================
// Função chamada quando uma mensagem é recebida no tópico inscrito
void callback(char* topic, byte* payload, unsigned int length) {
String message; // Variável para armazenar a mensagem recebida
// Converte o payload (dados recebidos) em uma String
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
Serial.print("Mensagem recebida no tópico [");
Serial.print(topic);
Serial.print("]: ");
Serial.println(message);
// Controla o LED conforme a mensagem
if (message == "ON") {
digitalWrite(ledPin, HIGH); // Acende o LED
Serial.println("LED LIGADO");
} else if (message == "OFF") {
digitalWrite(ledPin, LOW); // Apaga o LED
Serial.println("LED DESLIGADO");
}
}
// ==================== SETUP ====================
void setup() {
Serial.begin(115200); // Inicia comunicação serial (para debug)
pinMode(ledPin, OUTPUT); // Configura o pino do LED como OUTPUT
// Conecta ao Wi-Fi
WiFi.begin(ssid, password);
Serial.print("Conectando ao Wi-Fi");
while (WiFi.status() != WL_CONNECTED) { // Aguarda conexão
delay(500);
Serial.print(".");
}
Serial.println("\nConectado ao Wi-Fi!");
client.setServer(mqtt_server, 1883); // Configura o servidor MQTT
client.setCallback(callback); // Define a função de callback
// Conecta ao broker e se inscreve no tópico
reconnect();
}
// ==================== RECONNECT ====================
// Reconecta ao broker MQTT e se inscreve no tópico
void reconnect() {
while (!client.connected()) { // Enquanto não estiver conectado...
Serial.print("Tentando conexão MQTT...");
if (client.connect("ESP32Subscriber")) { // Tenta conectar com um ID único
Serial.println("Conectado ao Broker MQTT!");
client.subscribe("casa/lampada"); // Inscreve-se no tópico "casa/lampada"
} else {
Serial.print("Falha, rc=");
Serial.print(client.state());
Serial.println(" Tentando novamente em 5s...");
delay(5000); // Espera 5 segundos antes de tentar novamente
}
}
}
// ==================== LOOP ====================
void loop() {
if (!client.connected()) { // Se desconectado, tenta reconectar
reconnect();
}
client.loop(); // Mantém a conexão MQTT ativa
}