Olá Galera , blz ? Então gostaria de uma ajuda de vocês . Recentemente montei um projeto no nodemcu esp8266 que controla tv e 3 reles, ele funciona td . Mais se eu deixar ele muito tempo ligado menos de 6 horas ligado direto ele não responde .Mais os comandos, a pagina html não funciona , parece q perde a conexão . A primeira instancia , medi os pinos ta chegando 5v normal, ai retiro a da fonte que alimenta ele e ligo de novo na tomada ele volta . Fika mais ou menos no maximo 6 horas e a pagina html nao vai  Creio Eu que seja o Código mais ainda não consegui desvendar esse mistério 

Esse è meu Código Obrigado

https://pastebin.com/R0QCY9XG

Exibições: 643

Responder esta

Respostas a este tópico

Bom dia LC, 

verifica se o ESP ou o regulador do nodemcu está aquecendo muito.

RV

Bom Dia RV , Notei que ele esta um poquinho quente mesmo 

Ele quem, o nodemcu ou o regulador?

Experimenta colocar um pequeno dissipador sobre ele.

Pode ser um pequeno pedaço de alumínio colado nele com fita dupla face.

RV

No próprio Esp , percebi que tava um pouco quente 

boa tarde Lucas.

procure colocar um "Alive" no seu sistema, para ter uma ideia em que estado se encontra a CPU. Esta é uma boa prática de projetos, e ajuda muito em incontáveis situações. É importante fazer isso de uma forma que não trave seu processamento original, e uma das maneiras é chamando uma rotina dentro do seu código. Inicialmente você pode chamar a rotina no início do seu loop principal, e conforme você vai fazendo diagnóstico, pode mudar o ponto em que ela é chamada (caso suspeite de um ponto ou outro como sendo o "vilão").

Uma forma simples de fazer isso é usando o "millis" e um LED conectado a um pino do ESP que esteja sobrando no seu módulo. Veja um exemplo:

acrescente o código para ter uma função "Alive":

dado o código acima, a função "Alive_1();" deve ser chamada dentro do seu loop principal, e como eu disse, pode inicialmente chamá-la no início no mesmo. Uma vez executado o código, o LED piscará a intervalos definidos (ver "#define time_1" , especificado em mili-segundos). Isto permitirá você saber de forma simples que o sua CPU está executando o loop. Quando o seu sistema não estiver mais respondendo (conforme vc relatou), a primeira coisa a verificar é o LED Alive, e se estiver piscando indicará que sua CPU está executando o loop principal e seu código na verdade não travou completamente. Em seguida, é a técnica de ir alterando o ponto onde o Alive é chamado, e assim ir depurando o que se passa com seu programa. É uma técnica usada em sistemas embarcados, e dá algum trabalho, mas possibilita vc ter alguma visão do que se passa no Sistema, sem precisar ter acesso a terminais ou recursos mais sofisticados de depuração.

Caso precise de alguma dica a mais, fique à vontade.

Abrçs

ah, caso resolva usar esta técnica de depuração, segue o código para facilitar incluir no seu original.

Anexos

O Meu Amigo Elcids Chagas
Muito obrigado por responder meu tópico

vou tentar implementar no meu código e fazer um teste ,deixar esse tempo para ver e te aviso o resulta obrigado mesmo por querer me ajudar 

abração amigo

Bom dia Elcids 
entao eu fiz o teste 

no caso coloquei o  Alive_1(); antes de começar o codigo no loop (no Inicio)

o led ficou piscando , e depois das 6 horas , ele ainda continuo piscando , e o codigo travou

mudei o  Alive_1(); de lugar , mais ai ele nao pisca , quando dou um comando as vezes acende e quando o dou outro comando apaga 

mais nao fica piscando oque pode ser ?

abraço

olá Lucas boa noite.

Infelizmente não tive tempo para analisar seu código. A sugestão do "Alive" é uma técnica que vc deve procurar sempre usar, pois te dá uma orientação do que está acontecendo com seu Sistema, quando não há outros recursos de depuração disponíveis.

Lembre-se: a rotina "Alive" da forma como é implementada, não tem como travar a cadência do seu código original (por isso mesmo ela utiliza o "millis"). Baseado nisso, podemos chegar às seguintes conclusões:

