Ir ao conteúdo
  • Cadastre-se

ESP8266 - A Pequena Maravilha para Comunicação WIFI


aphawk

Posts recomendados

Pessoal,

 

Estou fazendo um tipo de mini-estação pessoal de tempo .... nada mais do que um ESP8266 e um display Oled pequeno e um botão.

 

A ideia é de, quando ele estiver pronto,  apertando o botão vai permitir passar de uma cidade para outra, e também mostrar o tempo atual na cidade, e uma previsão para o dia seguinte.

 

Como ainda não encontrei onde coloquei meu display Oled ( tenho 2 mas não sei onde coloquei eles ..... ) , fiz apenas um código de teste na tela.

 

Uso o serviço gratuito do OpenWeatherMap.org , o qual disponibiliza uma chave individual para poder acessar a sua API. Você precisa se registrar lá e pegar a sua Key ID, e colocar ela no programa onde eu escrevi sua_key.

 

Atualizo a cada 2 minutos, portanto quando rodar esse programa, espere 2 minutos para a parecer as informações na tela.

 

As poderosas instruções simplificam muito buscar a informação dentro da API e já guardar numa variável.

 

 

Segue o código, e uma tela de saída , para a cidade de São Paulo.

 

memclear
cls
time.setup(-3,1)
delay 6000
print time()
button "FIM" , [SAIDA]
timer 120 * 1000, [RUNPROGRAM]
wait

[RUNPROGRAM]
print time()
query = "api.openweathermap.org/data/2.5/weather?q=Sao_Paulo,br&lang=pt&units=metric&appid=sua_key"
ret = wget(query)
desc = json(ret,"weather.description")
temp1 = json(ret,"main.temp")
temp_min = json(ret,"main.temp_min")
temp_max = json(ret,"main.temp_max")
press = json(ret,"main.pressure")
humid = json(ret,"main.humidity")
wind1 = json(ret,"wind.speed")
wind2 = json(ret,"wind.deg")
wind1 = wind1 * 3.6
wind2 = wind2 * 3.6
ton = json(ret,"sunrise")
toff = json(ret,"sunset")
ton = ton - 10800
toff = toff - 10800
ton = unixtime(ton)
toff = unixtime(toff)
tim = json(ret,"dt")
tim = tim - 10800
tim = unixtime(tim)
name = json(ret,"sys.name")

print "Tempo :" & desc & ", Temperatura :" & temp1 & "C, Pressao :" & press &"mPa, umidade :" & humid & "%,  :" & ", Medicao :" & tim 
print "Temp. Min : " & temp_min & "C, Temp. Max :" & temp_max & "C, Vento :" & wind1 & "Km/h, Direcao :" & wind2
print "Sol nascente :" & ton & ", Sol poente :" & toff
memo = ramfree()
print "Memoria livre :" & memo
print " "
wait

[SAIDA]
timer 0
END

 

Segue a tela de saída :

 

tela.JPG

 

Muito simples de se entender. Agora é só eu achar o meu Oled, e terminar o projeto !

 

update 18/09 18:22  : achei os meus displays .... espero logo postar o projetinho com o Oled e o botão.

 

Paulo

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

@ViniciusKruz ,

 

O problema é que precisa de algum tipo de conexão Internet ..... os pequenos agricultores aqui no Brasil sonham com essa "tal de internet"  .....

 

Bom, está quase pronto, só falta agora o sistema do botão, e a rotação entre várias cidades colocadas no programa.

 

Segue o programinha atual, que está imprimindo as informações atuais do tempo no display Oled :

memclear
cls
gmt = -3
aux_unix = gmt * 3600
time.setup(gmt,1)
delay 6000
oledcls
oledprint "Tempo Sao Paulo",0,0
gosub [PEGADADOS]
button "FIM",[SAIDA]
TIMER 61000,[RUNPROGRAM]
WAIT

[RUNPROGRAM]
gosub [PEGADADOS]
WAIT


[PEGADADOS]
query = "api.openweathermap.org/data/2.5/weather?q=Sao_Paulo,br&lang=pt&units=metric&appid=sua_key"
ret = wget(query)
desc = json(ret,"weather.description")

