Reconectar ao broker mqtt


#1

boas pesssoal…ando aki a guerra com este codigo lol…
entao é assim …
o codigo esta a fazer tudo o ke lhe peço lol (kase tudo…)
o problema aki é k quando falha a net…o mqtt nao se reconeta ao Broker, apenas reconeta a net…
o ke falta no void reconectMQTT para k este volte a conectar-se?

desde ja obrigado e um abraço

//Função: faz a conexão WiFI

void FazConexaoWiFi(void)
{
client.stop();
Serial.println(“Conectando-se à rede WiFi…”);
Serial.println();
delay(1000);
WiFi.begin(SSID_REDE, SENHA_REDE);

while (WiFi.status() != WL_CONNECTED) 
{
    delay(500);
    Serial.print(".");
}

Serial.println("");
Serial.println("WiFi connectado com sucesso!");  
Serial.println("IP obtido: ");
Serial.println(WiFi.localIP());

delay(1000);

}
//Função: inicializa parâmetros de conexão MQTT(endereço do
// broker, porta e seta função de callback)

void initMQTT()
{
MQTT.setServer(BROKER_MQTT, BROKER_PORT); //informa qual broker e porta deve ser conectado
MQTT.setCallback(mqtt_callback); //atribui função de callback (função chamada quando qualquer informação de um dos tópicos subescritos chega)
}

//Função: função de callback

void mqtt_callback(char* topic, byte* payload, unsigned int length)
{

}

//Função: reconecta-se ao broker MQTT (caso ainda não esteja conectado ou em caso de a conexão cair)

void reconectMQTT()
{

while (!MQTT.connected()) 
{
    Serial.print("* Tentando se conectar ao Broker MQTT: ");
    Serial.println(BROKER_MQTT);
    if (MQTT.connect(ID_MQTT)) 
    {
        Serial.println("Conectado com sucesso ao broker MQTT!");
        MQTT.subscribe(TOPICO_SUBSCRIBE);  
    } 
    else
    {
        Serial.println("Falha ao reconectar no broker.");
        Serial.println("Havera nova tentatica de conexao em 2s");
        delay(2000);
    }
}

}

//Função: reconecta-se ao WiFi

void reconectWiFi()
{
//se já está conectado a rede WI-FI, nada é feito.
//Caso contrário, são efetuadas tentativas de conexão
if (WiFi.status() == WL_CONNECTED)
return;

WiFi.begin(SSID_REDE, SENHA_REDE); // Conecta na rede WI-FI

while (WiFi.status() != WL_CONNECTED) 
{
    delay(100);
    Serial.print(".");
}

Serial.println();
Serial.print("Conectado com sucesso na rede ");
Serial.print(SSID_REDE);
Serial.println("IP obtido: ");
Serial.println(WiFi.localIP());

}
//Função: verifica o estado das conexões WiFI e ao broker MQTT.

void VerificaConexoesWiFIEMQTT(void)
{
if (!MQTT.connected())
reconectMQTT(); //se não há conexão com o Broker, a conexão é refeita
reconectWiFi(); //se não há conexão com o WiFI, a conexão é refeita

}


#2

O código estava incompleto no void reconetmqtt… problema resolvido