Será que alguem consegue me ajudar?

Meu Esp01 trava quando faço reset, com um rele ligado no pino GPIO2. Eu ja li aqui no blog que isso é porque o Eps01 nao tem resistor de pull-down nas portas. Oque se faz para contornar isso?

Exibições: 5952

Responder esta

Respostas a este tópico

oi Carlos boa noite.

     Realmente precisamos nos identificar com quase tudo que ocorre aqui, pois certamente tentar colaborar nem sempre é fácil, e diria que é até um exercício, e como vc disse um desafio a cada tópico. Mas há também satisfação, já que isso tudo está na nossa alma.

    Tenho muito pouco tempo para contribuir, e estou a pouco mais de 1 mês no Garagem. Mas tento fazer o melhor possível, inclusive com uma pitada pessoal, e forçando para o lado mais técnico (mas procurando sempre um equilíbrio, já que aqui aparecem todos os tipos de profissionais e também hobbistas, e acredito que sendo todos muito bem vindos).

    Aproveito para pedir ao pessoal que coloca as dúvidas, questões, que procurem ser o mais claro possível para que possamos ter certeza da exata questão. Uma sugestão para isso:  pessoal larguem o celular por alguns instantes e leiam o que vocês escreveram. Mas leiam como se fosse uma outra pessoa lendo, ou seja, procurem verificar se quem vai ler seu post, vai entender o que estão querendo dizer de fato. Afinal, dentro da cabeça de quem escreve sempre está muito claro a questão, mas e para quem vai ler, será a mesma coisa?  Então, depois disso, peguem novamente e desesperadamente seus celulares.

    Espero em algum momento também conhecer o pessoal do Garagem, que fazem um excelente e louvável trabalho.

    (Obs.: não tenho whatsapp, facebook, etc.. etc... etc...)

    Abrçs

    Elcids

Oi Elcides,

:) Muito acertada sua colocação Elcids, confesso que tenho whatsapp e facebook mas trato de que sejam ferramentas para me auxiliar no quesito comunicação, tanto profissional como pessoal,o fato de ter filhos em outros estados e outros países facilitam as coisas,  e na área profissional como ainda exerço funções na minha empresa é necessário, mas trato de usar com a devida consciência e limitação dentro do possível.

Abs.

CK

ô Carlos, certamente.

     Não tenho nada contra Whats (etc.. etc..).  Muito pelo contrário: acho uma ferramenta sensacional, e afiada para os tempos que vivemos hoje, inclusive diria que indispensável.

     Mas pra mim ainda não foi o caso. Sou meio avesso à alienação generalizada que ocorre hoje em dia. E vou criar uma polêmica: ao contrário dos cigarros e da indústria tabagista os quais arruinaram muitas vidas e famílias nas décadas de 60, 70, e 80,  nestes "tempos modernos", a coisa está bem diferente em relação a procurar "culpados". A INFORMAÇÂO hoje está aí, ao alcance de praticamente todos (nem de todos, infelizmente em nosso País e outros pelo Mundo). Então onde está o agente alienador que está corroendo as mentes das pessoas hoje em dia?  Vamos nos lembrar, que a industria também é importante, pois emprega e gera divisas. Assim acho que as pessoas precisariam parar um pouco e olhar pra si mesmas (mas claro que não através de selfies!!!), e procurar nelas mesmas a resposta. Certamente elas encontrarão uma resposta, seja qual for, para o bem ou para o mal.

     E um artigo interessante de se ler:  "Smart Phones Are Making Us Dumb"

   

   Ah, não poderia deixar de lembrar: os comerciais da Hollywood dos anos 80 eram incríveis não é mesmo?  eram sensacionais. Nada hoje se compara a eles...   As músicas destes comercias então,  dá peninha das de hoje em dia...

    Abrçs,

    Elcids

Sobre a sugestão so Elcids muito bem esclarecida, eu no post anteriror escrevo:

Muitas vezes, e não entrara a discutir isso agora, quando acionamos um transistor destes módulos com 3.3V do GPIO do ESP na base, ocorre o fato de ele continuar por exemplo ligado, não desarmar mesmo quando o GPIO esta em nível LOW (tratando-se de um NPN, se for PNP a logica apenas inverte) isso ocorre porque mesmo com LOW, haverá entre o a base e emissor do transistor uma diferença de potencial igual ou maior que 0,7V ocasionando que o transistor sempre esteja saturado e nunca no corte.

Neste caso, eu utilizo um Led  e uma R de 330 ohms em serie como s saida GPIO, tal como o Elcids proporem praticamente faz el o faz com um diodo ( O led não deixa de ser um também) porque as vezes é mais fácil termos a mão um LED. Por favor não é minha intenção divergir, apenas incluir minha experiencia sobre o mesmo assunto, pois esta sempre foi e será minha intenção, compartilhar conhecimento.

