É cada vez mais comum a utilização de meios microcontrolados para comunicação com uma base ou consumidor, ou transmissão de dados em um projeto IoT. Por isso, uma das ferramentas mais utilizadas atualmente neste tipo de projeto é o ESP32. Entretanto, para um projeto final, é sempre bom que ele seja capaz de funcionar sob qualquer circunstância. Então, ao longo deste post será possível entender como fazer com que o ESP32 crie sua própria rede sem fio de comunicação, podendo ser utilizado em qualquer local, mesmo se este não possuir acesso Wi-Fi. Por fim, também lhes mostrarei como utilizar uma poderosa biblioteca, a WiFiManager, que permite o cadastro de sua própria rede Wi-Fi no microcontrolador, através de um painel de controle.
Ao longo deste post, será possível notar que uma das questões a ser debatida são os pontos de acesso. Estes pontos de acesso são dispositivos, físicos (hardware) ou virtuais (software) que possibilitam a comunicação entre outros dispositivos através de uma rede/sistema sem fio.
Basicamente, é possível gerar um desses pontos de acesso através da própria biblioteca “WiFi”, utilizando o comando “softAP()”. Com este formato de rede gerado não é possível navegar na internet, entretanto, com o endereço de IP gerado pelo microcontrolador será possível acessar uma página HTML construída para o projeto, assim como é feito com outros projetos ligados ao WiFi, algo que pode ser visto neste artigo.
Como já citado anteriormente, este tipo de abordagem em seus projetos te proporcionará uma maior versatilidade, visto o seu funcionamento em qualquer local ou situação, independentemente de um fornecimento de internet Wi-Fi neste lugar.
Assim, neste primeiro exemplo você poderá visualizar esta explicação na prática, entendendo como, exatamente, aplicar este ponto de acesso em seus projetos.
Em ambos os exemplos que serão realizados, o esquemático a seguir será utilizado.
Materiais necessários para o projeto Pontos de Acesso com Esp32
Nesse exemplo, será reproduzido um pequeno projeto, visando demonstrar a criação do ponto de acesso explicitado na seção anterior. Para isso, o projeto consistirá em um controle para ligar e desligar um led através de uma página HTML bem simples com apenas dois botões, um para ligar e outro para desligar o led. Esta página será exposta em um endereço de IP fornecido pelo ESP, gerado a partir do ponto de acesso.
Para criar o ponto de acesso é necessário definir um nome (SSID) e uma senha. Em nosso caso, o SSID será “ESP-AP” e, para facilitar o processo, a senha será bem simples, sendo definida como “12345678”. Entretanto, é imensamente recomendável que não se utilize esta senha em algum projeto fixo, devido ao seu baixo nível de segurança.
Feito isso, é possível utilizar o endereço de IP fornecido para acessar a página, mas vale lembrar que só será possível acessar a página se seu dispositivo estiver conectado no ponto de acesso. Logo, caso algum dos lados se desconecte, o acesso e o controle do led será comprometido.
Quanto à página HTML, como já dito, será bem simples, seguindo os exemplos fornecidos pela biblioteca. Ela consistirá em duas tags “<a>” que redirecionarão para o mesmo endereço de IP com uma terminação diferente:
Assim, sempre que uma mudança nesta terminação for detectada, o programa interpretará a mudança, executando o comando de cada terminação.
O sketch a seguir foi utilizado para criar o ponto de acesso, seguindo a explicação acerca do exemplo realizada anteriormente.
Note que, na parte em que o código HTML foi inserido, ele está bem simplificado, seguindo o exemplo da biblioteca. Entretanto, em um projeto mais complexo, pode-se utilizar um código HTML com a formatação que já é comum para esse tipo de arquivo.
/* * Pontos de Acesso com ESP32 * Miguel Sena - blog.eletrogate.com */ #include <WiFi.h> //Inclui a biblioteca const char* ssid = "ESP32-AP"; //Define o nome do ponto de acesso const char* pass = "12345678"; //Define a senha WiFiServer sv(80); //Cria um servidor na porta 80 void setup() { Serial.begin(115200); //Inicia o monitor serial pinMode(23, OUTPUT); //Define a porta 23 como saída delay(10); //Atraso de 10 milissegundos Serial.println("\n"); //Pula uma linha WiFi.softAP(ssid, pass); //Inicia o ponto de acesso Serial.print("Se conectando a: "); //Imprime mensagem sobre o nome do ponto de acesso Serial.println(ssid); IPAddress ip = WiFi.softAPIP(); //Endereço de IP Serial.print("Endereço de IP: "); //Imprime o endereço de IP Serial.println(ip); sv.begin(); //Inicia o servidor Serial.println("Servidor online"); //Imprime a mensagem de início } void loop() { WiFiClient client = sv.available(); //Cria o objeto cliente if (client) { //Se este objeto estiver disponível String line = ""; //Variável para armazenar os dados recebidos while (client.connected()) { //Enquanto estiver conectado if (client.available()) { //Se estiver disponível char c = client.read(); //Lê os caracteres recebidos if (c == '\n') { //Se houver uma quebra de linha if (line.length() == 0) { //Se a nova linha tiver 0 de tamanho client.println("HTTP/1.1 200 OK"); //Envio padrão de início de comunicação client.println("Content-type:text/html"); client.println(); client.print("Ligue o led clicando <a href=\"/ligar\">aqui</a><br>"); //Linha para ligar o led client.print("Desligue o led clicando <a href=\"/desligar\">aqui</a><br>"); //Linha para desligar o led client.println(); break; } else { line = ""; } } else if (c != '\r') { line += c; //Adiciona o caractere recebido à linha de leitura } if (line.endsWith("GET /ligar")) { //Se a linha terminar com "/ligar", liga o led digitalWrite(23, HIGH); } if (line.endsWith("GET /desligar")) { //Se a linha terminar com "/desligar", desliga o led digitalWrite(23, LOW); } } } client.stop(); //Para o cliente } }
1- Primeiramente, abra as configurações de WiFi do seu dispositivo.
2- Procure nas redes disponíveis pelo nome do nosso ponto de acesso (“ESP32-AP”)
3- Insira a senha do ponto de acesso (“12345678”)
4- Vá para o navegador do seu dispositivo e insira o endereço de IP fornecido pelo Esp32
Para este exemplo, será criado algo bem mais simples. No caso, somente apenas a conexão do Esp32 no Wi-Fi será retratada. Entretanto, neste caso, utilizaremos a biblioteca WiFiManager. Esta biblioteca funciona, basicamente, unindo dois tipos de funcionamento e conexão do Esp32 ao WiFi.
Primeiramente, a biblioteca cria um ponto de acesso, assim como foi criado no Exemplo 01. Entretanto, ao se conectar neste ponto de acesso e acessar o endereço de IP fornecido, você entrará em um centro de controle e, a partir deste, será possível cadastrar sua própria rede Wi-Fi para o microcontrolador se conectar, passando a funcionar no modo de conexão Wi-Fi local.
Ao utilizar a biblioteca, notei um problema, e, ao pesquisar acerca deste, notei que é um problema muito comum, que gira em torno de um suposto termo durante a conexão HTTP que deveria ser explicitado de outra forma. Porém isso não é um erro do nosso código, por isso, durante o nosso exemplo, utilizaremos a biblioteca “ESPAsyncWiFiManager”.
Quanto ao nosso exemplo, ele será bem simples e funcionará da seguinte forma: Primeiramente, as configurações do gerenciador serão reiniciadas para permitir uma reconexão. Feito isso, geraremos um ponto de acesso chamado “ESP32-AP”, assim como no exemplo anterior, só que sem a senha. Por fim, será impresso no monitor serial a confirmação da conexão.
Pode ser visto que é um processo bem mais simples, visto que até o endereço de IP e redes disponíveis serão impressas no monitor serial pela própria biblioteca.
Para instalá-las, vá para as páginas do GitHub disponibilizadas, e clique em: Code > Download ZIP. Na IDE do Arduino, vá para: Sketch > Incluir biblioteca > Adicionar biblioteca .ZIP > pasta compactada da biblioteca.
/* * Pontos de acesso com ESP32 * Miguel Sena - blog.eletrogate.com */ #include <DNSServer.h> //Inclui as bibliotecas #include <ESPAsyncWebServer.h> #include <ESPAsyncWiFiManager.h> #include <WiFi.h> AsyncWebServer server(80); //Cria os objetos dos servidores DNSServer dns; void setup() { AsyncWiFiManager manager(&server, &dns); //Cria o objeto do gerenciador Serial.begin(115200); //Inicia o monitor serial Serial.println(); manager.resetSettings(); //Reseta as configurações do gerenciador manager.autoConnect("ESP-AP"); //Cria o ponto de acesso Serial.println("Conectado"); //Imprime a mensagem de confirmação } void loop() { // Insira o código do seu projeto aqui }
É muito comum que, ao longo do desenvolvimento e da utilização do seu projeto, ocorra uma desconexão por parte do Esp32. Por isso, é disponibilizado um método pela biblioteca “WiFI.h”, o “reconnect()”, que permitirá a reconexão do microcontrolador. Confira um exemplo acerca da utilização deste método em seu código abaixo:
if (WiFi.status() != WL_CONNECTED) { //Verifica se existe alguma conexão WiFi.disconnect(); //Caso negativo, confirma a desconexão WiFi.reconnect(); //Tenta uma reconexão }
Você pôde aprender, ao longo deste post, a criar pontos de acesso e utilizar o WiFiManager com o Esp32. Se quiser incrementar seus estudos, poderá tentar juntar os dois exemplos, ou seja, controlar os leds após uma conexão com o WiFiManager. Se ficou alguma dúvida, deixe nos comentários. Um forte abraço e até a próxima!
Conheça a Metodologia Eletrogate e ofereça aulas de robótica em sua escola!
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!