if len(desc) > 16 then
  desc = left(desc,16)
end if

temp1 = json(ret,"main.temp")
temp2 = instr(temp1,".")
if temp2 > 0 then
  temp3 = temp2 + 1
  temp1 = left(temp1,temp3)
end if

temp_min = json(ret,"main.temp_min")
temp2 = instr(temp_min,".")
if temp2 > 0 then
  temp3 = temp2 + 1
  temp_min = left(temp_min,temp3)
end if

temp_max = json(ret,"main.temp_max")
temp2 = instr(temp_max,".")
if temp2 > 0 then
  temp3 = temp2 + 1
  temp_max = left(temp_max,temp3)
end if

press = json(ret,"main.pressure")
humid = json(ret,"main.humidity")
wind1 = json(ret,"wind.speed")
wind2 = json(ret,"wind.deg")

wind1 = wind1 * 3.6
wind1 = int(wind1)

ton = json(ret,"sunrise")
toff = json(ret,"sunset")

t1 = val(ton) + aux_unix
t2 = val(toff) + aux_unix
t1a = str(t1)
t2a = str(t2)
t1b = unixtime(t1a,"hour:min")
t2b = unixtime(t2a,"hour:min")
tim = json(ret,"dt")
tim = tim + aux_unix
tim = unixtime(tim)

oledprint desc,0,1
oledprint "Temp Tmin Tmax",0,2
oledprint temp1,0,3
oledprint temp_min,5,3
oledprint temp_max,10,3
oledprint "Humi Pres  Vent",0,4
oledprint humid,0,5
oledprint press,5,5
oledprint wind1,11,5
oledprint "Nascer Por",0,6
oledprint t1b,0,7
oledprint t2b,7,7
return

[SAIDA]
timer 0
end

Ainda não está completo, mas já dá para ver o potencial do brinquedo....

 

Segue a tela no display :

 

 

IMG_2159.JPG

 

O problema é escolher o que colocar no display, pois ele é bem pequeno, tem baixíssimo consumo, e a tela é do tipo 8 linhas por 16 caracteres.

 

Segue o esquema no Fritzing :

 

 

mini-estaçao_bb.jpg

 

Paulo

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

@ViniciusKruz  

 

Obrigado, o legal é que estamos todos nós progredindo com as experiências, não é ?

 

Agora faltam duas coisas que eu ainda não experimentei nesse Esp8266Basic :

 

- Existe uma instrução que usa uma interrupção por mudança de nível.... basta dizer qual é o pino e para qual subrotina tem de ir quando ocorre uma mudança de nível, e o mais legal é que ela funciona só quando está em comando wait !

Ou seja, é mais do que perfeito para uso com algum botão ou tecla !

 

- A parte que eu acho que vai complicar : usar modo Sleep....  é a única maneira de se poder alimentar o projetinho com uma bateria tipo 18650 e durar bastante tempo !

Vou tentar usar isso, em vez do Timer que dispara as rotinas. A documentação sobre isso é bem fraquinha, vou ter de fuçar bastante....

 

Após isso, só falta implementar o modo de Previsão do tempo para um, dois ou três dias adiante, e a possibilidade de mudar pelo menos umas 3 cidades.

 

Paulo

 

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

@aphawk

 

Isso mesmo! essa seria minha ideia Paulo, Só preciso saber se ele está em disparo ou não, desculpe minha ausência;

 

*Para conectar o contato seco do alarme no esp8266, andei pesquisando, a conexão seria direto no esp, conectaria no 3,3v ou no ch_pd? 

 

Já criei o modelo para a instalação do firmware, e já conectei o mesmo no PC, hoje mesmo pretendo assistir alguns vídeos de instalação de firmware com o esp8266 basic.

 

Ah e conectar no site e envio email seria ótimo! Isso já é suficiente para mim

Acho que o e-mail seria melhor para o que pretendo utilizar,

é esse programa bem simples que preciso, poderia cria-lo pra mim?

