Bom dia pessoal, Primeiramente gostaria de parabenizar por este fórum que tanto tem me ajudado (pois sou leigo em arduino, eletrônica e programação mas de tudo bem basicamente eu vou mexendo), e como amador, pesquisando muito aqui e em outros sites, consegui montar meu projeto.

A ideia é colocar aqui um esp8266-01 para através da minha rede wifi eu pudesse abrir e fechar meu portão com mqtt.

 O problema que estou tendo são os seguintes abaixo:

 - Caso precise desligar e religar o meu roteador wifi, o esp não reconecta automaticamente;

 - Caso precise desligar a plaquinha ao religar o Esp aciona rapidamente o relê abrindo contra minha vontade o portão.

 

 Aqui fiz uma plaquinha no proteus que juntei algumas dicas pela internet, e nesta plaquinha ela é alimentada por 12v e 1a, e nela tem dois reguladores um para 5v (para alimentar o relê) e outro regulador de 3.3v (para alimentar o esp), e fiz um slot para encaixar o esp8266-01.

 Ficou legalzinho porém gostaria de caso o esp não esteja conectado na wifi ele restart para reconectar ao roteador e assim eu possa continuar controlando normalmente. E caso por algum motivo a plaquinha perca sua alimentação ao ser religada o esp não acione o relê para não abrir o portão involuntariamente.

 E pesquisando aqui no forum o amigo Tiago Alexandre

(http://labdegaragem.com/forum/topics/duvida-preciso-sempre-dar-rese...)

void reset_config(void) {
Serial.println("*O ESP ira resetar agora");
delay(1500);
ESP.reset();
}

postou uma solução usando comando que reinicia o esp e assim reconectaria ao wifi, não estou tendo a mínima ideia de como adicionar ao meu sketch que roda no esp8266-01.

e das vezes que consegui fazer rodar, percebi que o esp não conclui a reinicialização dando erro wdt algo deste tipo e não carrega o esp completamente travando aí.

 Estou postando aqui em anexo o sketch que juntei pela internet e estou usando.

 Ficaria grato pela a ajuda pra resolver estes dois problemas.

Exibições: 2628

Anexos

Responder esta

Respostas a este tópico

acho que resolvi parcialmente o problema pois consegui fazer o reset funcionar bastou atualizar o firmeware e agora está reiniciando o esp normalmente.

Agora deu pra perceber o que está causando os dois problemas.

Analisando:

 - Caso precise desligar e religar o meu roteador wifi, o esp não reconecta automaticamente;

Acho que precisaria no sketch alguma forma de verificar se a conexão com o wifi e também com o Mqtt estão ativas  no  caso de cair seja executado algumas tentativas de reconectar e caso não consiga reiniciar o esp.

 - Caso precise desligar a plaquinha ao religar o Esp aciona rapidamente o relê abrindo contra minha vontade o portão.

Neste caso descobri que o esp sempre que inicia vai no mqtt e verifica o último comando executado no tópico e aí executa. No caso se quando o último comando for pra abrir o portão aí ele abre.

Como gerir isso melhor?

Bom dia,

Anexe seu código para sugerir as modificações.

Meu canal: AQUI

Abs.

CK

Opa Carlos, já sou escrito em seu canal no youtube e é um prazer comunicar-me com você. Quero lhe agradecer pelos preciosos conhecimento que tem compartilhado.

E desde já agradeço a ajuda.

Att, Carlos.

Anexos

estou com o mesmo problema ele sempre aciona as saídas quando esp  é ligado e desligado e o mais engraçado é que é apenas o Esp-01 eu testei com os Esp-07 ele nao faz isso...

se tiver resolvido o problema e puder compartilhar a solução

Ola amigo eu tenho uma solução para este problema já testei e funciona muito bem. A respeito do Esp8266-01, o Esp12-E, Nodemcu eles tem alguns comportamentos estranhos no momento do boot. Realmente tem alguns pinos neles que oscilam, mudam de HIGH para LOW  ou o inverso por uma fração de segundos. Bom isto é um problema grande se colocar um relê nestes pinos, pois não há o que fazer durante a inicialização. no caso do Esp8266-01 isto ocorre nas duas GPIOs.

Pois bem a solução que encontrei foi gerar um atraso por hardware no momento do boot, como no esquema abaixo:O funcionamento é bem elementar quando reiniciado ou no boot, o capacitor se carrega primeiro pois a eletricidade sempre percorrerá o caminho mais fácil. Como o tempo que o GPIO oscilará será muito breve, não dará tempo de carregar completamente o capacitor sendo assim o nível lógico na base do transistor, ou optoacoplador se for o caso permanecerá estável. 

O diodo entre o capacitor e o resistor serve para descarregar o capacitor, evitando assim que no momento em que a GPIO for desligada o capacitor continuar polarizando a base do transistor e, mantendo a carga acionada causando aquele efeito de fade.

Utilizando estes mesmos valores de componentes o resultado foi ótimo, a saída é ligada e desligada na hora sem se perceber o delay.

Alterando os valores do capacitor e resistor de descarga é possível aumentar ou diminuir o tempo de resposta. Porém dos valores que eu testei a menor capacitância para que não ocorra o acionamento involuntário da GPIO foi de 100uf.

Ola amigo, o código a seguir resolve seu problema...

#include <ESP8266WiFi.h>

WiFiServer server(80);

void setup() {

Serial.begin(115200);
conecta_reconecta();
}

void loop() {

//verifica se desconectado tenta se reconectar
if (WiFi.status() != WL_CONNECTED){
Serial.print("");
Serial.println("Conexao perdida!");
conecta_reconecta();
}

//seu codigo aqui!

}

//funçao que faz a conexão e reconexão
void conecta_reconecta()
{
//Coloca como modo station
WiFi.mode(WIFI_STA);
Serial.print("Conectando");
//coloque a sua rede e senha
WiFi.begin("sua_rede_aqui", "sua_senha_aqui");
//Enquanto o ESP não se conectar à rede
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.print(".");
}
//Se chegou aqui é porque conectou à rede,
Serial.println("");
Serial.println("Conectou");
Serial.print("Status atual online : ");
Serial.println(WiFi.localIP());
//Inicializa o server que criamos na porta 80
server.begin();
}

