[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: 473

Anexos

Responder esta

Respostas a este tópico

Bom dia A,

Se for nova aqui no fórum , algumas recomendações:

1. Remova o sketch postado na área de texto do tópico.  

2. Leia http://labdegaragem.com/forum/topics/sugest-o-de-como-postar   

3. Comente as linhas do seu sketch. Fica mais fácil entender o que vc quer fazer com cada linha e facilita a ajuda.   

4. Anexe ou poste desenhos, esquema, links, sobre seu projeto e os componentes dele, tais como sensores, etc.


Com estas informações, ficará mais fácil entendermos seu projeto e melhorar a condição de ajuda.


E finalmente se seu problema for resolvido, divida conosco a solução e escreva "[Resolvido]" no inicio do titulo

do tópico.    Ficando assim: [Resolvido] + Titulo.

RV

Tá joia, fiz algumas alterações. Obrigada :D

Se retirar o client.stop(); do final do código não ajuda?

Eu fiz isso, mas continua a mesma coisa. O browser exibe os dados enviados pelo node sem a página, e então, o sistema fica estático, visto que é a página quem requisita os dados e o node responde.

O que deveria acontecer é que na hora que eu dou o refresh na página, o node deveria entra no "else" onde está a função "printPage()" e depois prosseguir respondendo as requisições da página. Mas ele executa a função de enviar dados, aí a página não é servida...

Mas obrigada pela dica!

Obrigada pelas sugestões! Vou dar uma olhada no material.

Oi A,

tentei testar o seu code, mas preciso carregar esta pagina

SPIFFS.open("/index.htm", "r");//open html page for reading

Como o ESP não a encontra da erro: e fecha .

novo cliente
  file open failed
  client disconnected"

RV

Olá RV,

coloquei o arquivo em anexo, mas não tenho certeza se fiz corretamente. Qualquer coisa eu coloco o código. É bem simples, só uma interface simples e uma lógica em javascript para requisitar dados.

tem que criar uma pasta chamado "data" na dentro da pasta do código, e colocar o arquivo index.htm dentro dela.

Bom dia,

Vejo que usou AJAX para atualizar os dados.

Não vou ter tempo para ver o seu código em detalhes agora.

Mas te dou umas dicas:

1-O que você vê na barra de endereços do seu browser? Se estiver manipulando o AJAX corretamente, ele não deve se alterar e manter e endereço que compõe a página

2-Envie tudo o que puder para a porta serial e crie um log para entender o que acontece, isso ajuda bastante

3-Se não der tempo de ir copiando o conteúdo da porta serial pelo monitor serial da IDE do arduino, use o programa chamado putty que consegue redirecionar o que vem pela serial para um arquivo de texto automaticamente.

4-Qualquer coisa, entre em contato mais tarde que poderei tentar te ajudar.

Boa sorte,

  'Eiju

Olá,

1 - Não entendi bem o que você quis dizer na parte do AJAX. Na barra de endereço está apenas o IP do node (estou fazendo acesso local). Na hora de dar o refresh continua o IP lá.

2 - Eu coloquei um print na função StrContains() para exibir o que o node recebeu e vi que quando eu dou o refresh na página, tá chegando o texto "GET /ajax_LerDados", mas ele deveria considerar como um primeiro acesso e servir a página antes dos dados. Nessa hora, a função deveria retornar falso e ele executar o else com a função "printPage()". Estou começando a suspeitar que o erro pode ser do lado da página sim. Ela parece estar enviando a requisição quando eu dou o refresh, ou de alguma forma, o node está recebendo ela. Mas aí complicou mais para mim, porque eu entendo é de embarcados... rs. A parte web me aperta muito.

Obrigada pela atenção!

Vi que quando eu acesso a página pela primeira vez, ela envia o texto "GET / HTTP/1.1". Então a função que confere a requisição de dados retorna falso e o node serve a página. Mas na hora que dou o refresh deveria acontecer o mesmo processo, como se fosse um primeiro acesso, mas o que o node recebe é "GET /ajax_LerDados".

Eu anexei o arquivo da página, se você puder dar uma olhada, o código é bem simples, mas eu não entendo de programação web... :/

RSS

Destaques

Registre-se no
Lab de Garagem
Clicando aqui

Convide um
amigo para fazer
parte

curso gratis de arduino

© 2018   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço