Como deixar o pino RST do ESP-01 flutuando e poder dar um um reset(GND) programaticamente

Pessoal,

Tenho uma dúvida que talvez seja muito simples.

Eu reparei que os módulos ESP-01 que tenho testado de vez em quando precisam ser resetados, para funcionarem melhor - principalmente para se conectar ou reconectar.

Eu fiz da seguinte forma:

Coloquei um botão de reset com o pino RST do ESP-01 flutuando e quando eu aperto o botão, é feito contato com o GND. Isso faz um reset no ESP-01 e facilita a conexão com o Arduino (ou com o conversor USB se eu estiver queimando o firmware)

Eu gostaria de fazer essa operação de reset via software, com o Arduino;

Deixar o pino RST do ESP-01 conectado a algum pino do Arduino e, ao iniciar o sketch Arduino, eu envio GND momentaneamente.

Vamos supor que eu use o código abaixo:

#define RST 5  //ligo o RST do ESP-01 ao pino 5 do Arduino

setup() {

  pinMode(RST, OUTPUT);

  digitalWrite(RST,LOW);       //envio GND ao RST ??

  delay(200);                        //delay 200millis

  digitalWrite(RST,HIGH);      //envio 5V ao RST ????

}

loop() {

  ...

}

Bom, isso NÃO é o que eu quero - imagino.

O código acima, pelo que eu saiba, vai mandar LOW e após 200mls vai mandar HIGH. Ou seja, o pino RST vai ficar ativado com 5V.

O que eu quero é deixa-lo flutuando, mas não sei como faze-lo.

Alguém pode me dizer como devo fazer isso ?

Grato !!

 

Exibições: 2258

Responder esta

Respostas a este tópico

use um módulo relé pra comandar o reset do ESP-01

pra fazer do jeito que vc quer, use os pinos comum e NO (normalmente aberto) do relê, ou seja, ligue o RST ao comum e o GND vc deverá ligar o NO.

Dessa forma, vc conseguirá comandar o relê através de um pino digital do arduino. Quando tal pino do arduino ficar em HIGH, o relê fecha e permite a conexão do RST ao GND. E quando o arduino puser o pino digital em LOW, o relê abre, fazendo com que o RST flutue

deu pra entender?

Não seria mais barato, confiável e com tamanho reduzido, usar um transistor em coletor aberto?

http://labdegaragem.com/profiles/blogs/open-collector

Mas deixar o pino reset flutuando, não vai torna-lo uma antena?  Isso poderia reiniciar o módulo inesperadamente.

Olá imhugo,

Boa idéia!

Mas acho que um relay encareceria muito o projeto, a coisa é mais simples, vou procurar outra solução mais econômica.

Garto pela dica !!

ah sim, encarece mesmo... mas como meu nível de conhecimento com transistores é nível mobral, eu nem havia cogitado sobre essa possibilidade. Módulos relés eu tenho umas meia dúzia delas aqui sobrando dando bobeira, então não pensei duas vezes em dar uma utilidade pra eles. Mas se vc tiver que comprar um módulo relê só pra isso, e o custo ou espaço se tornar um empecilho pra vc, aí é melhor procurar outra solução, talvez com transistores como sugere o amigo Flávio.

Vou dizer o que eu faço aqui em casa:

primeiro eu tento o AT+RST como sugere o amigo Murta. Creio que vcs já devem ter percebido isso também, mas pelo menos aqui comigo nem sempre isso funciona. Na maioria das vezes em que há necessidade de reinicializar o ESP-01, o AT+RST não resolve o problema. Logicamente essa seria a maneira mais fácil de resetar o ESP, mas pra mim não funciona.

Programei o sketch para que, ao se constatar falta de conectividade com o servidor que recebe os dados, a primeira coisa que ele faz é dar um reset via AT+RST

Mesmo assim se a conectividade não se restabelecer, mando o sketch dar um reset no arduino com o seguinte comando:

void software_Reset() 
{
        asm volatile (" jmp 0");
}

E, mesmo assim se a conectividade não se restabelecer, eu apelo pro corte de energia do ESP (pino 3v3) através do módulo relé como relatei acima. Aí sim, essa solução quase não falha

Mas se mesmo assim continuar sem conectividade, aí preciso intervir manualmente: desligo o arduino e a alimentação do ESP-01, aguardo uns 10 segundos e então volto a religar todo o aparato. 

Pra automatizar essa última intervenção manual, eu ainda não pensei numa solução.

Oi imhugo,

E o que faz esse comando:

asm volatile (" jmp 0");

esse comando reseta o arduino via software. Como eu relatei, apesar de não ser tão eficiente, às vezes funciona, às vezes não. Ele não é um reset "limpo", não apaga alguns registradores, mas é uma opção.

veja essa discussão sobre o assunto reset. Ali vc encontrará outras várias opções pra resetar.

Oi OC, 

como prometi, segue algumas formas de ligar um botão no arduino.

Rui

Rui, no primeiro desenho creio que se o botão está aberto(solto), não daria para afirmar o estado, e sim dizer indefinido.

O quarto desenho também pode sofrer do mesmo problema da primeira, mas caso o resistor interno esteja ativado, terá o mesmo comportamento da terceira figura, só completando a ideia do Rui. 

Estou contando da esquerda para a direita.

Obrigado pela ajuda Flavio.

Oi FH, bom dia,
obrigado pela participação.
Como as entradas digitais do atmega são tris-state, no primeiro caso o port fica em alta

impedância, mas ao ler o valor desta entrada receberá um retorno de LOW,  

(desconsiderando caso de ruídos elétricos).

Fiz uma pequena correção no primeiro para diminuir a influencia de ruídos.


No quarto caso, eu escrevi no quadro abaixo "pinmode(x,INPUT_PULLUP)" , esta instrução
liga o resistor interno do atmega o que deixa o pino em HIGH qdo o botão não está apertado.

Com este simples código é possível testar as diversas configurações.

Rui

Anexos

Acho que você se enganou quanto ao sketch enviado...

Oi Rui,

Obrigado pelos desenhos.

Acho que eu sou meio burro eletrônicamente.

1. O pino "x" é definido como INPUT. Mas a idéia é simular um botão programaticamente e enviar LOW para o ESP-01. Posso enviar um digitalWrite(x, LOW) para um pino definido como INPUT ?

2. Nesses desenhos onde entra o ESP-01 ?

3. Gostaria de utilizar o quarto esquema, sem resistor. Onde coloco o RST do ESP-01 ? E quais são os comandos que devo utilizar para manter normalmente o GND com voltagem e qual comando utilizo para enviar por digamos, 200millis, GND ao RST ?

Outra dúvida - pelo que li, INPUT_PULLUP utiliuza um resistor interno. Qual o valor desse resistor, ou não importa ?

Grato

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço