Usando o Wi-Fi Manager no NodeMCU para digitalizar e conectar-se a redes Wi-Fi

Tempo de leitura: 5 minutes

Dispositivos baseados em IoT estão se tornando cada vez mais populares entre nós, estima-se que haverá cerca de 1,5 bilhão de dispositivos conectados à Internet até o ano de 2022. Portanto, os engenheiros do futuro estão ansiosos para aprender como construir dispositivos IoT, apoiando que lá há várias placas de desenvolvimento para permitir a prototipagem rápida de IoT. Usamos várias placas populares, como Arduino, ESP8266, ESP32 e Raspberry Pi para desenvolver projetos de IoT, que você pode verificar nesta seção.

Como sabemos, a maioria dos dispositivos IoT precisam estar conectados √† Internet para iniciar a opera√ß√£o. Enquanto prototipamos ou testamos nossos projetos de IoT, podemos codificar facilmente o SSID e a senha do Wi-Fi em nosso programa e faz√™-lo funcionar. Mas quando o dispositivo √© entregue ao consumidor, ele/ela deve ser capaz de escanear e se conectar √† pr√≥pria rede Wi-Fi sem alterar o programa. √Č aqui que o gerenciador de Wi-Fi ESP8266 ser√° √ļtil, esta fun√ß√£o de gerenciador de Wi-Fi pode ser adicionada ao programa existente para fornecer uma op√ß√£o para os usu√°rios digitalizarem e se conectarem a qualquer rede Wi-Fi e, uma vez que a conex√£o seja estabelecida, dispositivo pode executar sua fun√ß√£o normal at√© que a conex√£o de rede precise ser alterada novamente.

Neste projeto, vamos usar o NodeMCU e programá-lo para operar em dois modos diferentes, ou seja, modo de ponto de acesso (AP) e modo de estação (STA). No modo AP, NodeMCU funcionará como um roteador Wi-Fi emitindo seu próprio sinal Wi-Fi, você pode usar qualquer smartphone para se conectar a esta rede Wi-Fi e abrir uma página da web na qual podemos configurar o novo Wi-Fi SSID e senha, assim que as novas credenciais forem definidas, o NodeMCU entrará automaticamente no modo Estação e se conectará a este novo Wi-Fi. O novo SSID e senha do Wi-Fi serão lembrados para que o dispositivo seja conectado a esta rede sempre que for ligado novamente.

 

Componentes necess√°rios

  • NodeMCU – Esp8266
  • ProtoBoard
  • Push Button (Apertar bot√Ķes)
  • LEDs
  • Fios de conex√£o

Diagrama de circuito

Para indicar se o módulo está no ponto de estação ou no ponto de acesso, usei dois LEDs. Se o LED vermelho estiver piscando, significa que o módulo está no modo de estação e há uma conexão wi-fi ativa à qual está conectado. Se o LED verde estiver aceso, significa que o módulo está no modo de ponto de acesso e aguardando que o usuário configure a rede wi-fi disponível. O botão de pressão é usado para alternar entre o ponto de acesso e o modo de estação, se o botão for pressionado ao ligar o dispositivo, o NodeMCU entrará no modo de ponto de acesso, onde as novas credenciais de Wi-Fi podem ser inseridas. Assim que o dispositivo se conectar a uma rede Wi-Fi, ele piscará um LED vermelho conforme mostrado abaixo. Mais sobre isso é discutido na seção de programação.

Posteriormente, você pode substituir a seção piscando do led vermelho com o funcionamento real do seu projeto. Digamos, por exemplo, que se você construiu um dispositivo para medir temperatura e umidade, em vez de piscar o led vermelho, você pode executar esta função.

 

Explicação do código

Antes de entrar na codificação, existem certas bibliotecas, que devem ser baixadas. Use os links abaixo para baixar as bibliotecas e adicioná-las ao seu Arduino IDE

Assim que as bibliotecas forem adicionadas, podemos começar nossa programação. O programa completo para este projeto pode ser encontrado no final desta página, a explicação do mesmo é a seguinte. Começamos nosso programa adicionando os arquivos de cabeçalho necessários.

#include <ESP8266WiFi.h>         //https://github.com/esp8266/Arduino
#include <WiFiManager.h>         //https://github.com/tzapu/WiFiManager‚Äč

Vamos codificar de forma que, ao ligar o m√≥dulo, se a chave estiver no estado ON, ele definir√° o ESP para o modo Access Point (AP) e redefinir√° as configura√ß√Ķes salvas. Ele permanecer√° neste modo at√©, a menos que o usu√°rio use um dispositivo habilitado para Wi-Fi e o conecte a este ponto de acesso. Quando conectado a este ponto de acesso, ele redirecionar√° o usu√°rio para uma p√°gina da web, onde o usu√°rio pode configurar o novo SSID e senha. Ap√≥s definir as credenciais, o ESP se reinicializar√° e funcionar√° como um modo Esta√ß√£o (STA).

