Primeiramente, gostaria de agradecer pelo aceite aqui no fórum. Muito obrigado.
Este é meu primeiro post, porém, já fui atendido muitas vezes ao acessar os posts dos colegas aqui do fórum.
Já aviso que sou Eng. Florestal. Portanto um hobista e amador.
Atualmente, estou desenvolvendo uma micro estação meteorológica que, obviamente, possuí 3 componentes que estão me tirando o sono.
- ESP8266-01
- DHT22
- Pluviômetro
Explicação do funcionamento...
Etapa 1:
- O ESP liga;
- acessa o servidor;
- pega data e hora;
- desliga wifi;
- fica contando o delay de 1s, que é armazenado em uma vaiável chamada segundos.
Etapa 2:
- Quando fechar 15 minutos:
- Ativa wifi;
- recebe Temperatura e umidade;
- envia para o servidor;
- atualiza a data e a hora;
- destativa wifi;
- fica contando o delay de 1s, que é armazenado em uma vaiável chamada segundos.
OBS.: a contagem do pluviômetro ocorre no intervalo do delay;
Problemas que preciso resolver.
1 - delay(1000) é muito grande para contar o pluviômetro (pensei em reduzir para 200 e a cada 5 loop's 1 segundo, em caso de chuva intensa não perco contagem do pluviômetro);
2 - o envio dos dados está levando aproximadamente 8 segundos, o que pode implicar na perda de contagem do pluviômetro.
Assim sendo, os nobres colegas saberia me informar se existe a possibilidade de realizar tarefas assíncronas? Então, poderia fazer o envio sem para o loop.
Desde já agradeço.
Att
Fábio Soares Pires
Tags:
Bom dia FSP,
tudo neste possível neste mundo, até evitar a morte, um dia quem sabe.!!!!
Vamos ao seu projeto.
1. Vc está usando um Arduíno e um ESP8266-01, ou somente o ESP8266-01?
2. Evite ao máximo usar delay() no ESP. Isto pode até disparar o wdt dele e ficar dando boots seguidos.
3. Para que possamos ajudar melhor, seria bom vermos o seu sketch e o esquema das suas ligações.
4. Faça assim:
Clique em : " Deseja carregar arquivos? " e depois em " Escolher arquivo" e anexe o arquivo
com o seu sketch.
5. Depois click em imagem, e post uma imagem com o desenho do esquema do seu projeto.
RV
Somente o ESP01.
Não reparem na lógica e lembrem que sou amador. KKKK.
Imagem do projeto no fritzing
Olá Colega RV.
evitar a morte não e possivel a não ser com a autorização de nossa Deus.
Abraços
Boa tarde FSP,
só pude retornar hoje pra continuar analisando seu projeto.
Compilei o seu code (usando alguns parâmetros da minha rede e outros de algum site qq), e
ai começaram os problemas:
Na função "ajuste", chamada logo no setup(), tem um erro conceitual.
Existe um if: if (httpCode == 200) { e depois ou else : } else { ajusta();
Ora se o acesso ao site falhar (httpCode != 200, o programa vai para o else, que chama novamente a função,
que se falhar, faz o mesmo, e assim fica até estourar o stack e gerar um dump de erro.
Isto ocorre aqui comigo.
O certo é, no else fazer um return, e no setup(), informar que não conseguiu conectar, e tomar alguma ação.
Sobre o tempo de envio dos dados ao servidor, acredito que Não seja realmente o tempo de envio, e sim o tempo de
leitura deste sensor. Ele realmente tem um tempo de resposta grande, e são feitos 2 acessos a ele:
dht.getHumidity(); e dht.getTemperature();.
https://www.filipeflop.com/produto/sensor-de-umidade-e-temperatura-...
Especificações – Tempo de resposta: 2s .
Uma solução para estes caso seria o uso de threads, mas só usei no Arduíno, ainda não usei no ESP
https://github.com/ivanseidel/ArduinoThread
https://github.com/bmellstrom/esp8266-arduino-threads
Quanto ao delay de 1000, sugiro substituir pela função miilis(); ou ainda bibliotecas tal
como a timerOne.h ou a elapsedMillis.h ,
http://www.switchdoc.com/2015/10/iot-esp8266-timer-tutorial-arduino...
(https://playground.arduino.cc/Code/ElapsedMillis)
RV
Olá Mineiro.
"Existe um if: if (httpCode == 200) { e depois ou else : } else { ajusta();
Ora se o acesso ao site falhar (httpCode != 200, o programa vai para o else, que chama novamente a função,
que se falhar, faz o mesmo, e assim fica até estourar o stack e gerar um dump de erro."
Fiz assim porque eventualmente o servidor que utilizo fica sem energia elétrica.
Estou vendo uma outra alternativa.
Ontén encontrei uma provável solução...
Peço que veja e analise para o meu caso e obviamente para os colegas.
https://www.luisllamas.es/libreria-arduino-asynctask/
Implementei no código e até o momento está funcionando.
Vou testar mais a contagem durante o envio dos dados para ver se há ou não falhas.
Se achar necessário envio o código reformulado.
Boa noite FSP,
este ESP do seu projeto, tem acesso á internet?
Se tiver que tal usar o relógio da internet, o ntp em "a.st1.ntp.br"
https://portal.vidadesilicio.com.br/protocolo-de-tempo-ntp-esp/
RV
Na verdade eu utilizo um relógio que pego do servidor.
Mas este que você indicou é bem legal.
Obrigado
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por