Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Pedro Henrique Capriglione

Conectando o NodeMCU usando protocolo MQTT

Recommended Posts

Olá pessoal,
estou desenvolvendo um TCC na área de automação. Sou estudante de Engenharia elétrica e estou com um problema de conexão do NodeMCU usando protocolo MQTT (cloudMQTT é o broken) controlado pelo MQTTDash (que é um App para Android).

Não estou conseguindo fazer o acionamento de dois ou mais Leds pelo ESP8266 NodeMCU. Estou anexando até onde foi desenvolvido o código para que, quem puder me dar uma força, eu agradeço muito!! :D Ah, estou usando a IDE Arduino para desenvolver o código. A base do código foi retirado da página "Infotrônica para Zumbis".

O código está em um arquivo de texto (.txt) anexado. Quem puder baixar e dar uma analisada mais aprofundada e me indicar onde estou errando, agradeço muito.

Att.
Pedro Henrique Capriglione
Um mero estudante sofrendo um pouco com programação.

NodeMCU usando protocolo MQTT (cloudMQTT é o broken) controlado pelo MQTTDash.txt

Compartilhar este post


Link para o post
Compartilhar em outros sites
Bommu Perneta    334

Só por curiosidade até onde teu código vai? No código tem vários textos a serem imprimidos se cada fase for atendida

tipo esse aqui em baixo deveria ter algum aviso disso (só aparece* uma vez duas 3 ou todo tempo as mensagens?):

imprimirSerial(true, "Conectado!! :)");

Também quero ver a fonte de onde você tirou isso, quero link !?

 

Estou estranhando de você chamar o controlador de leds fora do void principal que será executado só uma vez, mas pode ser que tenha um loop fora do loop principal que não to vendo.

 

O "void loop" só tem você dizendo para reconectar caso não esteja ligado e iniciar o cliente... este último que pelo número grande de bibliotecas que você chamou no início do código, deve ser alguma função escondia dentro dessas bibliotecas...

Só isso, você não está verificando acredito eu o tempo todo, só uma vez... mas só acho ^^

 

Complicado para mim ver esse código, pois pode ter funções sendo chamadas pelas bibliotecas. O ideal era você fazer o código em partes... indo do mais fácil para o difícil o que seria: ligar o esp a tua rede e ligar um led e desligar. Depois fazer algo mais complexo de ligar um led a partir de texto e finalmente ir para essa teu código gigante....

 

 

Mas to chutando aqui... Enfim,,,,,,

Editado por Bommu Perneta

Compartilhar este post


