Nesta prática você vai aprender a montar com o NodeMCU…
NodeMCU – Como criar um Web Server e conectar a uma rede WIFI
Dificuldades em criar um servidor web com o NodeMCU para desenvolver projetos que envolvam controle de módulos e sensores através de página web? Então não deixe de ler esta postagem! Aqui você vai aprender os primeiros passos para criar um web server com o NodeMCU e conectá-lo a uma rede WiFi.
Como foi dito em nosso artigo NodeMCU – Uma plataforma com características singulares para o seu projeto ioT, esta plataforma é um concorrente bem a altura do Arduino. Suas características singulares a tornam bem atraentes para desenvolvimentos de projetos ioT, principalmente em projetos que necessitam de controle através de página web. O grande diferencial do NodeMCU é possuir WiFi nativo, ou seja, a placa pode se conectar a redes sem fio padrão 802.11 b/g/n.
Ao final dessa prática você estará conectado a uma rede sem fio e em seguida poderá se conectar a uma página web do servidor que vai estar rodando no NodeMCU.
Para esta postagem, utilizei apenas o NodeMCU com cabo micro USB para conectá-lo ao computador.
Para que a prática funcione, é necessário que você já esteja com a placa NodeMCU instalada no computador e que ela seja reconhecida pela IDE do Arduino. Se ainda não tem a IDE do Arduino instalada e configurada para o NodeMCU, acesse os links abaixo e em seguida retorne para continuar:
Arduino – Instalação e Configuração da IDE no Windows
NodeMCU – Instalação no Windows
NodeMCU – Configurando a IDE do Arduino
No código fonte, em “const char* ssid”, você deve colocar o nome da sua rede WiFi (dentro das aspas duplas) e em “const char* password”, coloque a senha da sua rede WiFi (também dentro das aspas duplas). Veja na imagem abaixo as informações destacadas:
O código para testes está abaixo, basta copiá-lo, colar na IDE, editar com as informações da sua rede sem fio, salvar e carregar:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
#include <ESP8266WiFi.h> //INCLUSÃO DA BIBLIOTECA NECESSÁRIA PARA FUNCIONAMENTO DO CÓDIGO const char* ssid = "nome_da_sua_rede_WIFI"; //VARIÁVEL QUE ARMAZENA O NOME DA REDE SEM FIO EM QUE VAI CONECTAR const char* password = "senha_da_sua_rede_WIFI"; //VARIÁVEL QUE ARMAZENA A SENHA DA REDE SEM FIO EM QUE VAI CONECTAR WiFiServer server(80); //CASO OCORRA PROBLEMAS COM A PORTA 80, UTILIZE OUTRA (EX:8082,8089) E A CHAMADA DA URL FICARÁ IP:PORTA(EX: 192.168.0.15:8082) void setup() { Serial.begin(115200); //INICIALIZA A SERIAL delay(10); //INTERVALO DE 10 MILISEGUNDOS Serial.println(""); //PULA UMA LINHA NA JANELA SERIAL Serial.println(""); //PULA UMA LINHA NA JANELA SERIAL Serial.print("Conectando a "); //ESCREVE O TEXTO NA SERIAL Serial.print(ssid); //ESCREVE O NOME DA REDE NA SERIAL WiFi.begin(ssid, password); //PASSA OS PARÂMETROS PARA A FUNÇÃO QUE VAI FAZER A CONEXÃO COM A REDE SEM FIO while (WiFi.status() != WL_CONNECTED) { //ENQUANTO STATUS FOR DIFERENTE DE CONECTADO delay(500); //INTERVALO DE 500 MILISEGUNDOS Serial.print("."); //ESCREVE O CARACTER NA SERIAL } Serial.println(""); //PULA UMA LINHA NA JANELA SERIAL Serial.print("Conectado a rede sem fio "); //ESCREVE O TEXTO NA SERIAL Serial.println(ssid); //ESCREVE O NOME DA REDE NA SERIAL server.begin(); //INICIA O SERVIDOR PARA RECEBER DADOS NA PORTA DEFINIDA EM "WiFiServer server(porta);" Serial.println("Servidor iniciado"); //ESCREVE O TEXTO NA SERIAL Serial.print("IP para se conectar ao NodeMCU: "); //ESCREVE O TEXTO NA SERIAL Serial.print("http://"); //ESCREVE O TEXTO NA SERIAL Serial.println(WiFi.localIP()); //ESCREVE NA SERIAL O IP RECEBIDO DENTRO DA REDE SEM FIO (O IP NESSA PRÁTICA É RECEBIDO DE FORMA AUTOMÁTICA) } void loop() { WiFiClient client = server.available(); //VERIFICA SE ALGUM CLIENTE ESTÁ CONECTADO NO SERVIDOR if (!client) { //SE NÃO EXISTIR CLIENTE CONECTADO, FAZ return; //REEXECUTA O PROCESSO ATÉ QUE ALGUM CLIENTE SE CONECTE AO SERVIDOR } Serial.println("Novo cliente se conectou!"); //ESCREVE O TEXTO NA SERIAL while(!client.available()){ //ENQUANTO CLIENTE ESTIVER CONECTADO delay(1); //INTERVALO DE 1 MILISEGUNDO } String request = client.readStringUntil('\r'); //FAZ A LEITURA DA PRIMEIRA LINHA DA REQUISIÇÃO Serial.println(request); //ESCREVE A REQUISIÇÃO NA SERIAL client.flush(); //AGUARDA ATÉ QUE TODOS OS DADOS DE SAÍDA SEJAM ENVIADOS AO CLIENTE client.println("HTTP/1.1 200 OK"); //ESCREVE PARA O CLIENTE A VERSÃO DO HTTP client.println("Content-Type: text/html"); //ESCREVE PARA O CLIENTE O TIPO DE CONTEÚDO(texto/html) client.println(""); client.println("<!DOCTYPE HTML>"); //INFORMA AO NAVEGADOR A ESPECIFICAÇÃO DO HTML client.println("<html>"); //ABRE A TAG "html" client.println("<h1><center>Ola cliente!</center></h1>"); //ESCREVE "Ola cliente!" NA PÁGINA client.println("<center><font size='5'>Seja bem vindo!</center>"); //ESCREVE "Seja bem vindo!" NA PÁGINA client.println("</html>"); //FECHA A TAG "html" delay(1); //INTERVALO DE 1 MILISEGUNDO Serial.println("Cliente desconectado"); //ESCREVE O TEXTO NA SERIAL Serial.println(""); //PULA UMA LINHA NA JANELA SERIAL } |
Após o arquivo ser carregado no NodeMCU, abra a janela serial da IDE. Se a conexão for realizada com sucesso, as seguintes mensagens: “Conectado a rede sem fio ‘Nome da sua rede’, ‘Servidor iniciado’ e ‘IP para se conectar ao NodeMCU: http://’endereço’ ” vão aparecer no monitor, como mostra a figura abaixo:
OBS: Para visualizar o resultado acima, não esqueça de mudar no rodapé da serial a velocidade para 115200, conforme a imagem abaixo:
Deixe a janela serial aberta. Em seguida abra o navegador e digite o endereço de IP que o monitor serial forneceu para que você possa se conectar ao NodeMCU. Uma página similar à imagem abaixo será aberta:
Ao retornar no monitor serial, veja que novas informações de conexão surgiram na janela, conforme mostra a imagem abaixo:
Para esta postagem, deixei que o NodeMCU obtivesse um endereço de IP dinâmico, contudo, nas próximas postagens será definido um IP estático para a placa.
Gostou desta prática? Então deixa seu comentário, dúvida ou sugestão aí embaixo!
Loja online: https://www.masterwalkershop.com.br
Fan page no Facebook: https://www.facebook.com/masterwalkershop
Nos ajude a espalhar conhecimento clicando no botão de compartilhar (f Like) que está mais abaixo.
Obrigada e até a próxima!
Seu feedback é muito importante! Que tal dar uma nota para esta postagem?! Faça sua avaliação aqui embaixo.
Postagem anterior: NodeMCU – Enviando códigos clonados do Controle Remoto (Método RAW)
Próxima postagem: NodeMCU – Definindo um IP fixo para sua placa
Greice Muito bom seu conteúdo, Parabéns!
OLA TEM COMO ALGUEM ME AJUDA COM O PROGRAMA COM NODEMCU SENDO QUE UM NOCEMCU ESTEJA COM UM SENSOR MQ E QUANDO RECEBER A PRESENCA DO GAS ELE ATUE UM RELE EM OUTRO NODEMCU.
A página não se carrega sozinha, tenho que ficar atualizando para receber novos dados. Como resolvo
Olá Thiago.
Agradeço pelo comentário!
De fato neste tutorial não foi implementado o recurso de refresh da página.
Fica a cargo do usuário implementar novas funções no código.
Seria possível o nodemcu receber comandos por html através de outra rede de wifi. O nodemcu na rede wifi domiciliar e um smartphone utilizando a rede móvel de uma operadora? Ou seja em redes diferentes e a longa distância!
Olá Paulo.
Agradeço pelo comentário!
É possível sim.
A montagem funcionou perfeitamente. Qual alteração devo fazer no código para que o endereço IP seja enviado para o browser dentro da página HTML criada? Obrigado.
Olá tudo bem? copiei tudo mas não conectou. Deu um erro “‘WiFi’ does not name a type” ao compilar. Meu Node é um V3 LoLin. Poderia me ajudar por favor.
Olá Conceição.
Agradeço pelo comentário!
Provavelmente está faltando a biblioteca em seu IDE.
Verifique se o pacote de placas + bibliotecas está instalado no IDE do Arduino.
Muito obrigado pela dica, Euler !
Por nada!
Segue a gente lá:
Fan page no Facebook: https://www.facebook.com/masterwalkershop
Página no Instagram: https://www.instagram.com/masterwalkershop/
Parabéns pela aula e pela presença nos comentários, Euler !
Assim que eu voltar de viagem, vou testar no ESP8266.
Como ainda faltam alguns dias pra eu voltar, queria ir trabalhando na elaboração da página HTML. Você tem alguma dica de onde eu posso procurar material de estudo ?
Pretendo partir dessa sua tela, mas adicionar alguns botões e 4 campos para texto.
Mas o principal detalhe, é que eu gostaria de arrumar esses botões na tela, de modo que alguns fiquem lado a lado, com 3 botões em uma mesma linha.
Eu nunca fiz nada em HTML até hoje, mas creio que consigo copiar.
Olá Anibal.
Agradeço pelo comentário e reconhecimento!
Recomendo que você estude sobre desenvolvimento web.
Um local em que você pode gastar pouco e ter material de qualidade para aprender sobre desenvolvimento web e sobre vários outros assuntos relacionados a tecnologia é na Udemy:
https://www.udemy.com/courses/development/web-development/
No link acima você pode ver os vários cursos relacionados a desenvolvimento web. Para escolher qual curso fazer, basta verificar o conteúdo tratado em cada um deles, a reputação do professor/professores do curso, quantos alunos estão inscritos e as avaliações dadas pelos alunos.
Acredito que já seja um começo.
Estamos com um problema em nosso Tcc, onde o a programação roda em um pc mas em outro não, com as mesmas bibliotecas baixadas.
Também estamos com dificuldade em desenvolver um webserver com o esp8266, estamos utilizando como entrada o dht11 e mq-7 pois queremos expor os seus valores no “site”. Consegue nos ajudar de alguma forma ? somos da Etec, do curso de eletrônica.
Olá Gustavo.
Agradeço pelo comentário!
Como assim a programação roda em um PC e em outro não?|
Poderia fornecer mais detalhes a respeito do problema que está tendo?
olá gostaria de fazer o seguinte , comunicar o arduino uno com o nodemcu e pegar dados do uno e mandar para a pagina web e possivel?
Olá João.
Agradeço pelo comentário!
Sim é possível, porém seria um gasto desnecessário no uso do Arduino + NodeMCU.
O ideal é usar o NodeMCU sozinho para este tipo de projeto ou utilizar o Arduino + o ESP8266 ESP01:
https://www.masterwalkershop.com.br/modulo-wifi-esp8266-esp-01
O meu funcionou perfeitamente, minha palca WeMos D1 CHIP:ESP8266, uma duvida de leigo como posso acoplar um sensor de temperatura ou um medidor de fluxo de agua para mer os resultado na pagina ou no thingspeak.
desde ja agradeço.
Olá Bruno.
Agradeço pelo comentário!
No momento não temos nenhum tutorial relacionado a este tipo de prática que deseja implementar.
É só colocar pra ele imprimir a variável da “temperatura” com esse comando:
client.print(temperatura);
E mesclar esse código dessa página, com o de medidor de temperatura comum encontrado na internet. Já fiz isso.
Eu to tentando acionar um rele mas nao to conseguindo tem como me ajudar
Olá Igor.
Agradeço pelo comentário!
Recomendo que veja as postagens no Blog relacionadas a acionamento de módulo relé para que possa ter uma base para iniciar a implementação do seu projeto.
Primeiramente, obrigado pelo tutorial. Eu tenho um sketch arduino que, resumindo, solicita dados da web para mostrar Hora e Data em um display tft e, no sketch, além do SSID e Senha, tem a seguinte linha: #define HTTP_SERVER “http://10.0.0.159/iotServer.php” mas, logicamente, esse endereço não me serve, portanto, faço a pergunta: o que devo colocar nessa linha, entre aspas, pois entendo que deve ser um servidor brasileiro mas, não entendo qual ou o que.
Parte do sketch:
// — HTTP CLIENT ————————————————————————
// This is my intranet server, which is running a REST API. You’ll need one of these.
#define HTTP_SERVER “http://10.0.0.159/iotServer.php”
typedef enum {TIME_INFO, DATE_INFO} DatetimeInfo;
HTTPClient http;
Muito obrigado
Olá Daniel.
Agradeço pelo comentário!
A linha em questão é uma página WEB que provavelmente mostra as informações de data e hora.
Você deve criar uma página substituta ou substituir o IP 10.0.0.159 pelo IP em que foi atribuído ao seu NodeMCU e utilizar a página que já está criada. Lembrando que você deverá ter um webserver local sendo executado para acessar a página.
Não estou conseguindo conectar a pagina web com o endereço de IP disponibilizado. A “página não foi encontrada”.
Olá Yara.
Agradeço pelo comentário!
Refaça o tutorial e se possível, crie um ponto de acesso no seu smartphone, insira informações do mesmo dentro do código (const char* ssid e const char* password) e em seguida tente se conectar. Se funcionar, o problema está na conexão com o seu roteador.
Euler, parabéns pelos tutoriais. Ótimas dicas para iniciantes como eu. Gostaria de tirar uma dúvida, estou usando a placa Wemos D1 R2, vi que você postou o link desse tutorial para conexão wi-fi com essa placa em um dos tutoriais seus da Wemos. Porém não consigo acesso a porta para mostrar o endereço de IP, já mudei a velocidade para 9600 e 115200 conforme você disse nos comentários e mesmo assim não aparece, fica em branco. O que devo fazer para aparecer? Agradeço a ajudar!
P.S: Peço a você fazer quando tiver um tempo um tutorial de como usar Infravermelho com a placa Wemos R1 e D2, é um ótimo projeto e que com certeza traria muitos visitantes ao seu site. Obrigado e sucesso amigo! =D
Olá Martins.
Agradeço pelo comentário!
No código você está preenchendo as informações da rede WiFi em que a placa irá conectar? Está mantendo a velocidade de 115200 ou 9600 no código?
O código desta postagem é compatível com a Wemos.
Sobre o infravermelho: você diz clonar controle remoto infravermelho?
Olá, Euler! Em respostas de suas perguntas:
“No código você está preenchendo as informações da rede WiFi em que a placa irá conectar? Está mantendo a velocidade de 115200 ou 9600 no código?”
Nessa linha (Serial.print(“http://”);) devo colocar o endereço, é isso? Não cheguei a colocar, pensei que seria gerado de forma automático. Obrigado! Irei tentar aqui. Em relação as velocidades eu cheguei a testar com os dois valores que você citou e não deu certo, acredito que o erro foi exatamente essa linha que citei anteriormente.
“Sobre o infravermelho: você diz clonar controle remoto infravermelho?”
Sim, clonar um controle remoto por completo de um ar condicionado. Na internet tem muitos projetos com TVs, porém com ar condicionados não encontrei nenhum. Alguns dizem que dá certo com o código de clonagem da TV, porém não dá. O controle do ar condicionado manda ao Arduino as instruções completas do ar, não somente a específica do botão, por isso é preciso uma codificação diferença, mudança de valores de buff, etc… Acho que seria legal você criar em seu blog um tutorial sobre isso, seria inovador.
Abraço e obrigado pelas respostas!
A linha (Serial.print(“http://”);) não diz respeito a velocidade da comunicação serial. A linha responsável por isso é a Serial.begin(115200);.
As informações da sua rede WiFi são preenchidas nas linhas:
const char* ssid = “nome_da_sua_rede_WIFI”;
const char* password = “senha_da_sua_rede_WIFI”;
Não tenho experiência na clonagem de teclas de controle remoto de ar condicionado, mas posso te afirmar que é bem complicado de ser clonado. Controle remoto de ar condicionado costuma não ser possível clonar as teclas a partir do Fotorreceptor IR utilizado com o Arduino.
Olá, por acaso teria um programa similar para o ESP32? Pois a biblioteca ESP8266WiFi.h não existe para a placa ESP32.
Acontece o mesmo comigo…
Pessoal eu esstou tentando enviar dados a minha pagina php em um servidor nas nuvens mas não consigo. Estou usando o Arduino Uno 3 e o ESP8266 juntos.
Já consigo conectar co WiFi mas não consigo enviar os dados. Se houver alguem disposto a me ajudar posso enviar os fontes php e uno.
Olá Euler!
Copiei/ colei o código e compilou certinho, porém estou me deparando com um problema. A conexão com a rede local ocorre normalmente, e o monitor serial mostra a URL (endereço IP) que eu deveria utilizar para acessar o servidor. Entretanto, quando jogo o endereço no navegador e tento acessar, aparece um erro dizendo que não foi possível encontrar a página. Já desativei o firewall, testei em vários navegadores diferentes, redes diferentes, portas diferentes (mudei da porta 80 para a 8089 e 8082) e nada funciona! O que pode estar acontecendo?
P.S.: Estou utilizando um ESP32 e SO Windows 10
Caro Euler
Tudo funcionando quando acesso de um pc , quando acesso de um celular o módulo trava me forçando a dar um reset.
Tem alguma ideia do que possa estar acontecendo??
Obrigado
Antonio
Fala brother, cara estou tendo um erro sinistro, é comum o nodemcu travar em alguns instantes e “morrer” literalmente tendo que reseta-lo? tenho um webserver , wifi autoconect e 4 comandos..
tenho display oled tb.. tem relato de incompatibilidade?
Olá Filipe Paceli.
Está alimentando seu NodeMCU com fonte de quantos amperes?
Euler ;
Copiei o código e conferi mas acontece o seguinte:
1. No monitor serial não aparece NADA!.
2. No navegador tudo ocorre certinho.
Obs. Tinha conhecido o ip pelo comando AT.
Podes me ajudar?
Obrigado
Rodolfo
Olá José Rodolfo Durante.
Verificou se a velocidade da serial está correta? Testou o baudrate com 9600 e 115200?
Não consigo conectar, meun roteador é junto ao modem da Net, pode ter alguma complicação?
tentei o IP fixo tambem, nada não acessa.
podem dar uma dica, já estou desconfiando do Node Msu, no entanto consigo fazer ele funcionar com programas basicos, acender led ligar rele, mas por comando via skech
Olá Giba.
Recomendo que faça o teste com uma outra conexão de internet que não seja NET para comprovar se é o NodeMCU que está com defeito.
Este código que disponibilizei na postagem é totalmente funcional.
Mestre Euler, funcionou na rede WiFi do smartfone, obrigado, pergunta, como fazer funcionar com o modem Wifi da NET, porque dá errado? conhece algum artigo?
Verifique junto a operadora se existe algum tipo de bloqueio no modem WiFi deles e se existir, qual o procedimento a ser feito para que possa incluir o NodeMCU na sua rede.
Olá, boa noite!
Estou com um problema na hora que finaliza o processo, não aparece o nome da minha rede nem o Ip, não aparece nada no monitor serial apenas fica loop contínuo de pontos.
Por favor, se alguém puder me ajudar ou auxiliar agradeço desde já
Estou tendo o mesmo problema, caso consiga resolver, poderia me contatar? Eng_thales@outlook.com
Vou continuar procurando soluções, caso encontro, replico aqui.
Boa noite,
Fiz o teste e funcionou. Mas como acesso de uma rede externa?
Olá Bruno.
Para acessar externamente, recomendo que pesquise por NAT(redirecionamento de portas) ou port forward.
Olá Euler, o meu node mcu conecta somente quando uso meu celular como ponto de acesso, o que fazer?
Olá Carlos.
Já verificou quais os padrões de rede WiFi seu roteador oferece (802.11 b/g/n)? Verifique se algum destes está habilitado ou se ambos estão. Caso esteja tudo OK com o roteador e ainda assim não consiga conectar, recomendo que instale novamente o firmware no NodeMCU.
Nao estou conseguindo conectar a rede… Coloquei a rede e senha… O programa para na instrucao While{}, fica em loop e nao sai mais, fica tentando conectar mas nao conecta. O que pode estar acontecendo?
Olá Giovani Milanezi.
Se possuir um smartphone Android, crie um ponto de acesso WiFi (Tethering e acesso portátil) com ele e deixe habilitado. Em seguida coloque os dados (nome da rede e senha) deste ponto de acesso no código e tente se conectar.
É ideal que faça os testes em uma rede sem fio alternativa para verificar se não é o roteador que está barrando a conexão do NodeMCU.
Faça este teste e dê um retorno se funcionou.
Se for o roteador que está narrando o que é que eu posso fazer pq o meu conecta no Wi-Fi mas quando eu tento abrir no navegador eu não consigo acessar, mas quando eu uso o exemplo do acess point ele abre normalmente no navegador
Olá Justino.
Seu NodeMCU é a versão v2 ou a v3(Lolin)?
Como saber a versão? quais as diferenças básicas entre versões?
Olá Henrique.
NodeMCU V2: geralmente é fabricado pela Amica e o tamanho da placa é compatível com o espaçamento (2.54mm) dos furos de uma protoboard.
NodeMCU V3: fabricado pela Lolin e o tamanho da placa (largura) não é compatível com o espaçamento (2.54mm) dos furos de uma protoboard, contudo, possui algumas bases próprias para facilitar a conexão aos pinos da placa.
Uma das bases para a versão da Lolin pode ser vista no link abaixo:
https://blogmasterwalkershop.com.br/embarcados/nodemcu/base-adaptador-para-o-nodemcu-v3-da-lolin/