Com o novo SSID e senha, que é fornecido pelo usuário na página web, ele tenta estabelecer uma conexão e, se a conexão for estabelecida, nosso processo de conexão será concluído com sucesso. Se o estabelecimento da conexão falhar, o processo é repetido desde o início.

O código abaixo será ativado somente quando o módulo for energizado junto com a chave no estado ligado. Esta parte do código redefine a configuração e executa o ESP no modo de ponto de acesso. Se a conexão for estabelecida, o processo de conexão é concluído e o programa vai para o loop void().

void setup() {
    Serial.begin(115200);
    pinMode(trigger,INPUT);
    pinMode(LED,OUTPUT);
    pinMode(power,OUTPUT);
    if(digitalRead(trigger) == HIGH){
    digitalWrite(power,HIGH);
    WiFiManager wifiManager;
    wifiManager.resetSettings();
    wifiManager.autoConnect("CapSistema WiFi Manager");
    Serial.println("connected :)");
  }
}

A pr√≥xima parte do c√≥digo √© usada para saber o status da conex√£o sem fio. Ele verificar√° o c√≥digo continuamente e indicar√° ao usu√°rio se ele est√° conectado a alguma rede sem fio. Se a luz vermelha piscar continuamente, significa que a conex√£o foi estabelecida. Se o led verde estiver piscando, isso indica que o ESP n√£o est√° conectado a uma rede e que as configura√ß√Ķes anteriores foram redefinidas. Mesmo que a alimenta√ß√£o seja fornecida ao m√≥dulo e nenhum dos LEDs esteja aceso, isso significa que o m√≥dulo perdeu sua conex√£o com a rede

void loop() {
  if (WiFi.status() == WL_CONNECTED)
        {
          digitalWrite(power,LOW);
          while(WiFi.status() == WL_CONNECTED){
            digitalWrite(LED,HIGH);
            delay(500);
            digitalWrite(LED,LOW);
            delay(200);  
          }
        } else {
          digitalWrite(LED,LOW);
        }

 

NodeMCU (Esp8266) Wi-Fi Manager funcionando

Você também pode seguir as etapas abaixo para verificar se o programa está funcionando conforme o esperado.

Etapa 1: conecte a alimentação ao módulo junto com a chave LIGADA. O LED verde começará a brilhar para indicar que o módulo ESP está no modo Access Point (AP), conforme mostrado abaixo

Etapa 2: use qualquer dispositivo habilitado para wi-fi para se conectar a este ponto de acesso. Selecione a opção de gerenciamento do roteador para redirecionar para uma página da web. Selecione Configurar Wi-Fi.

Etapa 3: O ESP fará a varredura e mostrará todas as redes disponíveis. Selecione a rede desejada e digite a senha.

Etapa 4: Se o LED vermelho começar a piscar, isso indica que o ESP se conectou à rede Wi-Fi.

Etapa 5: se o estabelecimento da conex√£o falhar, comece a partir da etapa 1.

Dessa forma, podemos eliminar o fardo da codifica√ß√£o sempre que voc√™ precisar se conectar a uma nova rede. Espero que voc√™ tenha entendido o tutorial e aprendido algo √ļtil, se voc√™ tiver alguma d√ļvida, fique √† vontade para deix√°-la na se√ß√£o de coment√°rios abaixo ou use nossos f√≥runs para outras quest√Ķes t√©cnicas.

#include <ESP8266WiFi.h>          //https://github.com/esp8266/Arduino
// necess√°rio para a biblioteca
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>          //https://github.com/tzapu/WiFiManager

#define trigger D0
#define LED D2
#define power D3

void setup() {
    Serial.begin(115200);
    pinMode(trigger,INPUT); 
    pinMode(LED,OUTPUT); 
    pinMode(power,OUTPUT);    
    if(digitalRead(trigger) == HIGH){
    digitalWrite(power,HIGH);
    WiFiManager wifiManager;
    wifiManager.resetSettings();
    wifiManager.autoConnect("CapSistema WiFi Manager");
    Serial.println("connected :)");
  }     
}
void loop() { 
  if (WiFi.status() == WL_CONNECTED)
  {
     digitalWrite(power,LOW);
     while(WiFi.status() == WL_CONNECTED){           
        digitalWrite(LED,HIGH);
        delay(500);
        digitalWrite(LED,LOW);
        delay(200);   
     }              
  } else {
     digitalWrite(LED,LOW);
  }
}

 

Visits: 4 Visits: 586165