Web Server com o módulo ESP8266 NodeMCU e DHT22
O módulo ESP8266 NodeMCU é uma placa da família ESP8266, sendo umas das mais completas e simples de usar. Neste post vamos mostrar como criar um web server com ESP8266 e enviar dados do sensor de temperatura DHT22.
O módulo ESP8266 NodeMCU já tem incorporado um módulo ESP12-E com antena embutida, e ainda conta com um conversor USB-TTL (CH340), facilitando a comunicação e transferência de programas.
Além disso tem um formato que facilita o uso em uma protoboard, permitindo acesso às 11 portas (GPIO) do módulo. Tudo isso significa que você não vai precisar de um microcontrolador adicional como o Arduino, PIC ou Raspberry para criar os seus projetos.
Pinagem módulo NodeMCU
A imagem abaixo ilustra a pinagem do módulo ESP8266 NodeMCU. Com ele podemos usar os pinos da mesma maneira que usamos, por exemplo, no Arduino, com interface SPI, I2C, PWM, etc. Temos ainda os botões RST (Reset) e o Flash, utilizado para upgrade de firmware do módulo.
O conector de alimentação é micro-usb, e serve também para comunicação com o computador. A programação pode tanto ser feita em Lua, como também com a própria IDE do Arduino, com algumas modificações na parte de gerenciamento da placa.
A instalação do módulo ESP8266 NodeMCU no Windows foi feita de forma automática, com o módulo sendo reconhecido na porta COM13 como um dispositivo USB-Serial CH340. Caso seja necessário, você encontra os drivers para o CH340 neste link.
Instalação do ESPlorer
O programa que vamos utilizar neste post foi feito em Lua, e para enviar este programa para o ESP8266 NodeMCU vamos precisar de um aplicativo que faça essa comunicação com o módulo. Um dos mais usados é o ESPlorer, que você pode baixar neste link. Com o ESPlorer a criação e transferência de programas para o módulo ESP8266 é bastante simplificada, e você tem a opção de salvar programas, enviar comandos especiais ao módulo, resetar, formatar, etc.
O programa não precisa de instalação, e basta você executar o arquivo ESPlorer.bat para que a interface seja carregada. A única exigência é a presença do java (download) na máquina.
Na tela principal, temos do lado esquerdo a área de programação, e do lado direito uma console, onde é mostrado o status de comunicação com o módulo, assim como eventuais avisos e mensagens de erro.
Para fazer a comunicação com o módulo NodeMCU selecione a porta COM na parte superior do ESPlorer (no nosso caso, a COM13), selecione a velocidade de comunicação (padrão 9600) e clique em Open:
Pressione o botão RST do módulo e, se estiver tudo ok, o mesmo deve responder com as informações básicas referentes ao firmware instalado:
Com o ESPlorer configurado e o módulo funcionando, podemos agora montar o circuito que vai coletar as informações de um sensor de temperatura DHT22 e enviar para uma página web.
Circuito módulo ESP8266 NodeMCU
Monte o circuito abaixo, conectando o pino de dados do DHT22 à porta 4 do NodeMCU (GPIO02). A alimentação do sensor de temperatura será feita pelos pinos 3.3V e GND do módulo.
Isso é tudo que precisamos na parte do hardware. Conecte agora o cabo micro-usb ao NodeMCU para ligar o circuito e iniciar o processo de transferência de programas.
Instalação biblioteca DHT22 Lua
Antes de transferir o programa que vai criar o webserver no módulo NodeMCU, precisamos da biblioteca do DHT22 para o Lua. Para instalar a biblioteca, acesse este link, e clique sobre o arquivo dht22_min.lua:
Na tela seguinte, selecione a opção RAW, no canto direito da página
O código da biblioteca, “limpo”, será exibido no browser. Copie todo o código e cole no ESPlorer, de preferência em uma nova aba. Em seguida, clique em Save to ESP:
Na janela seguinte, coloque o nome do arquivo como dht22_min.lua e clique em Save.
O programa será então gravado localmente na sua máquina, e também transferido para o ESP8266 NodeMCU.
Vamos conferir para ver se o arquivo está lá mesmo ? No ESPlorer, acesse a aba Commands, depois clique em List files:
Acompanhe o resultado na console, indicando que o arquivo dht22_min.lua foi transferido corretamente:
Programa Web Server com ESP8266
Agora copie o programa abaixo em uma nova aba do ESPlorer. Ele faz a leitura dos dados do DHT22 e cria um web server para exibição de uma página com as informações de temperatura e umidade. Na linha 7, troque os campos NOME_REDE e SENHA_REDEpelas informações da rede wifi à qual o módulo vai se conectar.
-- Programa: Web Server com ESP8266 NodeMCU e DHT22 -- Autor: Arduino e Cia -- Baseado no programa original de www.beerandchips.net -- Define as configuracoes de rede wifi.setmode(wifi.STATION) wifi.sta.config("NOME_REDE","SENHA_REDE") wifi.sta.connect() -- Definicao de pino do DHT22 PIN = 4 -- data pin, GPIO2 dht22 = require("dht22_min") chipserial = node.chipid() -- Cria e roda o web server srv=net.createServer(net.TCP, 4) print("Server created on " .. wifi.sta.getip()) srv:listen(80,function(conn) conn:on("receive",function(conn,request) print(request) -- Le as informacoes do sensor de temperatura dht22.read(PIN) t = dht22.getTemperature() h = dht22.getHumidity() conn:send('<html>') conn:send('<title>NodeMCU - Arduino e Cia</title></head>') conn:send('<meta http-equiv="refresh" content="5">') conn:send('<body bgcolor="#ffffff">') conn:send('<center>') conn:send('<table bgcolor="#0000ff" width="90%" border="0">') conn:send('<tr>') conn:send(' <td><font size="3" face="arial, helvetica" color="#ffffff"><center>Temperatura</center></font></td>') conn:send('</tr>') conn:send('<tr>') conn:send(' <td><font size="7" face="arial, helvetica" color="#ffffff"><center>'..((t-(t % 10)) / 10).."."..(t % 10)..'°C</center></font></td>') conn:send('</tr>') conn:send('<tr>') conn:send(' <td><font size="3" face="arial, helvetica" color="#ffffff"><center>Umidade</center></font></td>') conn:send('</tr>') conn:send('<tr>') conn:send(' <td><font size="5" face="arial, helvetica" color="#ffffff"><center>'..((h - (h % 10)) / 10).."."..(h % 10)..'%</center></font></td>') conn:send('</tr>') conn:send('</table>') conn:send('</center>') conn:send('</body></html>') end)
Pressione a tecla Send to ESP e aguarde até que o programa seja transferido.
Para a parte final, que é o teste em um browser, vamos precisar do endereço IP atribuído ao módulo. Na caixa de seleção do lado direito, abaixo da console, escolhe a opção =wifi.sta.getip() e clique em Send. O endereço IP será exibido na console. No nosso caso, o endereço IP recebido foi 10.0.0.110:
Utilize este IP em um browser, digitando-o na barra de endereços. Em poucos instantes as informações de temperatura e umidade do DHT22 serão enviadas pela placa:
Gostou do post Web Server com ESP8266? Confira também outros posts sobre NodeMCU aqui no Arduino e Cia!
Bom dia, muito bom o artigo! É possivel adicionar um relé shield e o mesmo ser acionado caso atinja determinada temperatura?
Obrigado!
Boa noite,
É possível sim. Estou desenvolvendo um post exatamente sobre isso. 🙂
Abraço!
Muito bacana, minha intenção é justamente essa, eu vi alguns tutoriais, pelo que entendi, daria para fazer um termostato usando esp-01, visto que são necessarios apenas dois pinos digitais, na hora que sobrar um tempo quero fazer esse teste.
Bom dia!
Publiquei recentemente um post sobre o assunto, que apesar de não usar o ESP8266 (ainda), faz o acionamento do relé de acordo com a temperatura:
http://www.arduinoecia.com.br/2016/06/arduino-dht11-controle-de-rele-temperatura.html
Abraço!
Adilson
Boa noite! ótimo post, mas fiquei com uma dúvida, como faria para acessar essa temperatura de a outra rede(sem estar na mesma rede) usando por exemplo a internet do celular.
Boa noite,
Você pode criar uma "regra" no seu roteador, apontando a porta 80 para o módulo NodeMCU, por exemplo.
Abraço!
Está dando erro na hora de upar o servidor para o nodemcu:
SERVER.lua:49: 'end' expected (to close 'function' at line 18) near ''
Boa tarde,
Mas o programa funciona ? O meu ESPlorer também apresenta alguns alertas quando eu vou transferir o programa.
Abraço!
Uma dúvida: qual a faixa de temperatura medida com este componente?
Boa tarde,
A faixa é de -40 a 125°C. Eu tenho um post sobre o DHT22, dê uma olhada, por favor:
http://www.arduinoecia.com.br/2015/02/sensor-de-temperatura-e-umidade-dht22.html
Abraço!
Obrigado pelo ótimo conteúdo , porém encontrei alguns erros que não estão permitindo chegar ao resultado final que esta aqui.
Primeiro estou usando a versão do ESPlorer V0.2.0 rd3 (a sua é rc2).
Após copiar o texto do DHT22_min.lua para uma aba nova, e clicar em SAVE TO ESP, aparece uma msg de erro informando que é necessário um nome antes de salvar, ao invés de abrir um box para escolher ou digitar o nome.
Para ultrapassar este ponto, fui em SAVE TO DISK , salvei o mesmo com o nome dht22_min.lua, e depois cliquei em SAVE to ESP, e funcionou, e conferi que estava salvo no módulo.
Mesma coisa acontece com o webserver, que precisa de um nome para ser salvo no módulo. fiz a mesma coisa dando o nome de webserverdht.lua , salvando no disco e depois no módulo, e conferindo
Depois deste passo, tento conseguir o ip e recebo a resposta NIL.
Acredito que o modulo não tenha executado o programa enviado, e não conectando na minha rede.
Como indicar ao módulo que deve executar o programa?
Grato
Luiz
Oi Luiz,
Envie o programa para o NodeMCU e depois clique no botão RUN dentro do ESPlorer.
Abraço!
tentei refazer os passos , e percebi o seguinte erro:
webserverdht22.lua:49: 'end' expected (to close 'function' at line 18) near ''
Mesmo erro aqui.
Também a parte da biblioteca do dht22 dá uma msg
dht22_min.lua:1: table index is nil
Oi Luiz,
Veja se não há algum conflito com algum programa que já esteja rodando no NodeMCU. Recomendo apagar tudo e começar do zero.
Abraço!
Will your software work for a DTH11?
Thanks
Joe
Hi !
No, only for DHT22 and DHT21. For DHT11, please use this one: http://www.barissanli.com/electronics/nodemcu.php#_Toc424446169
Best regards!
Ha possibilidade de acessar as leitura em SNMP sem o arduino, somente o nodemcu ?
Oi Celso,
Dependendo do que você precisa, pode "dispensar" o Arduino sim, e utilizar só o NodeMCU.
Eu não fiz nenhum projeto com SNMP e NodeMCU, mas creio que esse artigo aqui pode te ajudar: https://bigdanzblog.wordpress.com/2015/04/29/snmp-environmental-monitoring-using-esp8266-based-sensors/
Abraço!
Adilson
Boa tarde amigo, passei o programa para o modulo. Porem quando copio o IP para o browser aparece esse erro.
o dispositivo ou recurso ( 192.168.1.11) não esta configurado para aceitar conexões na porta " O serviço World Wide Web(HTTP)"
Você sabe como resolver isso ??? obrigado
Boa noite, parabéns pelo post.
Uma curiosidade, é possivel configurar o ESP para que usuário antes de configurar a rede, conecte-se em um IP de configuracao, para que possa entrar com a rede e senha em que o dispositivo ira rodar? Isso de forma que o usuário não tenha acesso ao código, entendeu?
Obrigado
Bom dia,
Essa configuração seria feita via monitor serial ? Pq se você for criar uma tela de configuração, para acessar você já precisaria da comunicação TCP/IP com o ESP.
Mas eu acho que entendi a sua pergunta. Você quer utilizar o ESP em várias redes diferentes, sem ter que mudar o programa para cada uma delas.
Uma sugestão é você usar o comando do ESP para rastrear as redes existentes, e então mostrar essas redes, por exemplo, em um display LCD.
Dessa forma, o usuário seleciona a rede e entra com a senha. Dá um certo trabalho mas é possível.
Abraço e obrigado!
Oi,
É possível aplicar no ESP-01 ?
Olá,
É possível sim, vc provavelmente só terá que mudar algo em relação ás portas.
Abraço!
Boa noite!
Qual o comando no ESPlorer para apagar todos os arquivos do Esp826-E12 e recomeçar do zero?
Oi Roberto,
Utilize o botão "format" no lado direito do ESPlorer, ao lado da console.
Abraço!
Olá… É possivel simultaneamente gravar os dados em um cartao SD e enviar as informações via wireless?
Oi Luis,
Sim, os pinos de ligação são completamente diferentes, então nada impede que você coloque um adaptador para cartão SD no circuito e grave esses dados.
Abraço!
Boa noite,
estou com um problema na minha implementação. Na minha implementação, o sistema liga um led de a temperatura for maior que 20ºC. O Problema é que o sistema aciona o led somente se tiver com a página do navegador acessando á página web do esp. Caso não esteja, o led não acende. Tem como fazer essa validação: realizar a leitura do sensor e acender o led mesmo que não esteja com á página aberta?
Boa noite,
Estranho isso. Posta o código pra gente dar uma olhada.
Abraço!
O MEU ACONTECE A MESMA COISA E A CONEXÃO FICA MUITO INSTAVEL TENHO QUE DESLIGAR E RELIGAR NOVAMENTE
Olha eu denovo! rs
Devido ao meu trabalho fiquei 08 meses sem mexer nos brinquedos…
Até voltei a comprar algumas peças, e estou esperando chegar para te enviar…
Você testou a distância que consegue com este? Soldar uma antena nele seria loucura?
Fala kbecao!! 🙂
Não sei se soldar uma antena seria uma boa ideia.. rs… ainda não testei, mas geralmente não tenho problemas de conexão.
Abraço!
Bom dia, gostaria de saber por que minha placa nodemcu não consegue se comunicar com o esplorer?
Boa noite, já estou a um tempo pesquisando uma maneira de ligar o NodeMCU esp8266 no arduíno MEGA, e não estou achando tópicos que quero, alguém sabe como fazer a ligação?
Olá. Dado a possibilidade de subir programas neste módulo, haveria necessidade de comprar tambem uma placa UNO/MEGA/NANO para iniciantes em Arduíno? Ou se recomenda uso apenas para projetos definitivos?
Boa noite,
Não há necessidade, você pode programar tudo direto no NodeMCU… mas… se você for iniciante, eu recomendo sim um Arduino Uno.
Abraço!
Qual seria o tamanho máximo da página ?
Bom dia,
A memória do NodeMCU é de 128K, com 4MB de armazenamento.
Abraço!
Bom dia, como posso conectar um ESP8266 com NodeMCU ao arduino?
Por exemplo, o ESP funciona apenas como adaptador serial(conectado ao rx e tx do arduino) e o arduino funciona como entrada e saida de dados.
Bom dia,
É possível fazer isso mas… o NodeMCU já tem um microcontrolador, você pode fazer (quase) toda a programação nele.
Abraço!
boa noite, gostaria de saber onde consigo tutorial e driver da placa de rede hr911105a 14/16.
obrigado,
josé carlos
Bom dia. Você teria algum exemplo similar a este feito na ide arduino?
Olá amigo,
Parabéns pelo post, muito bom.
Estou recebendo erro no código do webserver. Não estaria faltando fechar parêntesis nas linhas de código abaixo?
18 srv:listen(80,function(conn)
19 conn:on("receive",function(conn,request)
Outra pergunta de iniciante: o init.lua seria um código que é automaticamente executado pelo NodeMCU?
Obrigado.
Alberto Branquinho
Boa tarde, fiz tudo como indica em cima, mas na altura que faço o send do =wifi.sta.getip() ele dá me o ip mas depois no browser não consegue abrir? Qual será o problema? é necessário abrir alguma porta no router ou algo semelhante a isso?
Desde já obrigado pela excelente explicação.
Cumprimentos
Oi José,
Você consegue dar um "ping" nesse endereço que ele está mostrando ?
Abraço!
Adilson
estou tento dificuldade na hora de fazer o modulo se comunicar com a maquina. aparece o seguinte erro, na hora que aperto rst…
Communication with MCU..Got answer! Communication with MCU established.
AutoDetect firmware…
Can't autodetect firmware, because proper answer not received (may be unknown firmware).
Please, reset module or continue.
k
alguem pode me ajudar::
Estou tendo o mesmo problema, alguma solução?
Boa tarde porque não consigo abrir ele na WEB ?
Posso usar qualquer outra versão do ESP8266 para criar um web server com sensor DHT22 ou qualquer outros sensores?
Oi Pedro,
Na maioria dos ESP8266 sim. Alguns tem limitação de portas, como o ESP-01, mas vc consegue realizar a maioria das tarefas.
Abraço!
Adilson
Olá, estou com um problema estranho, acabei de adquirir o ESP-12 e quando eu
conecto no PC ele é identificado mas quando clico em Open no ESplorer ele não
obtem as informações da placa e se eu aperto o rst aparece um monte de caracteres
o que eu faço? poderia ser que o modulo esta com defeito?
Boa tarde.
Não seria necessário colocar um resistor de 10k junto ao Dht22?
Boa tarde,
Sim, eu já vi isso em alguns circuitos. No meu funcionou normalmente sem o resistor.
Abraço!
Adilson
Olá boa tarde, como identifico IP da ESP caso esteja programando com a IDE do arduino ?
Boa tarde,
Você pode inserir um comando no programa para mostrar o IP obtido através do Serial Monitor.
Abraço!
Adilson
Bom dia, muito legal o tutorial, eu estou desenvolvendo um projeto de IoT e tenho uma dúvida, consigo utilizar esse módulo com uma placa Attiny85?! pensando em um projeto compacto?!?! Obrigado!
Oi Felipe,
Entendi.. mas nesse caso, eu usaria apenas o NodeMCU, já que ele tem a parte de microcontrolador e wifi, tudo na mesma placa.
Abraço!
Adilson
Bom dia amigo, primeiramente te parabenizar por este post, eu estava planejando fazer isso com arduino + dht22 + 4 displays de 7 segmentos, mas dessa forma vai sair muito mais simples aqui no trabalho temos uma TV q exibe diversas informações, já vou exibir nela… uma pergunta, você poderia me informar se tem como eu salvar esses dados ai no banco de dados? vou precisar salvar 1 vez pela manhã e outra pela tarde!!!
Desde já muito obrigado!
Obrigado pelo post. Mas ao tentar usar o ESPlorer tive problemas o prog. Ele se fecha toda vez que conecto a COM. Já verifiquei a versão java e está tudo certo e atualizado. Tens alguma ideia do que pode ser?
Oi MFrank,
Essa vou ficar te devendo. Já usei o ESPlorer em pelo menos 3 máquinas diferentes e não tive problemas. Vamos ver se algum outro leitor aqui do blog consegue te ajudar.
Abraço!
Adilson
Parabéns pelo post!! tudo muito bem explicadinho e conciso. Só uma dúvida… qual o nome do app/site que vocês usaram para fazer o esquema elétrico do node (imagem6)? Desde já agradeço 🙂
Bom dia!
Obrigado. O esquema elétrico montamos no Fritzing (fritzing.org)
Abraço!
Adilson