1) se após as tais 6 horas seu código não mais respondia, porém o "Alive" ainda estava ali (LED continuou piscando), isso significa que seu código não travou de fato. Em outras palavas: a CPU do ESP8266 continuou a executar o seu código. Essa é uma ótima notícia, pois aparentemente, não está acontecendo nada incomum com seu Hardware que pudesse fazer a CPU travar. Então agora é depurar com mais cuidado e encontrar o responsável pelo problema.

2) Sobre mudar o "Alive" de posição, não se esqueça de comentar a linha onde ele estava antes (ou deletar mesmo), pois do contrário funcionará de forma esquisita, e poderá acender ou apagar o LED aparentemente de forma aleatória (embora de fato não seja). Cuidado em relação ao local onde você insere o Alive, pois o funcionamento dele, pressupõe que o código está sempre "passando" por aquele ponto. Se você colocar dentro de um comando que é executado esporadicamente, ele não funcionará como esperado, já que não estará sendo sempre executado. Tenha em mente que a execução contínua do Alive, é justamente para você constatar que seu código não travou de vez, isso após seu Sistema não mais responder (e vc ser obrigado a fazer um reset na CPU através de desligar e religar a alimentação).

    Pelo que você e outros colegas declararam aqui nos posts, e o fato de vc ter constatado que o "Alive" continuou quando seu código já não mais respondia, me parece  que vc tem algum problema com a rede mesmo, mas não tenho como afirmar isso de forma conclusiva.

Uma possibilidade é o tempo de "leasing" ("lease time" ou "leasing time") no seu Roteador, estar expirando. Praticamente todos os roteadores permitem vc especificar este tempo de "leasing", e quando vc não especifica ele fica setado em um valor default (pode variar muito de modelo pra modelo). Quando este tempo expira, o IP designado pelo roteador ao AP ("Access" Point - neste caso o ESP8266), não é mais válido, e o AP (o ESP8266) deve fazer a requisição de um novo IP para continuar conectado. Isto tem que ser feito por código. Não sou especialista no código padrão (ou nativo) embarcado no ESP8266, então não tenho como te afirmar se este código requisita automaticamente um novo IP após expirar o tempo de "leasing" no roteador. Caso ele não faça isto, vai ficar desconectado da rede e não responde mais (embora a CPU do ESP8266 continue a executar seu programa, o que vc constatou através do "Alive"). E então se isso ocorre (ou seja, um novo IP não é requisitado automaticamente), ele somente vai responder após vc resetar o sistema (neste caso vc está fazendo isso por desligando e religando a fonte de alimentação), pois isto reinicia seu código, fazendo o AP (ESP8266) requisitar um novo IP. Quando o "leasing" expirar de novo, vai novamente ficar sem responder. Então o que vc precisaria fazer, é abrir a página de configuração de seu roteador (basta consultar o manual do mesmo, pois sempre tem isso lá), e ver se o "leasing" está configurado para próximo de 6 horas. Se estiver, então vc terá encontrado a "origem" do problema,  e uma alternativa é alterar esse tempo para o maior valor permitido no roteador (muitas vezes chega a 1 mês, e alguns casos além disso). Outra forma é reservar sempre o mesmo IP para o AP do ESP8266 (via endereço MAC, que é fixo para cada ESP8266), pois neste caso não ocorrerá a expiração do IP.

   Verifique esta questão do "leasing". Como eu disse, não sou especialista em código nativo do ESP8266, mas parece que pode estar ocorrendo a expiração do IP após passado justamente o tempo de "leasing". Isto explicaria porque no teste do Mauro Silva, o seu código rodou tranquilo e não "travou", já que o leasing time no roteador dele pode estar muito diferente do default usado no seu roteador.

Caso eu possa ajudar em algo mais, fique à vontade.

abrçs.

Testei seu code aqui dia todo não caiu a rede nem uma vez.

acho que seu nodemcu pode esta com problema .

aqui ficou ligado e não caiu não 

Ola Mauro obrigado , voce testo e deixou quanto tempo mais ou menos ? , eu tbm estou pensando que pode ser ele , quero fazer todos os teste antes de ter q comprar outro 

em media 15 horas 

funcionando perfeitamente 

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço