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
Tags:
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!
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por