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 !!
Tags:
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.
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.
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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por