Seria de grande ajuda pra mim mestre! Não sabes o quanto vai me ajudar :P

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@ViniciusKruz , o CEFET do RN implementa estações meteorológicas com Arduino. Há vídeo no Youtube. O principal professor envolvido é Moisés Souto. Há reportagens no Youtube.

 

Como soluções de conectividade, existem 3G, 4G, e registro em SD coletados por Bluetooth ou wifi via Android.

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

@alexandre.mbm ,

 

Já pensou uma rede de milhares desse ESP8266, equipados com sensores de pressão, temperatura e umidade do ar, além de sensores de umidade do solo ? Pena que a conectividade ainda é só por WI-FI .

 

Mas eu ví alguma coisa sobre isso, se não me engano foi na Holanda..... o cara também desenvolveu um algoritmo para predição de eventos perigosos , a partir das variações locais dos dados e também de avisos enviados pelas centrais de meteorologia.

 

Paulo

 

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

@ViniciusKruz ,

 

Potência de transmissão depende do padrão da conexão Wi-Fi .

 

Padrão B -   + 19.5 dBm

Padrão G -   + 16    dBm

Padrão N -   + 14    dBm

 

Corrente máxima consumida no pior caso : 215 mA

 

Com antenas direcionais de alto ganho, dá para se ganhar um bom alcança.

 

 

adicionado 1 minuto depois

@alexandre.mbm ,

 

Esquece o Zigbee, morreu , perto do ESP8266 ele é um dinossauro.

 

Paulo

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

  • Membro VIP
1 hora atrás, aphawk disse:

 

@alexandre.mbm ,

 

Esquece o Zigbee, morreu , perto do ESP8266 ele é um dinossauro.

 

Eu estava "entendendo" que o ZigBee, no caso, seria um protocolo funcionando por cima do ESP8266, como parece acontecer em Sonoff que fora anunciado para venda no eBay. Apenas uma maneira fácil (serial) de "conversar" dados via o wifi...

Link para o comentário
Compartilhar em outros sites

@ViniciusKruz,

 

Oras, nada que uma antiga calculadora HP-41CV não resolva !!!! :

 

19,5 dBm = 89 mW

16    dBm = 40 mW

14    dBm = 25 mW

 

Agora, levando em conta que a frequência é em torno de 2.4 Ghz, com uma boa antena direcional voce conseguirá passar de alguns quilometros. Algo assim :

 

http://www.instructables.com/id/Easy-to-Build-WIFI-24GHz-Yagi-Antenna/

 

Paulo

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

@alexandre.mbm

 

No Arduíno tem um exemplo que cria nos ESPs o protocolo Mesh(usado nos ZigBee). Ele usa a biblioteca:


ESP8266WiFiMesh.h

 

Creio que seja como se fosse um ZigBee só que conectando à rede wifi comum e possivelmente trafegando sobre o protocolo  tcp-ip. Se achar interessante, baixa a biblioteca e dá uma estudada nela.

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

1 hora atrás, aphawk disse:

@ViniciusKruz,

 

Oras, nada que uma antiga calculadora HP-41CV não resolva !!!! :

 

19,5 dBm = 89 mW

16    dBm = 40 mW

14    dBm = 25 mW

 

Agora, levando em conta que a frequência é em torno de 2.4 Ghz, com uma boa antena direcional voce conseguirá passar de alguns quilometros. Algo assim :

 

http://www.instructables.com/id/Easy-to-Build-WIFI-24GHz-Yagi-Antenna/

 

Paulo

 

 

Fizeram um teste num ESP8266 e chegaram a 366m com a antena normal (PCB) com um roteador com antena comum, mas com boas antenas direcionais conseguiram a 4,28Km de alcance. Tem este link no youtube com o teste que eles fizeram, o alcance é impressionante para algo tão pequeno.

 

http://hackaday.com/2014/09/26/esp8266-distance-testing/

 

https://www.youtube.com/watch?v=7BYdZ_24yg0

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

12 horas atrás, ViniciusKruz disse:

@alexandre.mbm

 