Na verdade é o mesmo código dos exemplos da IDE, só isolei a parte que configura a conexão dentro de uma função. Assim eu chamo ela dentro do loop também. Funciona perfeitamente!

Rapaz que coisa boa, se der certo por aqui vai ser um presente de Natal.

Durante a semana vou montar o cenário novamente e fazer os testes amigo.

Sou muito grato pela sugestão. Fica com Deus e tenha um ótimo e feliz Natal a vc e família.

Boa noite, vendo o tópico, na verdade não é que ele não reconecta, quando se usa a lib <ESP8266WiFi.h> sozinha como base para qq código o ESP depois de um tempo ele trava, o ideal é usar em conjunto a LIB <ESP8266WebServer.h>  e usa-la para definir a porta de conexão, por exemplo.

ESP8266WebServer server(80);  

outro ponto é usar a função yield(), ela ajuda o processador a saber se as funções estão funcionando corretamente, isso a grosso modo de dizer. então é sempre bom por um yield() no final de cada função, no caso do ESP.

E por fim uma ultima melhoria, é substituir o delay o ESP não funciona muito bem com o uso do delay, recomendo essa função para contagem do tempo, funciona igual o delay, mas usa millis.


void hold(const unsigned int &ms) { //
// Non blocking delay
unsigned long m = millis();
while (millis() - m < ms) {
yield();
}
}

por fim uma função q eu gosto de usar para conectar o ESP seria essa aqui

void connectToWifi() {
WiFi.disconnect(); // reinicia o wifi
WiFi.mode(WIFI_STA);
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.waitForConnectResult() != WL_CONNECTED) {
hold(500);
Serial.print(".");

}
Serial.print("WiFi connected to ");
Serial.println(WiFi.localIP());
}

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2019   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço