Ir ao conteúdo
  • Cadastre-se

ESP8266 - A Pequena Maravilha para Comunicação WIFI


aphawk

Posts recomendados

  • Membro VIP

@aphawk , eu esperava encontrar os comandos "html", "css" e "cssid". Os comandos que você usou, e que até onde me consta são BASCOM. Eu sei bem que CSS e HTML não o são, mas estes foram apenas valores ou parâmetros.

 

Onde você aprendeu que pode comandar "cssid"?!

 

Ah! Aquilo é Esp8266Basic, não é BASCOM...
 

Citação

 

HTMLID():

The html id function will return the randomly generated id for the last gui object created. Useful for javascript interaction capabilities.


htmlid()

 

CSSID:

The cssid command will apply css to the desired item by id. This should be executed immediately after creating a gui object.

Example:


cssid htmlid(), "background-color: yellow;"

 

CSSCLASS:

The cssclass command will apply css to the desired class of gui objects.

Example: Will set all buttons to color yellow.


cssclass "button", "background-color: yellow;"


JAVASCRIPT:

Will allow you to include javascript files in your page. File must be uploaded to the device using the file manager.


javascript {filename}


CSS:

Will allow you to include css files in your page. File must be uploaded to the device using the file manager.

See the CSS example here.


css {filename}

 

 

Link para o comentário
Compartilhar em outros sites

@alexandre.mbm ,

 

Exatamente !

 

Não tem nada a ver o Bascom e o ESP8266Basic.

 

O Bascom é um produto maduro, com quase 20 anos de idade, que continua evoluindo a cada update. E é um produto comercial.

 

O Esp8266Basic é um projeto em andamento, tem pouco mais de um ano, e é gratuíto, porisso que ainda possui alguns bugs e pouco desenvolvimento no suporte de novos comandos.

 

E os objetivos de ambos são totalmente diferentes : o ESP8266Basic é totalmente focado a IOT !

 

Paulo

Link para o comentário
Compartilhar em outros sites

Pessoal, estive pensando muito a respeito das possibilidades de comunicação entre o mundo externo e os ESPs, a forma como eles enviam e recebem informações para determinado local. Hoje nós temos duas possibilidades:

 

1ª - O ESP fica sempre ativo/online em modo servidor, aguardando um cliente pedir algum tipo de informação e quando isso ocorre ele fornece estas informações sob condição de demanda; se tem demanda, ele executa, se não tem, ele fica aguardando. 

 

Prós:

O ESP pode executar outras tarefas enquanto ocioso;

Quando tem cliente online, só precisa enviar o que for pedido e nada mais.

 

Contras:

A conexão externa depende de um IP fixo ou no mínimo um gerenciador de IP Dinâmico (noip, dyndns...). Como sabemos, IP fixo sempre tem um custo adicional nas operadoras e nem todas oferecem este tipo de serviço. Já com os gerenciadores de IP dinâmico, embora seja bem funcional, tem uma série de inconvenientes (comercialmente falando), por exemplo, quase não se encontram estes serviços de forma gratuita e quando encontra o roteador não tem a opção configurar para tal serviço. Dos gratuitos, o noip é um dos mais populares, porém, todo mês tem que ativar a conta, e isso enche a paciência.

 

 

2º - O ESP fica em modo cliente e sempre tentando se comunicar com um ou mais servidores e quando consegue, envia todas as informações das leituras a e ele.

 

Prós:

Não depende de configuração nenhuma no roteador;

Não depende de portas liberadas pela operadora;

Não depende dos gerenciadores de IP dinâmico;

 

 

Contras:

Pelo fato dele ter que ficar sempre enviando informações para o servidor, os serviços secundários ficarão prejudicados, pois como sabemos, os ESPs param todos os processos enquanto se comunica na rede wifi;

 

 

Cada caso é "um caso" imagino que se for prioridade os serviços locais, a primeira opção pode ser a melhor, mas se a prioridade forem o envio das informações para os servidores externos, a segunda já se mostra melhor. 

 

O que acham?

 

 

 

 

 

 

 

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@ViniciusKruz , eu não pude testar na prática, nem tive tempo para estudar mais a teoria. Mas eu entendi que a função wget() do Esp8266Basic talvez funcione para atualizar o gerenciador de IP dinâmico. Isso dispensaria suporte ao serviço pelo roteador, bastando a abertura das portas. A função no ESP seria usada para recuperar o IP externo e também informá-lo ao noip.

 