No Arduíno tem um exemplo que cria nos ESPs o protocolo Mesh(usado nos ZigBee). Ele usa a biblioteca:


ESP8266WiFiMesh.h

 

Creio que seja como se fosse um ZigBee só que conectando à rede wifi comum e possivelmente trafegando sobre o protocolo  tcp-ip. Se achar interessante, baixa a biblioteca e dá uma estudada nela.

 

Protocolo Mesh em cima de TCP-IP 802.11xxxxxx ????  Uau tem louco pra tudo !!!

 

Deve ser um terror ver o tratamento de colisão desse Frankesntein ....

 

 

 

adicionado 8 minutos depois

@gabriel de freitass ,

 

Só vai precisar colocar um resistor de 4k7 ligando um pino do ESP8266 ao +3,3V , e o relé vai ligado a esse mesmo pino e o pino de GND. Assim, quando o relé acionar, vai levar essa entrada ao nível 0, e nesse momento o software envia o email, ok ?

 

Tente colocar o firmware , eu não consegui usando programa que eles fornecem ( pelo menos no Nodemcu... ) , tive de baixar todo o arquivo no Github e também o programa de gravação de firmware do Github também, só assim consegui gravar nos meus dois Nodemcu.

 

Olha, o programa é bem simples, não me leve a malese eu pedir para você  tentar, ler um pouco no Fórum do ESP8266Basic, tem um exemplo lá prontinho para enviar email, e também de como verificar uma entrada....

 

A minha intenção não é a de fazer o programa para você, e sim te ajudar para que você mesmo o faça, ok ?

 

Paulo

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

3 horas atrás, aphawk disse:

Protocolo Mesh em cima de TCP-IP 802.11xxxxxx ????  Uau tem louco pra tudo !!!

 

Deve ser um terror ver o tratamento de colisão desse Frankesntein ....

 

 

Não estudei o sistema, mas é esta a impressão que deu. Pode ser que eu esteja enganado mas se trata de uma "simulação Mesh", o principal ponto do protocolo Mesh é se comunicar por nós e não por endereço IP como o TCP/IP, logo, por uma rápida observada no exemplo, deu a entender que se comunica por nós mas usa o protocolo TCP/IP. Como eu disse, posso estar enganado.

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

  • Membro VIP

@Intrudera6 , o ruim de forçar distância sem potência é que isso degradará o desempenho de toda a rede do ponto de acesso. Dificilmente o ESP8266 suportaria ser o próprio ponto de acesso naquelas condições. Quer dizer, talvez com IP fixo, como aliás é o usual...

Link para o comentário
Compartilhar em outros sites

Eu já fiz experiências com rede wifi em longo alcance (com automação), e realmente degrada muito (em certas aplicações isto é  tolerável) mas as vezes é desse jeito ou não funciona pois não tem outra alternativa. No entanto sempre se pode ter uma rede especialmente para isso, e ter uma segunda rede independente quando se quer desempenho, convivendo lado a lado.

Link para o comentário
Compartilhar em outros sites

@alexandre.mbm,

 

Na verdade você tem de olhar a coisa toda assim :

 

Mesmo 10 mW com uma antena de alto ganho é muito melhor do que 200 mW com antenas comuns.

 

O fato de a antena ser direcional melhora muito a relação sinal/ruido do sinal desejado, e permite coisas espantosas. Uma antena de alto ganho isola a recepção no sentido de não receber nenhuma interferência de sinais vindos de outra direção. E não precisa usar nenhum tipo de pré-amplificador, que iria aumentar tudo, inclusive o ruído ! E concentra toda a potência em uma só direção, fazendo com que o sinal chegue ao destino com uma intensidade bem maior.

 

Nessas condições, o ESP8266 pode fazer tudo o que se espera dele, mesmo a uma grande distância.

 

Só tem um porém :

 

Quanto mais ganho tem uma antena direcional, mais crítico é o ajuste da direção para onde ela tem de apontar, e também menor é a faixa de frequência onde ela apresenta esse alto ganho.

 

Paulo

  • Curtir 2
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!