Automação Residencial

Pontos de Acesso com Esp32

Eletrogate 4 de janeiro de 2022

Introdução

É 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.


Pontos de Acesso

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.


Esquemático dos Exemplos

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


Exemplo 01

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:

  • [ip]/ligar – liga o led
  • [ip]/desligar – desliga o led

Assim, sempre que uma mudança nesta terminação for detectada, o programa interpretará a mudança, executando o comando de cada terminação.


Código do Exemplo 01

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
  }
}

Se Conectando ao Ponto de Acesso

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


Exemplo 02

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.

  • Como conectar:
    1. Se conecte em “ESP-AP”, nas configurações de Wi-Fi do seu dispositivo.  
    2. Acesse o endereço de IP impresso no monitor serial: 192.168.4.1.
    3. Clique para configurar o Wi-Fi.
    4. Escolha sua rede e insira a senha

 

  • Código do exemplo:
/*
 * 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
}

 


Em Caso de Perda de Conexão...

É 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
}

Conclusã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!


Sobre o Autor


Miguel Sena
@arduuno

Estudante e hobbista na parte de eletrônica e programação. Gosto de desenvolver projetos no Arduino e ESP-32 voltados á robótica e automação residencial, e de desenvolver projetos em Python, assim como a integração dele com o Arduino.


Eletrogate

4 de janeiro de 2022

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!

Eletrogate Robô

Cadastre-se e fique por
dentro de novidades!