@rodrigocirilo , consulte sempre a documentação! Fazer as coisas baseado somente em respostas e "receitas" de fórum pode lhe reservar surpresas bem desagradáveis.

Link para o comentário
Compartilhar em outros sites

@alexandre.mbm  Sim, também não testei, mas creio que seja possível sim e no caso do Arduíno, também tem as bibliotecas tanto para colocar o ESP como server como para cliente, é possível sim dispensar a configuração no roteador, inclusive, já li em algum lugar que é possível criar um túnel do ESP para o servidor/cliente externo usando qualquer porta sem a necessidade de liberar o forward, mais ou menos como faz o TeamViewer, desta forma dispensaria também a abertura de portas no roteador bem como o gerenciador de IP dinâmico.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@rodrigocirilo ,

 

Dá uma olhadinha :

 

https://thingspeak.com/

 

Eu posso criar vários canais de dados, posso armazenar e recuperar um monte de informação usando o ESP8266Basic, pois ele já tem uma função avançada que permite escrever ou ler qualquer um de seus canais de dados !

 

Por exemplo, posso ter uma rede de 5 ESP8266s, coletando informações de vários locais de uma plantação, como umidade na terra, umidade no ar, temperatura, etc, e cada um deles armazena tudo isso em um canal para cada um deles, e ainda verifica se tem alguma comando para cada um deles fazer.

 

E posso ter um outro ESP8266 que lê os dados desses canais, analiza, e pode determinar comandos para cada um dos ESP8266's  , por exemplo ligar a irrigação onde a umidade do solo está muito baixa.

 

Olha o site, veja os exemplos de dados, tenho certeza que você vai achar isso muito interessante...

 

Paulo

  • Curtir 4
Link para o comentário
Compartilhar em outros sites

@aphawk Desde o inicio quando comecei a trabalhar com os ESP8266 que eu conheci o Thingspeak, e também compreendi que esta á realmente a função para o qual os ESPs foram criados. Por enquanto, como estou apenas brincando e testando, ligando e desligando coisinhas simples, ainda não houve a necessidade de usar o Thingspeak, inclusive achei a proposta de uso tão interessante que penso em montar meu próprio Thingspeak em um domínio próprio, daí eu poderia colocar quantos canais quiser e ainda não teria a limitação de tempo entre cada envio, que no Thingspeak, se não me engano são 5 segundos entre cada envio, ou seja, se tem que esperar esse tempo pra enviar, será que não tem também que esperar este mesmo tempo para ler? Penso que o ideal de atualização é a cada segundo, pode até demorar mais que isso uma vez ou outra por causa dos delays das redes, mas que no geral esse tempo fosse na faixa de 1 segundo.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@aphawk Sobre o thinghspeak logo vou tentar fazer um teste com ele...

 

 

Agora, percebi uma coisa, quando colocamos um botão end... ele para de rodar o programa? tipo o uC para de rodar? nos meus testes sim...

 

E percebi que se não parar o codigo para editar e salvar pode dar um erro que "some" com parte do seu codigo !!!

 

Alguem ja passou por isso!!

Link para o comentário
Compartilhar em outros sites

19 horas atrás, ViniciusKruz disse:

@aphawk Desde o inicio quando comecei a trabalhar com os ESP8266 que eu conheci o Thingspeak, e também compreendi que esta á realmente a função para o qual os ESPs foram criados. Por enquanto, como estou apenas brincando e testando, ligando e desligando coisinhas simples, ainda não houve a necessidade de usar o Thingspeak, inclusive achei a proposta de uso tão interessante que penso em montar meu próprio Thingspeak em um domínio próprio, daí eu poderia colocar quantos canais quiser e ainda não teria a limitação de tempo entre cada envio, que no Thingspeak, se não me engano são 5 segundos entre cada envio, ou seja, se tem que esperar esse tempo pra enviar, será que não tem também que esperar este mesmo tempo para ler? Penso que o ideal de atualização é a cada segundo, pode até demorar mais que isso uma vez ou outra por causa dos delays das redes, mas que no geral esse tempo fosse na faixa de 1 segundo.

voce teria que criar um banco de mysql ***** pra interpretar os graficos que nem o thing. Mas nao e nada impossivel nao^^

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Quais as portas realmente que podem ser usadas como I/O ??

 

Pois vejo os pinos GPIO3 = RX, GPIO1 = TX, GPIO10 = SD3, GPIO9 = SD2 ???

 

 

adicionado 11 minutos depois

