#include <WiFi.h> // Biblioteca para gerenciar a conexão WiFi no ESP32
#include <PubSubClient.h> // Biblioteca para gerenciar a comunicação MQTT
// Credenciais para acessar a rede WiFi e o broker MQTT
const char* ssid = "Wokwi-GUEST"; // Nome da rede WiFi
const char* password = ""; // Senha da rede (nenhuma neste caso)
const char* mqtt_server = "test.mosquitto.org"; // Endereço do broker MQTT (mosquitto)
WiFiClient WOKWI_client; // Objeto que gerencia a comunicação WiFi
PubSubClient client(WOKWI_client); // Objeto cliente MQTT usando a conexão WiFi
// Função para conectar ao WiFi
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid); // Exibe no monitor serial o nome da rede que está tentando conectar
WiFi.mode(WIFI_STA); // Define o modo WiFi como estação (STA)
WiFi.begin(ssid, password); // Inicia a conexão com a rede WiFi
// Espera até que a conexão WiFi seja bem-sucedida
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print("."); // Exibe pontos no monitor serial enquanto tenta conectar
}
Serial.println("");
Serial.println("WiFi connected"); // Informa que a conexão foi realizada
Serial.println("IP address: ");
Serial.println(WiFi.localIP()); // Exibe o endereço IP atribuído pelo roteador
}
// Função para reconectar ao broker MQTT caso a conexão seja perdida
void reconnect() {
while (!client.connected()) { // Continua tentando até que a conexão seja restabelecida
Serial.print("Attempting MQTT connection...");
// Tenta se conectar ao broker com o nome do cliente "WOKWI_client"
if (client.connect("WOKWI_client")) {
Serial.println("connected"); // Conexão bem-sucedida com o broker MQTT
} else {
// Se falhar, exibe o código de erro e espera 5 segundos antes de tentar novamente
Serial.print("failed, rc=");
Serial.print(client.state()); // Exibe o estado do cliente MQTT
Serial.println(" try again in 5 seconds");
delay(5000); // Atraso de 5 segundos
}
}
}
// Função de configuração inicial
void setup() {
pinMode(2, OUTPUT); // Define o pino 2 (LED) como saída
pinMode(15, OUTPUT); // Define o pino 15 (LED) como saída
Serial.begin(115200); // Inicia a comunicação serial
setup_wifi(); // Conecta ao WiFi
client.setServer(mqtt_server, 1883); // Configura o servidor MQTT e porta padrão (1883)
//client.setCallback(callback); // Linha comentada, pois não há função de callback definida
}
// Função para indicar a conexão WiFi através de um LED
void Conectado_Wifi() {
if (WiFi.status() == WL_CONNECTED) // Verifica se está conectado ao WiFi
digitalWrite(2, HIGH); // Liga o LED no pino 2 se estiver conectado
else
digitalWrite(2, LOW); // Desliga o LED se não estiver conectado
}
// Função para indicar a conexão ao broker MQTT através de um LED
void Conectado_Mosquito() {
if (client.connected()) // Verifica se está conectado ao broker MQTT
digitalWrite(15, HIGH); // Liga o LED no pino 15 se estiver conectado
else
digitalWrite(15, LOW); // Desliga o LED se não estiver conectado
}
// Função para publicar dados no tópico MQTT
void Publica_Dados() {
int Valor_Pot = analogRead(34); // Lê o valor do pino analógico 34 (potenciômetro)
Serial.println(Valor_Pot);
// Publica o valor lido no tópico "TOPICO_WOKWI"
client.publish("IOT_SUPREMO_MAQUINA3_SENSOR2",String(Valor_Pot).c_str());
delay(1000); // Atraso de 1 segundo antes da próxima publicação
}
// Função principal que roda continuamente
void loop() {
reconnect(); // Tenta reconectar ao broker MQTT, se necessário
Conectado_Wifi(); // Verifica e aciona o LED do WiFi
Conectado_Mosquito(); // Verifica e aciona o LED do broker MQTT
Publica_Dados(); // Publica os dados do potenciômetro no broker MQTT
}