Abs.

CK

Otimo Kweik, eu me referi sobre o Led em um comentario meu, de uma outra discissão que vi, e naquela oportunidade a pessoa que falou sobre o Led para resolver isso, nao citava mais detalhes, entao simplesmente colocar um led na passagem o sinal logico nao iria funcionar nunca. Mas vou adquirir componentes que tu indicou e postar aqui o resultado. Muito Obrigado!

vou te dar uma grande dica:

    Nos diga qual o nível lógico vc tem que colocar na sua saída GPIO2, para que o relé seja acionado?  é HIGH ("1") ou LOW ("0").  Se vc não souber, olhe seu código, na linha em que vc aciona o relé.

    Isso será de grande ajuda.

    Abrçs

Este é o esquema que esta monado meu circuito. Uma coisa que testei agora de tarde. Se coloco na GPIO0 ou GPIO2 ou TX, quando reinicio o esp01, trava, e o rele fica ativado. Quando coloco o rele no RX, funciona bem, nao trava, entao é algo que tem no pino RX e nao tem nos outros. Tambem testei sem a placa adaptadora, pois ela permite que entre os 5V no esp. Testei com os jumpers direto no esp alimentando com 3,3V e aconteceu a mesma coisa, travou.

Anexos

ok Luiz.

    Irei analisar seu design, Hardware e código. Mas já posso adiantar, com uma olhada bem rápida, que parece haver algum problema sim no seu Hardware, essencialmente alguns equívocos técnicos, coisa normal já que parece que sua formação não é eletrônica (no seu perfil diz que vc é Agrônomo).

   Te escrevi no Chat aqui do Garagem.  Aguardo seu contato por lá.

    Abrçs

    Elcids

Luiz, boa noite.

    Ainda não analisei seu código, apenas o Hardware.

    Não sei se vc está montando o circuito físico exatamente como está no esquema que vc postou aqui. Se estiver atente para a figura a seguir, que preparei a partir de um print do seu esquemático:

    Note que vc está alimentando o módulo do Relé com 3,3V, assim como o Adaptador para o ESP01.

     Ocorre que o fabricante do seu relé só garante acionamento "pleno", se a tensão na bobina for pelo menos 3,5V (a tensão nominal de acionamento é 5V na bobina). Então mesmo que eventualmente o relé acione com 3,3V, não é o ideal, pois poderá falhar (principalmente se o relé sofrer pequenas pancadas mecânicas quando estiver em uso, acionado).

    O outro ponto, é que o Regulador LDO que está na placa Adaptadora do ESP01 (segundo o esquemático da Robocore, é um "AP2112"), só irá regular a tensão de saída de forma confiável, se a tensão de entrada estiver pelo menos 0,2V acima da própria saída. Ou seja, se vc quer regular 3,3V, então deve entrar com pelo menos 3,5V. No seu esquema, vc está entrando com os 3,3V, o que significa instabilidades na tensão de saída (mesmo que vc meça isso com multímetro, não vai perceber as instabilidades, pois elas são de alta-frequência). Há um agravante aqui:  é o ESP01 quem está sendo alimentado pelo LDO, ou seja, há um bom consumo de energia, o que exige uma tensão de Dropout (a diferença entre entrada e saída no LDO) maior ainda que 0,2V (como 0,25V a 0,3V pelo menos). Não espere nestas condições de alimentação que vc colocou, que o ESP01 funcione sempre corretamente, devido justamente às instabilidades no regulador LDO.

    Assim, para esta questão da alimentação, basta mudar o "setting" da sua fonte para 5V. Com isso, o LDO funcionará estável, e o relé será confiavelmente acionado.

    Quanto ao problema com o GPIO2, verifiquei pelo esquemático da placa adaptadora da Robocore, que esta placa não influencia neste sinal. O sinal GPIO2 está vindo direto e somente da sua placa ESP01. Então neste caso, o problema pode ser com seu código. Mas veja: sem alimentar seu Sistema corretamente, o programa pode ter comportamentos anormais. Garanta a alimentação correta, principalmente porque problemas na alimentação podem resultar em BOOT incorreto do ESP8266.

    Assim que possível, irei analisar seu código, mas se algum colega aqui do Garagem tiver algum tempo, peço que ajude na análise, pois só poderei fazer isso amanhã depois das 18 hrs.

    Abrçs,

    Elcids

Eu acredito que uma boa maneira de teste seria você fazer um tira teima,  usar um circuito tipico com seu ESP8266-01 e o modulo rele, e desta forma fazer um simples liga desliga rele sem o adaptador. ( Se precisar de um código avise, mas até um simples blink serviria) 