Tentei setar essas portas como PinOut e dar valor 0 para elas...e dá um bug lascado!! agora vou fazer individual pra testar!!

 

Editando2:

 

@aphawk

Paulo na linguagens esp8266 basic, seria possível usar o mesmo pino como entrada e como saida?

 

Tipo, teria um boão no browser e ao pressionar ele setaria o "pino" como high (acionando uma fechadura de porta por exemplo) e nesta mesma porta teria um sensor magnetico NA/NF para "ler" o estado da porta....seria possivel este sinal do sensor ser ligado no mesmo pino que acionará ?

 

Link para o comentário
Compartilhar em outros sites

Pessoal,estava ka eu pensando um jeito de contornar a "deficiencia" do esp em portas analogicas sem ter de recorrer ao protocolo I2c. Achei o demux 4051 na net e consegui implementar 7 sensores na teoria e 2 na pratica com arduino.

 

Minha duvida: Será que daria pra usar no nodemcu o código para programar no arduino? Ou daria ate mesmo pra implementar em basic fazendo um código do capiroto?

 

Como aqui é partilhação de conhecimento, deixa eu partilhar o meu:

-----------------

int sensor1= A1;

int vetor=500;

unsigned long tempo;

int led1=5 ;

int led2 =4;

int led3 =3;

int referencia=0;

int troca1;

int valor1;

int a;

int b;

int c;

int d;

void setup() {

 DDRD =B11111110;

 pinMode(sensor1,INPUT);

 pinMode(led1,OUTPUT);

 pinMode(led2,OUTPUT);

 pinMode(led3,OUTPUT); 

  Serial.begin(9600);

}

void loop() {

  valor1 =analogRead(sensor1);

 

  tempo = millis();

  delay(300);

    troca1++;

    

    Serial.print(", e o valor de b:");

    Serial.print(b);

    Serial.print(",e o valor de c:");

    Serial.print(c);

    Serial.print(",e o valor de d:");

    Serial.println(d);

    

 

  

  

 

 if(troca1>=4){

  troca1 =1;

 }

 

 

 switch(troca1){

 

 case 1:

 

 b=valor1;

 digitalWrite(led1,LOW);

  digitalWrite(led2,LOW);

  digitalWrite(led3,LOW);

 break;

 

 

 case 2:

 c=valor1;

 digitalWrite(led1,HIGH);

 digitalWrite(led2,LOW);

 digitalWrite(led3,LOW);

 break;

case 3:

 d=valor1;

 digitalWrite(led1,LOW);

 digitalWrite(led2,HIGH);

 digitalWrite(led3,LOW);

 break;

  

 }

}

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Pessoal, alguem saberia como fazer o ESP comunicar por serial com um uC, no caso seria um pic.

 

Vi que tem os comandos serialprint (valor) seria isso pra enviar para o uC via serial ? usando os pinos tx/rx do nodemcu? e para receber algo do pic, seria o serialinput (variavel) ??? E tambem declarar o baudrate ?

Link para o comentário
Compartilhar em outros sites

9 minutos atrás, rodrigocirilo disse:

Pessoal, alguem saberia como fazer o ESP comunicar por serial com um uC, no caso seria um pic.

 

Vi que tem os comandos serialprint (valor) seria isso pra enviar para o uC via serial ? usando os pinos tx/rx do nodemcu? e para receber algo do pic, seria o serialinput (variavel) ??? E tambem declarar o baudrate ?

Ja consegui fazer o node se comunicar com arduino, so que trava bastante, não recomendo...

 

Mas vamos lá,Se voce programar o node pela ide do arduino então ele é praticamente um "arduino" e da pra usar os truques que se usam no arduino.

Como voce vai tentar pelo pic recomento voce configurar a serial para 115200 dar o comando que seria o equivalente a "serial.println(valor)" no arduino.

lembrando que no arduino voce pode fazer assim:

Serial.print("o valor e");

Serial.print(variavela);

Serial.print("o valor e");

Serial.println(variavelb);

o microcontrolador entenderá tudo isso como uma unica string, o que e útil dependendo da situação.

Ahe no node voce define

string lalala=Serial.readstring();

Serial.print(lalala);

 

Quanto a montar a parte fisica, o rx de um vai no tx do outro e vice=versa.o node aceita nivel logico 3,3 nas suas entradas, então voce devera ter um pouco de precaução.

