[RESOLVIDO] ESP8266 como webserver - problema ao atualizar a página web

Bom dia a todos!

Estou trabalhando com o nodeMCU ESP8266 como um  web server e está quase 100%, mas estou enroscada. A ideia é servir uma página web que está gravada na flash do node para o cliente com uma interface onde serão exibidos dados de temperatura e luminosidade. Está funcionando, o cliente acessa, a página é exibida e, em seguida, os dados começam a ser atualizados conforme a página envia requisições e o node responde.

Porém, se eu der um refresh na página, ou se um segundo cliente acessar, a página não é mais exibida, apenas os dados que estão chegando.

Não acho que o problema seja do lado da página, visto que a única função dela é enviar as requisições para atualizar os dados e interpretar a resposta para exibir na tela adequadamente. Acredito que o problema seja na minha lógica de tratamento dos clientes, mas eu não tenho muito conhecimento de servidores, fui montando o código conforme alguns tutoriais. Alguém pode, por favor, me ajudar? Qualquer dica é bem vinda. Estou pesquisando a solução há alguns dias, mas ta difícil... rs

O código está em anexo.

Obrigada! :D

Alessandra

Exibições: 3192

Anexos

Responder esta

Respostas a este tópico

Oi Alessandra,

Perdoa-me imenso, o CELSO esta correto! A posição do script não causa o processamento incorreto, apenas a ordem em que o script e página são carregados.

Não estou certo sobre o que me confundiu antes, mas revisando o teu código agora vi que o problema esta apenas na existência do break após LerDados(client) que impede o programa de reiniciar o index "req_index = 0" e a limpar o buffer "StrClear(HTTP_req, REQ_BUF_SZ)" por isso HTTP_req sempre continha ajax_LerDados após a primeira requisição.

A proposta do MPS de usar a classe ESP8266WebServer é boa, já que você só precisa tratar o que vem depois do endereço, exemplo: "server.on(/ajax_LerDados)", o resto já é tratado pela classe.

Oi Marco, era isso mesmo! Acabei de fazer o teste e foi só retirar o break; após a chamada LerDados(client); Eu mudei a posição do script na página web e não surtiu nenhum efeito.

De qualquer forma, eu implementei o código com a biblioteca ESP8266WebServer.h pois facilita e reduz bem o programa, mas agora sei porque não estava funcionando anteriormente.

Valeu mesmo!!!

O bom de saber onde erramos é que reduzimos o risco de cometer o exato mesmo erro ^^

O uso de bibliotecas facilita e reduz a "quantidade de programação", mas algumas bibliotecas trazem muitos recursos que não usamos e aumenta o tamanho do programa final, o que é ruim quando chegamos no limite de memória (fácil de acontecer com nossos pequenos microcontroladores). Porem, enquanto espaço não é o problema, os benefícios são maiores ;)

Até a próxima!

Pessoal, muito obrigada a todos que colaboraram com a solução deste tópico!!!

Após várias hipóteses, o Marco identificou o problema que era o comando break; após a chamada da função LerDados(); Isso impedia o programa de reiniciar o index "req_index = 0" e de limpar o buffer "StrClear(HTTP_req, REQ_BUF_SZ)", então "HTTP_req" sempre continha ajax_LerDados após a primeira requisição e quando se dava um refresh na página, ela já recebia os dados, sem o html da página.

Mas o Marcos postou um código que executa a mesma função de servidor com a biblioteca "ESP8266WifiServer.h" que, na minha opinião, melhora bastante o programa. Então acabei implementando dessa forma.

O tópico está RESOLVIDO!

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço