Olá leitor, vamos dar continuidade a nossa série de postagens…
NodeMCU – Definindo um IP fixo para sua placa
Está com dificuldades em definir um IP estático para o seu NodeMCU? Então confira os passos abaixo e aprenda definir um IP fixo na placa para que não tenha mais problema de receber um novo IP toda vez que conectar o NodeMCU a rede sem fio.
Conforme já mencionado em outras postagens aqui do blog, uma das características que torna o NodeMCU uma plataforma bem interessante para o desenvolvimento de projetos ioT é o WiFi nativo da placa. Porém, hobbistas e makers que estão no “modo iniciante” com esta plataforma, acabam se deparando com uma coisa que pode ser um grande obstáculo na hora de criar seus primeiros protótipos: IP dinâmico no NodeMCU.
A maioria dos códigos disponíveis para que o NodeMCU se conecte a rede WiFi, deixam definido por padrão a obtenção de um IP dinâmico, ou seja, toda vez que o NodeMCU se conecta ao roteador da sua rede, será atribuído automaticamente um IP aleatório, recebendo, portanto, um endereço de IP diferente a cada conexão. Isso acaba se tornando um problema quando se desenvolve um projeto para controle de algo através de uma página web, pois para que haja troca de informação entre os dispositivos, eles “precisam saber para qual endereço mandar os dados”, e usando o IP dinâmico você terá de consultar o novo IP fornecido pelo roteador e atualizar esta informação no código fonte antes de acessar ou enviar informações para o NodeMCU.
Vamos então definir um IP fixo para o NodeMCU, pois assim, toda vez que ele for conectado à rede, o endereço de IP da placa permanecerá o mesmo.
Para isso, além do nome da sua rede e senha, você precisa de um endereço de IP livre (dentro da faixa de IP da sua rede), a máscara de sub-rede e o gateway da rede.
Se você não sabe como ter acesso a essas informações, sugiro que leia nosso post Descobrindo a faixa de IP do seu roteador, e em seguida retorne para continuar.
Para esta postagem, utilizei apenas o NodeMCU com cabo micro USB.
Para prosseguir, é necessário que você já esteja com o NodeMCU instalado no computador e que ele seja reconhecido 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
É necessário configurar o código fonte de acordo com a sua rede WiFi. Veja na imagem abaixo as informações destacadas:
- No “const char* ssid”, você deve colocar o nome da sua rede WiFi (dentro das aspas duplas);
- No “const char* password”, coloque a senha da sua rede WiFi (também dentro das aspas duplas);
- No “IPAdress ip”, coloque um endereço de IP livre da sua rede;
- No “IPAdress gateway”, coloque o endereço de gateway da sua rede;
- No “IPAdress subnet”, coloque as informações de máscara de sub-rede da sua rede.
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 58 59 60 61 62 63 |
#include <ESP8266WiFi.h> //INCLUSÃO DA BIBLIOTECA NECESSÁRIA PARA FUNCIONAMENTO DO CÓDIGO const char* ssid = "nome_da_sua_rede"; //VARIÁVEL QUE ARMAZENA O NOME DA REDE SEM FIO EM QUE VAI CONECTAR const char* password = "senha_da_sua_rede"; //VARIÁVEL QUE ARMAZENA A SENHA DA REDE SEM FIO EM QUE VAI CONECTAR //DEFINIÇÃO DE IP FIXO PARA O NODEMCU IPAddress ip(192,168,0,175); //COLOQUE UMA FAIXA DE IP DISPONÍVEL DO SEU ROTEADOR. EX: 192.168.1.110 **** ISSO VARIA, NO MEU CASO É: 192.168.0.175 IPAddress gateway(192,168,0,1); //GATEWAY DE CONEXÃO (ALTERE PARA O GATEWAY DO SEU ROTEADOR) IPAddress subnet(255,255,255,0); //MASCARA DE REDE 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 WiFi.config(ip, gateway, subnet); //PASSA OS PARÂMETROS PARA A FUNÇÃO QUE VAI SETAR O IP FIXO NO NODEMCU 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'>IP fixo definido com sucesso!</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 o navegador e digite o endereço de IP (IPAdress ip) que você inseriu no código para que você possa se conectar ao NodeMCU.
Uma página similar à imagem abaixo será aberta:
Utilizando estas configurações, seu NodeMCU sempre vai ter o mesmo endereço IP. Lembre-se de utilizar um endereço de IP com o final de numeração mais “alto”, por exemplo, 192.168.0.150, 192.168.0.200 ou 192.168.0.245, desta forma, não corre risco do IP definido para o NodeMCU, conflitar com o IP atribuído a outro dispositivo. Lembrando que o a numeração máxima para definição de IP é com o final 254 (por exemplo, 192.168.0.254).
Gostou deste tutorial? 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 – Como criar um Web Server e conectar a uma rede WIFI
Próxima postagem: Arduino – Utilizando o Módulo Receptor de Laser
Olá. Primeiramente, obrigado por postar o código. Implementei apenas a parte de IP fixo no meu ESP32 e verifiquei que ele funcionou e consigo fazer um ping para o endereço IP fixo definido, no entanto, a minha aplicação que envia dados MQTT para um servidor da Adafruit não consegue mais publicar os tópicos no servidor quando defino o IP fixo. Tudo volta a funcionar assim que retiro essa parte do IP fixo e deixo o DHCP do meu roteador definir o IP. Deixei o IP fixo com um valor bem alto para não dar conflito com outros dispositivos conectados à rede. No caso, defini o IP 192.168.0.200. Vocês sabem o que pode ser?
muito obrigado.
Luís!
Parabéns, código bem detalhado
Ainda sigo com um problema , ele gera o IP mas não consigo abrir ele no navegador, pode haver algum problema no roteador?, pois tentei utilizar o celular como roteador e obtive sucesso, mas não to conseguindo utilizar no roteador daqui de casa
Boa tarde não sei se entendi direito o seu artigo, mas gostaria de saber com oque vc escreveu eu consigo acessar de qualquer parte o meu esp8622?
como por exemplo eu estou no transito e gostaria de ligar o meu liquidificador para bater uma vitamina eu conseguiria ligar ele enquanto estou indo para casa< se eu estiver logado em outra rede wifi ?
sou iniciante nesse wifi e gostaria de aprender mais se vc tiver videos que ensine a fazer isso me marque e irie assitir muito obrigado fico no aguardo da sua resposta desde de ja agradeço pelo seu artigo
Olá Hugo.
Agradeço pelo comentário!
O que você procura é acessar externamente o seu ESP8266.
Aqui no Blog temos tutoriais relacionados ao Blynk e que vai permitir você fazer isso que deseja:
https://blogmasterwalkershop.com.br/blynk/conhecendo-o-blynk/
Outra coisa, tem como eu alterar o endereço do web server para o que eu quiser? Por exemplo, nesse caso descrito acima, para acessar a página, é preciso saber o IP do NodeMCU. Mas se eu quiser colocar o nome do projeto na barra de endereços para acessar essa página? É possível?
Estou fazendo uma aplicação com Wemos D1 que usa exatamente esse código. Minha duvida é: Se eu tenho que conectar em redes diferentes, como descubro o gateway delas?
Já consegui fazer com que ele se conecte a redes predefinidas, buscando pelo nome e senha delas no código, mas com IP dinâmico
Estou aprendendo muito com tuas postagens. Muito obrigado
Olá Calirton.
Agradeço pelo comentário!
Fico satisfeito em saber que o Blog está contribuindo para o seu aprendizado.
Vlw!!!
Deu certo! Muito obrigado Euler!
Olá Fernando.
Agradeço pelo comentário!
Fico satisfeito em saber que este tutorial te ajudou.
Vlw!!!
Vou testar o código com o ESP32 Wroom
Oi Greici! Deu pra entender mas, me restou uma dúvida.
Todo sketch que use IPAddress, tenho que colocar o IP que atribuí a esse código? Pois, sendo assim, sempre tenho que me lembrar do mesmo para inserir nos outros sketches, não é? Obrigado
Olá Daniel.
Se pretende usar IP fixo na mesma placa, pode manter o IP que definiu, mas se pretende usar outras placas com IP fixo, você deverá definir um endereço de IP pra cada uma delas. Um endereço de IP não pode ser utilizado por mais de um dispositivo na rede.
Olá Euler! Primeiramente, obrigado pela resposta.
Em todas as placas que eu usar, devo fazer esse procedimento (gravar esse sketch) e definir em IPAddress ip(192,168,0,200); no final com 3 números, um diferente para cada placa?
Por ex.: IPAddress ip(192,168,0,200); IPAddress ip(192,168,0,201); para 2 placas; é isso? Obg+
Isso mesmo Daniel.
Ótimo artigo parabéns!
Fiquei com uma dúvida, caso ele não se conecte ao wifi, ele fica buscando a rede até se conectar?
Muito bom o artigo.
Mas uma duvida, no caso do ESP trabalhando como Client, qual a vantagem de deixa-lo com IP fixo e nao dhcp?
Boa tarde, parabens pelos videos estou assistindo todos e aprendendo muito, um problema que esta acontecendo, adquiri 02 NodeMCU baixei o codigo como descrito, mas apos alguns testes ele trava, tendo que desconectar a alimentacao cabo usb, para que volte a se comunicar, como posso resolver esse problema, testei na outra placa e acontece o mesmo, fico no aguardo, obrigado