#include <WiFi.h>
#include <PubSubClient.h>
// Configurações do Wi-Fi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Configurações do MQTT
const char* mqttServer = "test.mosquitto.org"; // Endereço do broker MQTT
const int mqttPort = 1883; // Porta do broker MQTT
const char* mqttUser = ""; // Usuário do MQTT (se necessário)
const char* mqttPassword = ""; // Senha do MQTT (se necessário)
const char* topic = "sensor/data"; // Tópico para publicação
// Variáveis para Wi-Fi e MQTT
WiFiClient espClient;
PubSubClient client(espClient);
// Serial RX e TX pins
#define RX_PIN 16 // Pino RX do ESP32
#define TX_PIN 17 // Pino TX do ESP32
void setup() {
Serial.begin(115200);
Serial2.begin(115200, SERIAL_8N1, RX_PIN, TX_PIN); // Inicializa a comunicação Serial2
// Conecta ao Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Conectando ao Wi-Fi...");
}
Serial.println("Conectado ao Wi-Fi");
// Configura o cliente MQTT
client.setServer(mqttServer, mqttPort);
}
void loop() {
// Conecta ao MQTT
if (!client.connected()) {
reconnect();
}
client.loop();
// Lê os dados do Arduino via Serial
if (Serial2.available()) {
String jsonData = Serial2.readStringUntil('\n'); // Lê a linha recebida
Serial.println("Dados recebidos: " + jsonData);
// Publica os dados no broker MQTT
if (client.publish(topic, jsonData.c_str())) {
Serial.println("Dados publicados: " + jsonData);
} else {
Serial.println("Falha ao publicar dados");
}
}
delay(1000); // Aguarda um segundo antes da próxima leitura
}
// Função para reconectar ao MQTT
void reconnect() {
while (!client.connected()) {
Serial.print("Tentando conexão ao MQTT...");
// Tenta conectar
if (client.connect("ESP32Client", mqttUser, mqttPassword)) {
Serial.println("Conectado ao MQTT");
} else {
Serial.print("Falha com código: ");
Serial.print(client.state());
delay(2000);
}
}
}