Gerenciando Múltiplas Redes Wi-Fi com o ESP32
Marcelo V. Souza
784ms 207us
O ESP32 é um microcontrolador poderoso e versátil, amplamente utilizado em aplicações de Internet das Coisas (IoT) devido às suas capacidades integradas de Wi-Fi e Bluetooth. Em muitos projetos, é comum que o dispositivo precise se conectar a diferentes redes Wi-Fi, seja por mobilidade, redundância ou facilidade de uso. Este artigo explora como gerenciar múltiplas redes Wi-Fi com o ESP32, permitindo que ele se conecte automaticamente à melhor ou à primeira rede disponível, tornando seus projetos mais flexíveis e robustos.
Por Que Gerenciar Múltiplas Redes Wi-Fi?🔗
Antes de mergulharmos nas implementações técnicas, é importante compreender as razões pelas quais gerenciar múltiplas redes Wi-Fi é benéfico:
- Mobilidade: Em aplicações onde o ESP32 é móvel, como robôs ou dispositivos vestíveis, ele pode se mover entre diferentes áreas cobertas por redes Wi-Fi distintas.
- Redundância: Ter múltiplas redes configuradas garante que, se uma rede falhar, o dispositivo possa se conectar a outra disponível, aumentando a confiabilidade.
- Facilidade de Configuração: Pré-configurar o ESP32 com várias redes conhecidas evita a necessidade de reprogramação ao mudar o dispositivo de local.
- Escalabilidade: Em ambientes com múltiplos pontos de acesso, como empresas ou casas com extensores de sinal, o ESP32 pode se conectar ao ponto com o melhor sinal.
Configurando o ESP32 para Conectar-se a Múltiplas Redes🔗
Para permitir que o ESP32 gerencie múltiplas redes Wi-Fi, precisamos armazenar as credenciais de cada rede e programá-lo para tentar se conectar a elas. Existem diferentes abordagens para alcançar isso:
Utilizando a Classe WiFiMulti
A biblioteca WiFiMulti facilita o gerenciamento de múltiplas redes. Ela permite adicionar várias redes com suas credenciais, e o ESP32 tentará se conectar àquelas que estiverem disponíveis, escolhendo a de melhor qualidade de sinal.
Como Funciona o WiFiMulti
- Armazenamento de Redes: Você adiciona as redes conhecidas ao objeto
WiFiMulti
.
- Processo de Conexão: Quando
wifiMulti.run()
é chamado, o ESP32 escaneia as redes disponíveis e tenta se conectar àquelas cujos SSIDs correspondem aos armazenados.
- Seleção da Melhor Rede: Caso várias redes conhecidas estejam disponíveis, ele se conectará àquela com o sinal mais forte.
Implementação Passo a Passo
Vamos implementar um exemplo prático de como gerenciar múltiplas redes Wi-Fi usando o ESP32 e a classe WiFiMulti.
Materiais Necessários
- Módulo ESP32.
- Cabo USB para conexão ao computador.
- Arduino IDE com suporte ao ESP32 configurado.
Passo 1: Configurando o Ambiente
Certifique-se de que o Arduino IDE está configurado para trabalhar com o ESP32. Caso ainda não tenha feito isso, adicione o URL de gerenciadores de placas do ESP32 nas preferências do Arduino IDE e instale as placas ESP32 via gerenciador de placas.
Passo 2: Escrevendo o Código
Aqui está o código que permite ao ESP32 gerenciar múltiplas redes Wi-Fi:
#include <WiFi.h>
#include <WiFiMulti.h>
WiFiMulti wifiMulti;
void setup()
{
Serial.begin(115200);
// Adicionando as redes Wi-Fi
wifiMulti.addAP("RedeCasa", "senhaCasa");
wifiMulti.addAP("RedeEscritorio", "senhaEscritorio");
wifiMulti.addAP("RedeCelular", "senhaCelular");
Serial.println("Conectando ao Wi-Fi...");
while (wifiMulti.run() != WL_CONNECTED)
{
Serial.print(".");
delay(1000);
}
Serial.println();
Serial.println("Conectado com sucesso!");
Serial.print("Endereço IP: ");
Serial.println(WiFi.localIP());
}
void loop()
{
// Aqui você pode inserir o código que será executado continuamente
}
Passo 3: Entendendo o Código
- Inclusão das Bibliotecas:
#include <WiFi.h>
#include <WiFiMulti.h>
Importamos as bibliotecas necessárias para conexão Wi-Fi e gerenciamento de múltiplas redes.
- Instanciando o WiFiMulti:
WiFiMulti wifiMulti;
Criamos um objeto wifiMulti
para gerenciar as redes Wi-Fi.
Serial.begin(115200);
Iniciamos a comunicação serial para monitorar o processo.
wifiMulti.addAP("RedeCasa", "senhaCasa");
wifiMulti.addAP("RedeEscritorio", "senhaEscritorio");
wifiMulti.addAP("RedeCelular", "senhaCelular");
Adicionamos as redes conhecidas ao objeto wifiMulti
.
while (wifiMulti.run() != WL_CONNECTED)
{
Serial.print(".");
delay(1000);
}
O código permanece no loop enquanto não estiver conectado a uma das redes adicionadas.
A função loop()
está vazia neste exemplo, mas é onde você adicionaria o código principal do seu projeto.
Passo 4: Carregando e Testando o Código
- Conecte o ESP32 ao computador e selecione a porta correta no Arduino IDE.
- Carregue o código no ESP32.
- Abra o Monitor Serial para observar a saída.
- O ESP32 tentará se conectar às redes adicionadas e exibirá o endereço IP ao conectar-se.
Lidando com Desconexões e Reconexões
Para garantir que o ESP32 permaneça conectado, mesmo se a rede Wi-Fi mudar ou houver uma queda de conexão, podemos modificar o código para verificar periodicamente a conexão.
Atualizando o loop()
void loop()
{
if (wifiMulti.run() != WL_CONNECTED)
{
Serial.println("Desconectado. Tentando reconectar...");
}
else
{
// Código quando conectado
// Por exemplo, leitura de sensores ou envio de dados
}
delay(1000);
}
Com essa modificação, o ESP32 verifica a cada segundo se ainda está conectado. Se não estiver, o wifiMulti.run()
tentará reconectar-se a uma das redes disponíveis.
Armazenando Credenciais Externamente🔗
Em projetos mais complexos, pode ser conveniente armazenar as credenciais das redes em arquivos externos ou permitir que o usuário final configure as redes sem a necessidade de alterar o código.
Utilizando o Sistema de Arquivos SPIFFS ou LittleFS
O ESP32 suporta sistemas de arquivos como SPIFFS ou LittleFS, permitindo armazenar arquivos na memória flash.
Passo 1: Criando um Arquivo JSON com as Redes
Crie um arquivo chamado networks.json
com o seguinte conteúdo:
[
{"ssid": "RedeCasa", "password": "senhaCasa"},
{"ssid": "RedeEscritorio", "password": "senhaEscritorio"},
{"ssid": "RedeCelular", "password": "senhaCelular"}
]
Passo 2: Carregando o Arquivo no ESP32
Use um plugin do Arduino IDE para carregar o sistema de arquivos (por exemplo, o ESP32 Sketch Data Upload).
Passo 3: Modificando o Código para Ler o Arquivo
Inclua as seguintes bibliotecas:
#include <FS.h>
#include <SPIFFS.h>
#include <ArduinoJson.h>
Atualize o setup()
para ler as redes do arquivo:
void setup()
{
Serial.begin(115200);
SPIFFS.begin(true);
File file = SPIFFS.open("/networks.json", "r");
if (!file)
{
Serial.println("Falha ao abrir o arquivo");
return;
}
DynamicJsonDocument doc(1024);
DeserializationError error = deserializeJson(doc, file);
if (error)
{
Serial.println("Falha ao interpretar o JSON");
return;
}
for (JsonObject obj : doc.as<JsonArray>())
{
const char* ssid = obj["ssid"];
const char* password = obj["password"];
wifiMulti.addAP(ssid, password);
Serial.print("Adicionado Wi-Fi: ");
Serial.println(ssid);
}
file.close();
Serial.println("Conectando ao Wi-Fi...");
while (wifiMulti.run() != WL_CONNECTED)
{
Serial.print(".");
delay(1000);
}
Serial.println();
Serial.println("Conectado com sucesso!");
Serial.print("Endereço IP: ");
Serial.println(WiFi.localIP());
}
Vantagens Desta Abordagem
- Flexibilidade: Adicionar ou remover redes sem reprogramar o ESP32.
- Segurança: As credenciais não ficam expostas no código-fonte.
- Escalabilidade: Facilita o gerenciamento quando há muitas redes.
A biblioteca WiFiManager permite que usuários finais configurem as redes Wi-Fi através de um portal web, eliminando a necessidade de programar as credenciais diretamente.
Como Funciona
- O ESP32 inicia como um ponto de acesso (AP) com um portal de configuração.
- O usuário conecta-se ao AP e acessa uma página web.
- A partir dessa página, o usuário escolhe a rede Wi-Fi desejada e fornece a senha.
- O ESP32 salva as credenciais e conecta-se à rede selecionada.
Implementação Básica com WiFiManager
Instale a biblioteca WiFiManager através do gerenciador de bibliotecas do Arduino IDE.
#include <WiFi.h>
#include <WiFiManager.h>
void setup()
{
Serial.begin(115200);
WiFiManager wm;
// Inicia o portal de configuração
if (!wm.autoConnect("ESP32-Config"))
{
Serial.println("Falha na conexão ou tempo esgotado");
ESP.restart();
}
Serial.println("Conectado com sucesso!");
Serial.print("Endereço IP: ");
Serial.println(WiFi.localIP());
}
void loop()
{
// Seu código principal aqui
}
Personalizando o Portal
O WiFiManager permite personalizar o portal de configuração, incluindo:
- Definir parâmetros adicionais: Como endereços de servidores, chaves de API, etc.
- Personalizar a aparência: Alterando estilos CSS e textos.
- Implementar validações: Garantindo que os dados inseridos são válidos.
Boas Práticas de Segurança🔗
Ao lidar com múltiplas redes e armazenar credenciais, é fundamental considerar a segurança:
- Criptografia de Dados: Considere criptografar as credenciais ao armazená-las no sistema de arquivos.
- Proteção do Portal: Se utilizar um portal de configuração, implemente autenticação para evitar acesso não autorizado.
- Atualizações Regulares: Mantenha o firmware do ESP32 atualizado para proteger contra vulnerabilidades conhecidas.
- Limitação de Acesso: Restrinja o acesso físico ao dispositivo, especialmente se armazenar informações sensíveis.
Casos de Uso Reais🔗
Automação Residencial
Em sistemas de automação residencial, dispositivos ESP32 podem precisar se conectar a diferentes redes domésticas, como a rede principal, redes de convidados ou diferentes extensores Wi-Fi, garantindo cobertura completa em toda a casa.
Monitoramento Ambiental
Sensores ambientais portáteis podem ser movidos entre diferentes locais, como escritórios, laboratórios e áreas externas, exigindo que o ESP32 se conecte a redes Wi-Fi distintas sem intervenção manual.
Dispositivos Industriais Móveis
Em ambientes industriais, equipamentos móveis com ESP32 podem se deslocar entre diferentes pontos de acesso configurados, mantendo a conectividade e permitindo o monitoramento contínuo.
Considerações Finais🔗
Gerenciar múltiplas redes Wi-Fi com o ESP32 é uma funcionalidade poderosa que aumenta a flexibilidade e a robustez dos seus projetos IoT. Seja para permitir mobilidade, fornecer redundância ou facilitar a configuração por usuários finais, as abordagens apresentadas neste artigo oferecem soluções práticas para diferentes cenários.
Ao implementar essas técnicas, você está capacitando seus dispositivos a operar efetivamente em diversos ambientes, tornando-os mais adaptáveis e confiáveis. Lembre-se sempre de considerar aspectos de segurança ao lidar com credenciais e redes para proteger seus dispositivos e dados.
Explore e experimente as diferentes abordagens para encontrar a que melhor se adapta às necessidades do seu projeto. Com prática e aprofundamento, você será capaz de criar soluções IoT cada vez mais eficientes e inovadoras.
Este artigo faz parte do grupo Conectando o ESP32 à Rede Wi-Fi
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Tags