Link para o post
Compartilhar em outros sites
Pedro Henrique Capriglione    0
  • Autor do tópico
  • Bommu Perneta,

    No programa original (ele é designado para ligar apenas um único Led, ou seja, uma única saída) eu gostaria que fosse ligado mais leds na saída do NodeMCU, mas eu não consigo alterar essa programação da forma correta.

    Toda ajuda que puder ser dada eu vou agradecer imensamente!!

    Este é o link do programa original:
    https://bitbucket.org/MarcoRabelo/esp8266/src/8b530e758b97d3b53febe67233a0bf60d0ec6a53/06-MQTT_WiFiManager_Rele/MQTT_WiFiManager_Rele/MQTT_WiFiManager_Rele.ino?at=master&fileviewer=file-view-default

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Bommu Perneta    334

    Eu ainda não programei em para memórias eeprom... mas analisando ao código original e o teu... você está chamando as variáveis (pegando o valor) do mesmo endereço da memória

     

    statusAntD5 = EEPROM.read(0);

    e

    statusAntD0 = EEPROM.read(0);

     

    É o mesmo endereço... Ou seja você está trabalhando com portas separadas com uma só variável, ou as duas acendem os as duas apagam. Se for isso que você quer mesmo e não o contrário podemos prosseguir analisando o código... Mesmo eu não tendo o teu módulo ^^

     

    http://labdegaragem.com/profiles/blogs/tutorial-usando-a-eeprom-do-arduino-para-armazenar-dados-de-forma

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Pedro Henrique Capriglione    0
  • Autor do tópico
  • É exatamente isso que está acontecendo, ele ascende e apaga os dois leds juntos. Eu quero que seja separado os acionamentos. Como devo proceder para fazer essa alteração? O que devo alterar no programa para que ele funcione corretamente e de forma separada?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Bommu Perneta    334

    Escreve na memória em lugares diferentes.

    EEPROM.write(address, value);

     

    Address vai no arduino 0 e 1023 no Uno... Só colocar em outro endereço... e depois ler o mesmo

    EEPROM.read(adress)

     

    Como no link do tutorial que coloquei ai em cima. Se você colocar em endereços diferentes e ler de diferentes endereços as variáveis ficam independentes e você pode controlar teus ledes de forma independentes.

    Editado por Bommu Perneta

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Pedro Henrique Capriglione    0
  • Autor do tópico
  • Mesmo após essas alterações que você citou, ele continua ligando e desligando os dois leds simultaneamente. Acredito que tenha mais algo em conflito.

    Estou anexando a alteração que você citou que eu fiz no programa. Se possível, verifique se eu fiz corretamente as devidas alterações ou se precisa alterar mais algo para que ele funcione corretamente e independentemente cada led.

    Suas dicas estão sendo valiosas. Muito obrigado desde já!

    NodeMCU usando protocolo MQTT (cloudMQTT é o broken) controlado pelo MQTTDash.txt

    adicionado 7 minutos depois

    Eu tenho este código que funciona perfeitamente para a implementação que eu quero, porém, eu achei a programação que estamos tentando ajustar mais completa (apesar de ser mais difícil a compreensão) para toda a implementação que preciso.

    de repente, uma solução seria unir os dois em um único programa caso não se resolva este (o programa que já vinhamos tentando resolver o problema) ou, até mesmo, usar ele (Tutorial_CloudMQTT.txt) como base para resolver os problemas que tem o outro programa
     

    Tutorial_CloudMQTT.txt

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Bommu Perneta    334

    Ta... uma pergunta, quando ocorre ao mesmo tempo a troca dos valores do led quando você digita o comando de ligar e desligar apenas um deles qual a mensagem que aparece? Aparece as mensagens iguais dessa parte aqui do teu código? Tipo você manda desligar o D5 e aparece "Colocando o D5 e, stado Baixo" e também aparece "colocando D0 em stado Baixo"  ? Ou não aparece mensagem, só uma das duas?

      
      if(strMensagem == "ligaD5"){
        imprimirSerial(true, "Colocando o D5 em stado ALTO...");
        digitalWrite(D5, HIGH);
        gravarStatusD5(HIGH);
      }else if(strMensagem == "desligaD5"){
        imprimirSerial(true, "Colocando o D5 em stado BAIXO...");
        digitalWrite(D5, LOW);
        gravarStatusD5(LOW);
      }else{
        imprimirSerial(true, "Trocando o estado do D5...");
        digitalWrite(D5, !digitalRead(D5));
        gravarStatusD5(digitalRead(D5));
      }
      if(strMensagem == "ligaD0"){
        imprimirSerial(true, "Colocando o D0 em stado ALTO...");
        digitalWrite(D0, HIGH);
        gravarStatusD0(HIGH);
      }else if(strMensagem == "desligaD0"){
        imprimirSerial(true, "Colocando o D0 em stado BAIXO...");
        digitalWrite(D0, LOW);
        gravarStatusD0(LOW);
      }else{
        imprimirSerial(true, "Trocando o estado do D0...");
        digitalWrite(D0, !digitalRead(D0));
        gravarStatusD0(digitalRead(D0));
      }

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Pedro Henrique Capriglione    0
  • Autor do tópico
  • Assim que eu ligo aparece isso no Monitor Serial da IDE do Arduíno antes de eu digitar comando algum:
    Ver anexo: "Primeira Imagem".

    Quando eu ligo o D5, aparece esse código na tela:
    Ver anexo: "Segunda Imagem".

    Quando eu ativo o D5, ele está trocando o estado do D0 simultaneamente (foi isso que eu entendi segundo o que apareceu na tela quando eu ligo o D5).

    O que você sugere que seja feito? Alguma dica ou sugestão?

    Código que aparece antes de iniciar qualquer comando.png

    Código que aparece quando eu ligo o D5.png

    Editado por Pedro Henrique Capriglione

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Bommu Perneta    334

    Não entendi uma coisa: Na primeira imagem você fala que não digitou nada, nem para ligar e nem para desligar, mas to vendo "trocando estado do D5..." e "trocando estado do D0...". você digitou algo ou o programa automaticamente fica repetindo isso ? É infinito ou tem alguma hora que para?

     

    Qual sua intenção deixar o led ligado quando você mandar e desligado também ou ficar ficar piscando e por um tempo que você mandar ele ficar ligado ou desligado? 

     

    Vou dormir agora, amanha dou uma olhada melhor e vejo sua reposta. Alguém também pode ajudar aqui durante o processo ^^

     

    Várias perguntas, mas quero tentar reduzir as variáveis aqui e reduzir o problema ^^ complicado resolver problema de código assim huhuahauu

     

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Bommu Perneta    334

    Ainda não respondeu... ok... Depois de rever aqui ... você está enviando o comando mas outra parte do programa esta respondendo além do

    if(strMensagem == "ligaD5"){
        imprimirSerial(true, "Colocando o D5 em stado ALTO...");
        digitalWrite(D5, HIGH);
        gravarStatusD5(HIGH);
      }else if(strMensagem == "desligaD5"){
        imprimirSerial(true, "Colocando o D5 em stado BAIXO...");
        digitalWrite(D5, LOW);
        gravarStatusD5(LOW);
      }else{
        imprimirSerial(true, "Trocando o estado do D5...");
        digitalWrite(D5, !digitalRead(D5));
        gravarStatusD5(digitalRead(D5));
      }
      if(strMensagem == "ligaD0"){
        imprimirSerial(true, "Colocando o D0 em stado ALTO...");
        digitalWrite(D0, HIGH);
        gravarStatusD0(HIGH);
      }else if(strMensagem == "desligaD0"){
        imprimirSerial(true, "Colocando o D0 em stado BAIXO...");
        digitalWrite(D0, LOW);
        gravarStatusD0(LOW);
      }else{
        imprimirSerial(true, "Trocando o estado do D0...");
        digitalWrite(D0, !digitalRead(D0));
        gravarStatusD0(digitalRead(D0));
      }

    Pois se seu comando estivesse funcionando teria a mensagem "Colocando o D5 em estado ALTO" no serial o que não aparece na imagens que você postou... Ou seja, outra parte do programa está mexendo com o ligar e desligar dos leds.

     

    Por isso queria saber se isso ai é um loop infinito de pisca pisca ou uma hora para... ou ele vai até certo ponto e para e depois que você manda o led ligar ele gera uma nova linha no serial monitor.

     

    O código é grande... to doente e não quero fazer mágica huahuahuauha Normalmente eu mandaria você mesmo rever o teu código mas como você é de elétrica to dando ajuda a mais huhauhauha

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    Pedro Henrique Capriglione    0
  • Autor do tópico
  • Desculpa não ter respondido anteriormente, estou mexendo no programa inteiro e estou conseguindo alguns bons resultados. Assim que eu finalizar o programa, posto ele aqui e, caso apareça alguma dúvida durante a minha análise, vou postando pra ver se conseguimos fazer algumas modificações a mais.

    O programa tinha muitas falhas (pelo que eu estava analisando) e vários conflitos. Acho melhor (assim como você disse Bommu Perneta) analisar todo o programa e depois vir com questionamentos para possíveis soluções (caso apresente mais falhas ou conflitos).

    Agradeço até o momento,
    vou ver se finalizo isso dentro de, no máximo, uns 2 à 3 dias.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×