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

Exibições: 290

Responder esta

Respostas a este tópico

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.

estacao_fabio.ino

Imagem do projeto no fritzing

microesta%C3%A7%C3%A3o_F%C3%A1bio.jpg

Olá Colega RV.

evitar a morte não e possivel  a não ser com a autorização de nossa Deus. 

Abraços

Tarefa assíncrona e periódica pode fazer com timer e interrupção. Veja esse link

http://labdegaragem.com/m/blogpost?id=6223006%3ABlogPost%3A155493

Mas há problema em perder a leitura do pluviômetro? Em termos climáticos penso que ler os dados a cada 1 min vai funcionar.
Ah tá. Se a chuva for intensa precisa ler o pluviômetro frequentemente.

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://ntp.br/.

https://portal.vidadesilicio.com.br/protocolo-de-tempo-ntp-esp/

RV

Na verdade eu utilizo um relógio que pego do servidor.

hora.php

Mas este que você indicou é bem legal.

Obrigado

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço