boa noite pessoal, ando fazendo alguns testes com nodemcu esp12, fiz projetos com html e css, e tive muitos problemas de travamento, o esp simplesmente congelava, principalmente quando se tenta acessar com 2 dispositivos simultaneamente.

tive um melhor resultado com javascript/ajax, mas estou achando bem dificil a programação, visto que todo material que acho na net, são feito de formas diferentes, que no fim geram mais duvidas.

voces ja conseguiram fazer um projeto com html/css, que rode sem problemas?

Exibições: 247

As respostas para este tópico estão encerradas.

Respostas a este tópico

Eu não, tenho pavor dessas coisas... Nunca entrei um projeto que justificasse usar nada disso, enfim, cada um cada um.

Sobre os travamentos: Existe um problema recorrente que é a alimentação desses módulos. Os cabos precisam ser ótimos. Padrão original da samsung ou coisa assim espetado em USB 3.0 ou 2.0 se o micro for de boa procedência. Esses "Positivo" por ex raramente tocam um ESP ligados em sua USB.

Começaria por aih a tentar entender o travamento.

Uso na verdade fonte externa nos meus. Só assim fiquei mais tranquilo. Eles são definitivamente mais sensíveis que microcontroladores de antigamente. Um PIC, 8051, etc simplesmente nunca travava. Os Atmega travam e queimam de vez em quando. Os ESP infelizmente tem travado nos meus testes tb. 

Mas faço coisas com MQTT. Protocolos o mais simples possível.

Para coisas mais complicadas recomendo pensar num raspberry. Ele sim se garante bem, embora tenha o mesmo problema de alimentação. A fonte precisa fornecer 1,5A ou mais, não apenas estar escrito nela que vai fornecer.

boa noite Eduardo, fonte uso de 1A da sansung, porem somente com html/css que tenho esse problema, no ajax roda tranquilo, penso em tentar mqtt e ver os resultados, estou ouvindo maravilhas deste.

quero continuar acreditando nos esp's, mas não estou sendo agraciado com sua confiabilidade

Você comentou que trava mais quando está acessando dois dispositivos simultaneamente... Caso os dois dispositivos ESP estejam próximos um do outro e você esteja operando os dois com Wifi ativado, é muito provável que um esteja interferindo no outro. Fiz um projeto em que precisei ligar 10 ESP bem próximos um do outro (com Wifi ativado) e tudo parou e funcionar. Neste caso precisei colocar a pelo menos um metro de distância um do outro.

Com relação ao fato de você estar usando códigos AJAX não deveria fazer nenhum diferença, pois o processador não entende isso. Você tem que levar em consideração que o AJAX só faz diferença para o navegador (Chrome, Firefox, etc), onde realmente será processado o código AJAX.

O lance da fonte também é importante com relação à qualidade, ou seja, tem que ser boa, sem ruido. Porém a corrente de 1A é muito mais que suficiente (muito mesmo). Até nos momentos de pico de corrente, que é quando o ESP está transmitindo dados via rádio (no Wifi), se não me engano o datasheet indica o máximo de uns 250mA de consumo (de pico). Procure colocar capacitores, um eletrolítico de uns 100uF e também um de 100nF, próximo dos terminais de terra e VCC do ESP, só por garantia.

boa noite william, me expressei mal quando disse 2 dispositivos, o que me referia era conectar no ESP pelo celular e pelo computador, mesmo  somente no celular, pouco tempo depois trava, isso que meu codigo esta extremamente simples, somente acionando 2 leds, 

1) Na linha 64 tem uma coisa que eu não faço nos meus códigos, pois pode gerar travamento (o que não quer dizer que seja isso que está fazendo travar...):

ESTÁ ASSIM (tal como nos exemplos da internet):
while(!client.available()){
  delay(1);

}

ALTERNATIVA:
// Como esse "if" só verifica se existem dados a serem recebidos, então se não existir nada para receber você pode ignorar o resto da rotina "loop" usando o "return";

if (!client.available()){
  delay(1); // até pode ter isso aqui, mas eu não uso em lugar nenhum
  return;
}

2) Inserir "client.flush();" após a linha 67, ou seja, após "String request = client.readStringUntil('\r');"


3) Inserir "client.flush();" na linha 140;

4) Sugestão: em lugar de ficar executando "client.println" a cada trecho de código html, faça o seguinte:

String txt = ""; // declaração de variável do tipo String

txt += "HTTP:// 1.1.200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n";
txt += "<h1>ESP8266 Teste</h1>";
txt += "<h3>Exemplo de Webserver acionando LED</h3>";
txt += "</hmtl>\r\n";
//... outras linhas de html
//..
//.
client.println(txt);
client.flush();

5) Você tem duas tags "body" declarados em seu código, nas linhas 109 e 110 do seu exemplo;

6) Na linha do "meta http", faz muito tempo que não vejo nessa parte de html e não fui verificar, mas acho que essa parte tem que ficar dentro da tag "<head>", ou seja, "meta http" é um cabeçalho;

Como complemento eu indicaria a você que use a biblioteca "ESP8266WebServer", pois tem muito mais recursos. Tem várias outras bibliotecas disponíveis também, mas essa acho que tem muitos exemplos.

bom dia Willian,

perfeito amigo, vou fazer essas mudanças e fazer novos testes.

quanto a essas mudanças, no meta refresh, existe um tempo minimo que possa usar? tipo posso usar 1 segundo sem problemas?

e nos seus projetos, voce faz algum tratamento para perda de conexão?

No início de sua rotina já é feito o tratamento da perda de conexão, na linha 59.

Quanto ao refresh de um segundo, provavelmente não vai funcionar. O browser vai executar refresh antes mesmo de atualizar a tela. Você não disse que linguagem está usando do lado do servidor, em sua página que vai mostrar os valores. Caso esteja usando NodeJS você pode usar junto o framework Socket.IO. Acredite, dependendo do que você irá fazer vale a pena estudar NodeJS e o uso do Socket.IO. Claro que tem outras opções, tal como no caso do AJAX diretamente na página e que também irá funcionar.

Assista esse vídeo do link abaixo e tire suas conclusões sobre NodeJS e Socket.IO. Ele usa um hardware que se chama Beaglebone (muito bom também!!). Tem o link para o código fonte do desenvolvedor na descrição do vídeo.
https://www.youtube.com/watch?v=hqQ3gvqxspI

Neste link tem uma implementação de exemplo para ESP8266.
https://github.com/timum-viw/socket.io-client

boa tarde willian, fiz as modificações, e resolveu problemas de perda de conexão e reconexão automáticas, gostei de usar strings, ficou um código mais limpo.

a minha ideia a principio é ajax mesmo, ou somente javascript com um refresh de 5s, penso em fazer um sistema para monitorar  tensão e mandar ligar saidas,  uma automação residencial, depois parto para outras ideias

grato pelos conselhos, melhorou significativamente meu projeto

segue o novo codigo

https://pastebin.com/qG92ZFes

Legal... 

Qualquer dúvida e dicas também, poste aqui para o pessoal do fórum também ter como referência.

Uma última dica: 

Na linha 109 de seu código, onde tem "client.flush();" isso tem que ficar depois de todos os "client.print(blablabla...);". Ou seja, o "client.flush();" da linha 109 tem que ser na linha 117. Isso serve para tudo em que você for enviar dados, apesar de em alguns casos não ter o efeito esperado. Veja na documentação o que é "flush": Arduíno: Flush

O Flush serve para aguardar que os dados sejam transmitidos.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço