Este tópico contém respostas, possui 3 vozes e foi atualizado pela última vez por  glaucobenedetti 1 semana .

Visualizando 4 posts - 1 até 4 (de 4 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
    #99233

    glaucobenedetti
    Participante

    O protocolo MQTT pode enviar qualquer tipo de informação. Você poderia enviar em uma so string a porta digital e o estado que ela vai estar e fazer um filtro no callback exemplo:

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

    //obtem a string do payload recebido
    for(int i = 0; i < length; i++)
    {
    char c = (char)payload[i];
    msg += c;
    }

    //toma ação dependendo da string recebida:

    if (msg.equals(“D0LOW”))
    {
    digitalWrite(D0, LOW);
    EstadoSaida = ‘1’;
    }
    if (msg.equals(“D0HIGHT”))
    {
    digitalWrite(D0, HIGH);
    EstadoSaida = ‘0’;
    }

    if (msg.equals(“D1LOW”))
    {
    digitalWrite(D1, LOW);
    EstadoSaida = ‘1’;
    }
    if (msg.equals(“D1HIGHT”))
    {
    digitalWrite(D1, HIGH);
    EstadoSaida = ‘0’;
    }

    }

     

    Assim você controla qualquer coisa a partir de um unico tópico.

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

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

{"cart_token":"","hash":"","cart_data":""}