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