PD: Procure sempre usar módulos rele que acionam com opto acopladores, não com transistores.

Anexo esquema aqui (Abaixo)

Abs.

CK

Muito Obrigado! Vou por em pratica, e coloco aqui o resultado.

Luiz, bom dia.

     Agora a pouco, analisei seu código.

     Eu não analisei toda aquela parte da conexão WiFi (o "cliente"), pois ficou claro pra mim que não tinha nenhuma relação com o seu problema com o GPIO2 e o acionamento do Relé

     Mas do ponto de vista dos sinais de controle do ESP01 (os GPIOs) não encontrei nenhum problema no seu código.

     Então voltei a análise para o Hardware, desta vez de forma mais calma (pois ontem foi tudo muito atribulado). Então ficou claro pra mim onde estava seu problema. O problema ocorre por causa de um divisor resistivo, formado pelo "pullup" interno do ESP01 (o valor deste pullup é algo entre 20k e 40k), e o resistor de base do transistor que existe no seu módulo do Relé. Eu não sei qual o valor do resistor de base, mas por uma pesquisa rápida, parece algo como 1k. Isto causa uma tensão baixa no GPIO2 no momento do BOOT do ESP01, o que faz com ele vá para o modo de programação (também chamado de "Modo UART"), e assim não execute o seu código já gravado anteriormente na FLASH do ESP01.

     O resistor de base é o que eu mostro na figura a seguir:

     Se possível confira o valor deste resistor (com um multímetro, caso não seja possível ler no corpo do resistor), pois não tive como saber apenas pela foto (e no site da Robocore não há informação alguma). Veja que na plaquina tem dois resistores, e o de base é o que eu marquei em "rosa". Observe que mesmo que o resistor seja mais alto que 1k, por exemplo 10k, ainda sim é quase certo que ocorrerá o problema, pois quando se calcula o divisor de tensão com estes valores (já considerando a tensão base-emissor do transistor da plaquinha do Relé), a tensão resultante ainda não atingirá o nível "1" do ESP01 (pois o resistor de "pullup" interno do ESP pode chegar a mais de 30k).

     Para driblar esse problema, use o circuito que desenhei na figura a seguir:

     Não tenho prática alguma com o "Fritzing", então tentei desenhar o circuito acima da melhor forma possível, como mostro a seguir:

    Observe que o que fiz, foi bloquear o divisor de tensão com um Diodo, durante o BOOT do ESP. Os outros dois resistores são apenas para adequação dos níveis de tensão a fim de garantir o ON/OFF do Relé.

    Observe que é muito importante que o Diodo seja do tipo "Schottky". Um Diodo desse tipo relativamente fácil de encontrar é o BAT85.

    Caso não encontre o BAT85, qualquer outro diodo "Schottky" pode ser usado. Outra opção, é usar um diodo de Germânio (como os famosos 1N60 ou 1N34). Sempre observe o lado certo de ligar o Diodo (seja qual for este diodo).

    Apenas em último caso (se não conseguir encontrar um "Schottky" ou um de Germânio) use um diodo de sinal de silício (por exemplo o famigerado 1N4148). Mas só em último caso.

    Veja também que o mesmo problema ocorre se vc usar o GPIO0 pra acionar o Relé, pois assim como o GPIO2, este também tem um resistor de "pullup" interno.

    Também note que como vc está usando a plaquinha adaptadora para o ESP01, a melhor opção pra vc é alimentar o Sistema com 5V, conforme expliquei em um post anterior.

    Sobre seu código, tomei a liberdade de organizar ele (não que estivesse muito desorganizado). Inclusive inseri alguns comentários. Um ponto muito importante é que substitui os nomes dos pinos de controle, pela função que de fato realizam (exemplo: "pino_Rele"), e acrescentei "#defines" para a numeração dos pinos do ESP01, facilitando muito, pois para trocar a função dos pinos você não precisa mudar no código inteiro, mas apenas nas linhas de definição que mostro abaixo:

      Espero que isso facilite seu manuseio do código. Esta deve ser uma prática comum em programação.

      Nota final muito importante:  tenho praticamente certeza que há um erro na sentença lógica que avalia a hora e verifica se deve ligar ou desligar o Relé, quando o "Ativa" é maior que o "Desativa".

      Em minha análise a sentença deveria ser muito mais simples que a que está no seu código. Veja como acho que seria:

      Mas não mexi nisso no seu código, deixei exatamente como estava. Mas acho que vc deveria dar uma olhada na lógica da sentença que vc está usando.

      Anexei os arquivos "ino" e do "Fritzing" a este post (veja logo abaixo).

      Espero ter contribuído de alguma forma ou outra.

     Abrçs,

     Elcids

Anexos

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço