Conectando o ESP8266 NodeMCU no Wi-Fi através do botão WPS do roteador Deixe um comentário

A Placa Wi-Fi ESP8266 de modo geral, seja nos modelos NodeMCU, D1 R2 Mini/Pro e D1 R1, fazem parte de uma incrível plataforma IoT. São capazes de fornecer I/O’s programáveis, entrada micro USB, conversor FTDI integrado, regulador de tensão 3,3 V, conexão Wi-Fi e muito mais, tudo isso reunido em um só dispositivo. Porém, ao realizarmos um protótipo ou projeto embarcado que se conecte a internet devemos digitar no código fonte o usuário “SSID” e a senha “PASSWORD” da rede Wi-Fi o que pode não ser nada fácil e prático, correto? Então, através deste post, mostraremos como implementar um código fonte para conectar NodeMCU no Wi-Fi via WPS do roteador e gravá-los diretamente na memória EPROM do dispositivo.

Imagem 1 - Como conectar o NodeMCU no Wi-Fi via WPS do roteador

O que é WPS e como funciona esse recurso?

Você conhece a função WPS – Wi-Fi Protected Setup? Esse botão é fornecido em vários roteadores e tem como principal função facilitar o processo de conexão entre seu roteador e os dispositivos.

Se você possui banda larga, é provável que também tenha Wi-Fi e que sua rede esteja protegida por uma senha. No início das redes wireless, o único padrão de senhas existentes era o WEP. Porém, sua criptografia é extremamente fraca e fácil de ser quebrada. Logo, o WEP foi substituído pelos padrões WPA e WPA2, usados até hoje, pois são seguros e sua criptografia é forte. Porém, para se fazer uma senha realmente forte, é necessário combinar letras maiúsculas, minúsculas, números e caracteres especiais, ou seja, sempre que você quiser conectar um novo dispositivo, será necessário digitar essa complexa senha novamente. Para facilitar o processo, foi criado o WPS, que quando habilitada, a função grava em seu roteador um código de oito dígitos. Ou seja, quando você quiser conectar um novo aparelho à rede Wi-Fi, basta pressionar o botão WPS em seu roteador para que o aparelho se conecte automaticamente, sem a necessidade de utilizar senhas.

Em outras palavras, a função WPS traz mais praticidade e facilidade de conexão às redes Wi-Fi, eliminando a necessidade de utilização e memorização de senhas.

Imagem 2 - WPS do roteador

Gostou da ideia? Então vamos aprender como isto funciona!

Como conectar NodeMCU no Wi-Fi via WPS do roteador

O projeto para conectar NodeMCU no Wi-Fi via WPS do roteador consiste em fazer a NodeMCU se conectar a rede Wi-Fi através de um pulso no botão WPS encontrado em qualquer modelo de roteador disponível no mercado atualmente. Após pressionar o botão WPS do roteador é necessário manter pressionado o botão configurado na NodeMCU, neste caso “Pino D4/GPIO2” por aproximadamente 4 segundos e pronto! Seus dados de usuário e senha serão escritos na memória EPROM do componente, ou seja, mesmo ligando e desligando a ESP8266 NodeMCU os dados permanecem gravados.

OBS: Não pressionar o botão WPS do roteador mais do que 2 segundos, pois isso poderá reiniciar o seu roteador para configuração de fábrica.

Material Necessário

A alimentação pode ser feita pelo cabo USB (o mesmo cabo utilizado na programação da ESP8266 NodeMCU) ou Fonte DC Chaveada 5 V/ 2 A Micro USB.

Setup necessário para conectar NodeMCU no Wi-Fi via WPS do roteador

É essencial que você tenha o Arduino IDE instalado em sua máquina, de preferência a última versão disponível no site Arduino.CC.

Depois é necessário realizar a configuração do Arduino IDE para realizar o desenvolvimento com a ESP8266. Você pode fazer essa configuração usando como base esse tutorial descrito no Blog FilipeFlop.

Esquema Elétrico

Observe o circuito esquemático abaixo, que será usado no projeto para conectar o NodeMCU no Wi-Fi via WPS do roteador:

Após realizada a montagem conforme figura abaixo e pressionado rapidamente o botão WPS do roteador, ao pressionar e segurar o botão configurado na ESP8266 NodeMCU durante 4 segundos será enviado um nível lógico baixo “LOW” ao pino D7 possibilitando a conexão entre roteador e placa. Após a conexão ser estabelecida o LED conectado ao pino D3 piscará 4 vezes, indicando que a conexão foi bem sucedida.

Imagem 3 - Circuito para conectar o NodeMCU no Wi-Fi via WPS do roteador

Programando o Módulo ESP8266 NodeMCU

Primeiro foram inclusas as bibliotecas para o correto funcionamento da ESP8266. Foi definida a porta serial para comunicação entre placa e monitor serial do Arduino IDE com uma taxa de transmissão em 115200 baud rate.

O botão utilizado na ESP8266 serve para se comunicar com o roteador e o LED para indicar que a comunicação Wi-Fi foi estabelecida (escrevendo os dados diretamente na memória EPROM). Para saber mais sobre a biblioteca EPROM, veja o documento EEPROM Library na pagina do IDE Arduino.

Caso seja necessário desconectar o ESP8266 da rede Wi-Fi atual e conectá-lo em outra rede Wi-Fi, será necessário utilizar uma interrupção externa. Para saber mais sobre interrupções externas, veja o documento AttachInterrupt na pagina do IDE Arduino.

//Define bibliotecas ESP8266.
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <EEPROM.h>