No pic faça um programa que mande um pulso em qualquer uma de suas perninhas, como se fosse acender um led, e meça com um multimetro a tensão desse pulso. Depois use este site aqui para calcular um divisor de tensão e converter o valor do pulso para 3,3

http://www.arduinoecia.com.br/p/calculador-divisor-de-tensão-function.html

lembrando que se a tensão e maior do outro lado, nao precisa dessa artimanha.

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@lucianolcoa  Teve que usar algum divisor para ligar os pinos do node ao do arduino.. pois o nivel logico do pic(creio do arduino também) são de 5V e do node(ESP) é 3.3V procede?

 

então para enviar para o pic do esp seria serial.print(variavel) ou pode ser numeros tipo 1, 2, 3 etc...

 

e para receber no esp serial variavel = serial.readstring() ??? só isso ?

 

 

Obs. estou programando (tentando hehe) pelo ESP8266BASIC ... então nao seriam esse comandos ??

 

 

edit2: 

 

acho que no espbasci o comando de receber seria esse:

SERIALINPUT:

serialinput {variable}

 

e o de enviar seria:

SERIALPRINT:

serialprint {value or var}

 

alguem confirma?

Link para o comentário
Compartilhar em outros sites

9 minutos atrás, rodrigocirilo disse:

@lucianolcoa  Teve que usar algum divisor para ligar os pinos do node ao do arduino.. pois o nivel logico do pic(creio do arduino também) são de 5V e do node(ESP) é 3.3V procede?

 

então para enviar para o pic do esp seria serial.print(variavel) ou pode ser numeros tipo 1, 2, 3 etc...

 

e para receber no esp serial variavel = serial.readstring() ??? só isso ?

 

 

Obs. estou programando (tentando hehe) pelo ESP8266BASIC ... então nao seriam esse comandos ??

 

Sim usei, so que expliquei depois no topico reeditado, antes de voce postar sua duvida hehe, pics varia muito de uma versao pra outra, mesma coisa dos avrs, não use o arduino como base pois ele sempre usa o mesmo chip, o atmega 328p, faça o esquema que te falei de mandar um pulso e ler com o multimetro que voce sera mais feliz^^

voce pode colocar serial.print(variavel) desde que ela ja esteja "calculada"

lembre-se que no esp seu ultimo comando tem que ser serial.println para voce "fechar" a string.

Agora , do lado do pic vou ficar devendo, tentei aprender essa pocilga nao consegui... mas boa sorte hehehe

pelo espbasic so vendo a documentação mesmo... Mas ja vi o aphawk postar aqui tratamento de strings, acho que deve ter alguma firula a respeito.

Não , espebasic programa em basic, arduino usa uma linguagem propia que nao é nem c, nem c++,nem java, ne o krai a 4, é so dela, mas é baseada no c. 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

1 hora atrás, lucianolcoa disse:

Minha duvida: Será que daria pra usar no nodemcu o código para programar no arduino?

 

Sim. Nas configurações na IDE do Arduíno dá pra configurar as placas mais conhecidas e também as "genéricas".

adicionado 6 minutos depois
1 hora atrás, rodrigocirilo disse:

Teve que usar algum divisor para ligar os pinos do node ao do arduino.. pois o nivel logico do pic(creio do arduino também) são de 5V e do node(ESP) é 3.3V procede?

 

Se você ligar tanto o ESP quanto o PIC em 3v3 não precisa de nada, pode ligar TX/RX diretamente.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
31 minutos atrás, ViniciusKruz disse:

Se você ligar tanto o ESP quanto o PIC em 3v3 não precisa de nada, pode ligar TX/RX diretamente.

 

Por coincidência, de ontem pra hoje eu tenho pesquisado um bocado sobre a conveniência de usar o MPU-6065 (módulo GY-521) em 5V, com Arduino. Dizem que a placa tem resistores pull up para SDA e SCL, e mais ou menos "regula" a tensão, tolerando ser alimentada e operar o I2C entre 3 e 5 volts. Mas estou com receio de aplicar, porque não estou conseguindo* interpretar completamente o esquemático que encontrei. Vou analisar se não é mesmo o caso de aplicar um divisor de tensão limitador de corrente, ou resistores entre 1 e 10K em série no I2C, alimentando o módulo em 3.3 V regulados e GND em comum com Arduino.

 

Update

 

* O que pega é que simplificaram demais o diagrama, usando blocos separados, e isso me confunde um pouco. De repente cortaram demais, esqueceram algo, sei lá...

 

Obs.: não estou podendo esperar um conversor de nível lógico.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!