I’m having problems connecting the esp32 to the hive mq server, the esp’s connection to wifi works normally but it can’t connect to MQTT, here’s the code:
#include <WiFi.h>
#include <PubSubClient.h>
// Definições de credenciais Wi-Fi e MQTT
const char* ssid = “xxxxx”; // Substitua pelo seu SSID
const char* password = “xxxxxxxxxx”; // Substitua pela sua senha
const char* mqttServer = “27874f98269d4dbf9d7xxxxxxxxxxx.s1.eu.hivemq.cloud”; // Seu broker MQTT
const int mqttPort = 8883; // Porta do broker MQTT
// Configurações do cliente MQTT
WiFiClient espClient; // Usando WiFiClient
PubSubClient client(espClient);
// Função de callback para mensagens recebidas
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Mensagem recebida no tópico: “);
Serial.print(topic);
Serial.print(” com payload: ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
// Função para conexão Wi-Fi
void setup_wifi() {
delay(10);
Serial.print("Conectando ao WiFi ");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(“.”);
}
Serial.println(“\nConectado ao WiFi”);
Serial.print("Endereço IP: ");
Serial.println(WiFi.localIP());
}
void reconnect() {
// Tentar reconectar ao broker
while (!client.connected()) {
Serial.print(“Tentando conectar ao MQTT…”);
if (client.connect(“pedro”, “Belson123@”, NULL)) {
Serial.println(“Conectado ao MQTT”);
client.subscribe(“tensao”, 1);
client.subscribe(“corrente”, 1);
client.subscribe(“potencia”, 1);
} else {
Serial.print("Falha na conexão, código: ");
Serial.println(client.state());
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqttServer, mqttPort);
client.setCallback(callback); // Definindo a função de callback
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// Publicar dados dinâmicos
static unsigned long lastPublish = 0;
if (millis() - lastPublish > 2000) { // Publica a cada 2 segundos
lastPublish = millis();
int tensao_value = random(100, 121); // Valor de tensão entre 100 e 120
float corrente_value = random(10, 51) / 10.0; // Valor de corrente entre 1.0 e 5.0
float potencia_value = tensao_value * corrente_value;
client.publish("tensao", String(tensao_value).c_str(), true);
client.publish("corrente", String(corrente_value).c_str(), true);
client.publish("potencia", String(potencia_value).c_str(), true);
}
}