Bom dia, estou a alguns meses quebrando a cabeça nesse problema,
Estou trabalhando num projetinho de Webserver para ESP8266 onde é utilizado um temporizador com NTP programável para acionar um rele, esta quase pronto, bem leve e rápido, mas me falta a parte de armazenar as variáveis de tempo e o status da GPIO, fiquei empacado nessa parte.
O código que estou disponibilizando esta disponível nesse link
https://github.com/jhon2c/WifiRTC/blob/master/C%C3%B3digo/firmware/...
As variáveis que preciso armazenar em caso de falta de energia ou reinicio da placa por enquanto são:
21 int horaLiga;
22 int minutoLiga;
23 int horaDesl;
24 int minutoDesl;
33 boolean stateRelay;
Qual a melhor forma de armazenar estas variáveis, seria EEPROM ou SPIFFS?
Abaixo como esta ficando a pagina do WebServer
desde de já agradeço
Tags:
Cintra, bom dia, fiz as alterações, agora que entendi alguns itens da postagem do Pedro Minatel com essa sua explicação rs, apesar de lá estar bem detalhado.
Essa parte que você não entendeu eu também não tinha entendido, mas acredito que seja para definir o tamanho da EEPROM, mas pelo que entendi o comando EEPROM.begin(5); substitui essa lógica imagino eu.
Depois de fazer o upload, no webserver a hora ficou meio bugada
fincando horaliga 53:51 e horaDesl 52:52, conforme print em anexo
Atualizei o paste bin com o que eu fiz.
http://pastebin.com/H5JNJueK
Tiago. Está ficando bom o projeto.
Vamos tentar descobrir porque está vindo esses valores iniciais errados.
1) Primeira tentativa. No Arduino, A EEPROM só grava bytes. No ESP acho que deve ser a mesma coisa. Se gravar int pode comprometer o valor.
Por isso, faça um cast na hora de gravar para todas as variáveis:
EEPROM.write(addr, (byte) horaLiga);
2) Segunda tentativa. O tamanho inicial reservado acho que é suficiente, pois 5 bytes gravam 5 variáveis. No entanto, por via das dúvidas, mude o tamanho para 256
EEPROM.begin(256);
3) É uma dúvida minha. Na primeira vez que você lê a EEPROM não tem nada gravado lá. O que ele traz? Zeros ou lixo?
Faça um pequeno sketch só pra gravar zeros nos primeiros 256 bytes da memória. Quando ligar o sistema você testa as variáveis para saber se é a primeira vez.
4) Acho que a leitura da EEPROM pode ficar no setup, pois vai ser feita uma única vez quando liga.
5) O END só pode usado se você não vai usar mais a EEPROM naquela seção.
fiz o teste, com as modificações dos itens 1, 2, 3, 4, e 5 , rodou bem melhor, mas ainda tem uns bugs.
Consegui armazenar o status da gpio corretamente
quanto ao item 3, ele inicia com lixo na primeira vez, sendo esses valores mesmos horaliga 53:51 e horaDesl 52:52, mas dessa vez os controles funcionaram, e consegui armazenar a hora, mas por algum motivo ele gera um minuto a mais na hora liga.
Acho que ficou assim pq eu havia definido valores iniciais ao horaliga e horaDes próximo a linha 34, dessa vês coloquei tudo zero, mas para testar precisaria limpar a EEPROM.
Atualizei novamente o pastebin com as ultimas modificações http://pastebin.com/H5JNJueK
Tiago, pelo que entendi está tudo funcionando, exceto que está gravando uma minuto a mais na horaliga?
Não sei se é devido à gravação anterior.
Para tirar a dúvida você pode fazer um pequeno programa à parte para zerar a EEPROM ou então incluir uma opção no sistema para zerar:
for (int i = 0, i <= 255; i++) { EEPROM.write(i,0); }
Cintra, estou fazendo a adaptação do código para zerar a EEPROM, mas de fato agora aprendi a usa-la
tenho que fazer alguns ajustes, mas esta funcionando.
Obrigado a todos pela ajuda
Boa tarde, parabéns pelo artigo, esta perfeito e queria aplicar em um cenário sem wifi apenas com cabo, sei que todos estão ocupados sem tempo e como estou começando agora, por isso não tenho bom conhecimento ainda, mais por a caso vcs tem esse .ino para o Arduíno uno com Ethernet shield ou sabe onde posso achar? ou mesmo me ajudar a molificar para uno já procurei algo parecido mais não achei na
net
Davi, boa tarde.
Nunca usei um Ethernet shield, mas a lógica dele é mais ou menos a mesma do ESP, até onde eu sei a grosso modo vc só precisaria tirar a parte que controla a conexão com a internet do Ethernet shield.
Recomendo que vc abra um novo tópico só para isso, ai vc pode linkar esse tópico como exemplo.
Att
Ok, obrigado pela resposta rápida, farei os testes hoje se não obter sucesso faço o que sugeriu de um novo tópico e posto o que consegui de resultado do uno.
opa beleza gostei do seu projeto mas ta dando muito erro . não consigo gravar da erro na biblioteca
Eules boa tarde, qual a biblioteca que esta dando erro?
ESP8266WiFi.h
estranho, essa é nativa da configuração do arduino, recomendo que atualize a versão placa do esp8266 no gerenciador de placas da ide do arduino.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por