//Define DEBUG serial.
#define DBG_OUTPUT_PORT Serial

//Define variaveis.
unsigned long previousMillis = 0;
const long interval = 5000;
volatile bool wasConnected = false;
volatile long wpsStateTime = 0;

//Define WpsButton na GPIO 13 - pino D7.
#define wpsButton D7

//Define LED na GPIO 0 - pino D3.

#define LED D3


bool isConected()

{
  //Se o Wi-Fi nao estiver conectado, retorna FALSE.
  if (WiFi.status() != WL_CONNECTED) {
    return false;
  }
  else
  {
    return true;
  }
}
bool isWPSMode() {
  String value;
  value += char(EEPROM.read(255));
  if (value == "#") {
    EEPROM.write(255, 0);
    EEPROM.commit();
    return true;
  }
  return false;
}
void wpsOn() {
  DBG_OUTPUT_PORT.println("Pressione wpsButton por 4 Seg.");


  //Ativa interrupcao externa  no pino D7/GPIO 13
  detachInterrupt(wpsButton);
  attachInterrupt(wpsButton, wpsOnFinal, FALLING);
  wpsStateTime = millis();
}
void wpsOnFinal()

{
  detachInterrupt(wpsButton);
  attachInterrupt(wpsButton, wpsOn, RISING);
  if (wpsStateTime + 4000 < millis()) {
    if (WiFi.status() == WL_CONNECTED) { WiFi.disconnect(); }
    EEPROM.write(255, 35);
    EEPROM.commit();
    ESP.restart();
  }
}
void connected()

{

   //Caso a ESP8266 esteja conectada ao Wi-Fi  mostra no monitor serial qual o IP e retorna TRUE.
  DBG_OUTPUT_PORT.print(F("Conectado! Endereco IP é: "));
  DBG_OUTPUT_PORT.println(WiFi.localIP());
  wasConnected = true;
}
void setup()
{
   EEPROM.begin(512);
    //Atraves do monitor serial é possivel verificar o status da conexao Wi-Fi, colocar em 115200 Baud-Rate.
   DBG_OUTPUT_PORT.begin(115200);
    //Ativa status de mensagem sempre que houver bibliotecas externas.
    DBG_OUTPUT_PORT.setDebugOutput(true);
    DBG_OUTPUT_PORT.println(F("ESP8266 - wpsButton"));


   //Define wpsButton como entrada.
   pinMode(wpsButton, INPUT);

 //Define LED como saida.

 pinMode(LED, OUTPUT);
 attachInterrupt(wpsButton, wpsOn, RISING);


  //Se WPS Flag habilitar a EPROM, inicia WPS.
  if (isWPSMode()) {
    DBG_OUTPUT_PORT.println(F("Inicia WPS\n"));
    WiFi.beginWPSConfig();
    WiFi.mode(WIFI_STA);
  }
  //Nunca habilitar WiFi.begin(); //Utilizado apenas quando for inserido o SSID e PASSWORD no código fonte.
  //Esperar conexao com o roteador.
  int z = 0;
  while (!isConected()) {
    delay(200);
    DBG_OUTPUT_PORT.print(".");
    if (z == 50) { break; }
    z++;
  }
  DBG_OUTPUT_PORT.println("\n");


  //Caso a conexao nao seja estabelecida, exibir no serial monitor.
  if (!isConected()) {
    DBG_OUTPUT_PORT.println(F("Roteador nao encontrado"));


    //Pressionar o WPS do roteador rapidamente - 1 Pulso.
    DBG_OUTPUT_PORT.println(F("Roteador : Pressione o WPS do roteador apenas 1 pulso."));


    //Pressionar o wpsButton na ESP8266 cerca de 4 Seg.
    DBG_OUTPUT_PORT.println(F("ESP : Pressione o wpsButton na ESP8266 por 4 Seg.\n"));
  }
  else {
    connected();
  } 
void loop()


{
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval) {
    previousMillis = currentMillis;
  if (!isConected() && wasConnected) { delay(200); ESP.restart(); }
  }

//Caso a conexao com a internet seja estabelecida, LED pisca 4X.
    for(int i=0; i<4; i++) {
    digitalWrite(LED, HIGH);
    delay(200);
    digitalWrite(LED, LOW);
    delay(200);


  /* adicionar o seu programa principal aqui*/
}

Resultado ao conectar o NodeMCU no Wi-Fi via WPS do roteador

Após carregar o código fonte para a ESP8266 NodeMCU, abra o serial monitor (com baudrate em 115200 bauds) para acompanhar o que ela está processando. De acordo com a figura abaixo, podemos verificar que a ESP8266 NodeMCU não se conectou em nenhuma rede Wi-Fi ainda.

Imagem 4 - Como conectar o NodeMCU no Wi-Fi via WPS do roteador

Agora pressione o botão WPS do roteado (apenas um pulso para que o roteador não reinicie para as configurações de fábrica).

Em seguida pressione o botão WPS da ESP8266 NodeMCU por aproximadamente 4 segundos. Solte-o após o tempo determinado.

Imagem 4 - Como conectar o NodeMCU no Wi-Fi via WPS do roteador

Pronto! É possível visualizar o LED piscando 4 vezes indicando que a ESP8266 NodeMCU foi conectada na rede Wi-Fi através da configuração WPS.

Gostou de como Conectar a ESP8266 NodeMCU no Wi-Fi através do Botão WPS do Roteador ? Deixe seu comentário logo abaixo. Em caso de dúvidas, caso queira trocar uma ideia, ou até mesmo dividir seu projeto, acesse nosso Fórum!

Até a Próxima!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *