Este tópico contém respostas, possui 2 vozes e foi atualizado pela última vez por  kara.mario 2 semanas .

Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #90103

    kara.mario
    Participante

    Pessoal estou com um problema, recentemente comecei a me aventurar com o NodeMCU e o protocolo MQTT.

    Estou tentando fazer o acionamento de mais de uma carga (leds), através de varios topicos. porem não estou conseguindo integrar corretamente.

     

    Me orientei em como base o código abaixo , com a ideia de modifica-lo para que atende-se a ideia a cima:

    FIcarei grato por ideias de como proceder com isso.

     

     

    //Projeto: Desenvolvimento IOT – Acionando Cargas com WEMOS D1 e MQTT
    //Autor: Baú da Eletrônica

    #include <ESP8266WiFi.h>
    #include <PubSubClient.h>

    #define DEBUG

    #define P1 13 //pino de saida para acionamento da Lampada L1

    //informações da rede WIFI

    const char* ssid = “xxxxxxxxx”; //SSID da rede WIFI
    const char* password = “xxxxxxx”; //senha da rede wifi

    //informações do broker MQTT – Verifique as informações geradas pelo CloudMQTT

    const char* mqttServer = “xxxxxxxx”; //server
    const char* mqttUser = “xxxxxxxx”; //user
    const char* mqttPassword = “xxxxxxxx”; //password
    const int mqttPort = xxxxx; //port
    const char* mqttTopicSub =”xxxxx”; //tópico que sera assinado

    WiFiClient espClient;// Cria o objeto espClient
    PubSubClient client(espClient);// Instancia o Cliente MQTT passando o objeto espClient

    void setup() {

    Serial.begin(115200);
    pinMode(P1, OUTPUT);

    WiFi.begin(ssid, password);

    //Função: verifica o estado das conexões WiFI e ao broker MQTT.
    // Em caso de desconexão (qualquer uma das duas), a conexão
    // é refeita.

    while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    #ifdef DEBUG
    Serial.println(“Conectando ao WiFi..”);
    #endif
    }

    client.setServer(mqttServer, mqttPort);//informa qual broker e porta deve ser conectado
    client.setCallback(callback); //atribui função de callback (função chamada quando qualquer informação de um dos tópicos subescritos chega)

    while (!client.connected()) {
    #ifdef DEBUG
    Serial.println(“Conectando ao Broker MQTT…”);
    #endif

    if (client.connect(“ESP8266Client”, mqttUser, mqttPassword )) {
    #ifdef DEBUG
    Serial.println(“Conectado”);
    #endif

    } else {
    #ifdef DEBUG
    Serial.print(“falha estado “);
    Serial.print(client.state());
    #endif
    delay(2000);

    }
    }

    //subscreve no tópico

    client.subscribe(mqttTopicSub);

    }

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

    // Função: função de callback
    // esta função é chamada toda vez que uma informação de
    // um dos tópicos subescritos chega)

    //armazena msg recebida em uma string

    payload[length] = ‘\0’;
    String strMSG = String((char*)payload);

    #ifdef DEBUG
    Serial.print(“Tópico: “);
    Serial.println(topic);
    Serial.print(“Mensagem:”);
    Serial.print(strMSG);
    Serial.println();
    Serial.println(“xxxxxxxxxxxxxxxx”);
    #endif

    if (strMSG == “1”){ //se msg “1”
    digitalWrite(P1, HIGH); //coloca saída em LOW para ligar a Lampada – > o módulo RELE usado tem acionamento invertido. Se necessário ajuste para o seu modulo
    }else if (strMSG == “0”){ //se msg “0”
    digitalWrite(P1, LOW); //coloca saída em HIGH para desligar a Lampada – > o módulo RELE usado tem acionamento invertido. Se necessário ajuste para o seu modulo
    }

    }

    //função pra reconectar ao servidor MQTT

    void reconect() {

    //Enquanto estiver desconectado

    while (!client.connected()) {
    #ifdef DEBUG
    Serial.print(“Tentando conectar ao servidor MQTT”);
    #endif

    bool conectado = strlen(mqttUser) > 0 ?
    client.connect(“ESP8266Client”, mqttUser, mqttPassword) :
    client.connect(“ESP8266Client”);

    if(conectado) {
    #ifdef DEBUG
    Serial.println(“Conectado!”);
    #endif

    //subscreve no tópico

    client.subscribe(mqttTopicSub, 1); //nivel de qualidade: QoS 1
    } else {
    #ifdef DEBUG
    Serial.println(“Falha durante a conexão.Code: “);
    Serial.println( String(client.state()).c_str());
    Serial.println(“Tentando novamente em 10 s”);
    #endif

    //Aguarda 10 segundos

    delay(10000);
    }
    }
    }

    void loop() {
    if (!client.connected()) {
    reconect();
    }
    client.loop();

    0
    #90282

    André Rocha
    Moderador

    Olá!

    Sugiro dar uma olhada neste post:

    Controle e Monitoramento IoT com NodeMCU e MQTT

    Ele vai te ajudar

    0
    #90290

    kara.mario
    Participante

    Continuo sem entender como fazer para receber informações de mais de um topico. Por exemplo, caso fosse recebida uma mensagem de um tópico “X” com o comando ligar, o NodeMCU deveria iniciar uma determinada rotina, porem caso fosse recebido a mensagem ligar do tópico “Y”,  ele deveria executar outra rotina. Não tenho ideia de como faze-lo

    0
Visualizando 3 posts - 1 até 3 (de 3 do total)

Você deve fazer login para responder a este tópico.