ESP32 com WiFi

,

Olá, como estão? Hoje a princípio iremos estar falando sobre a rede wireless (WiFi). Pois cada vez mais estamos utilizando a conexão wireless (WiFi). Seja para realizar comunicação com servidores, desenvolver aplicações IoT (Internet das Coisas) ou com a finalidade de diminuir a quantidade de fios que será utilizado em nossos projetos. Embora exista diversos motivos para utilizar a conexão wireless, por esse motivo iremos demostrar como desenvolver uma aplicação simples utilizando LEDs e ESP32.

ESP32
Icone WiFi

Componentes Utilizados


O Que é a Biblioteca WiFi.H?


Contudo esta biblioteca fornece diversas funções referentes a conexão wireless. Assim permitindo se conectar a uma rede no modo Station (onde o ESP32 se conecta a uma rede) ou crie uma no modo Access Point (onde o ESP32 cria uma própria rede). Está biblioteca já está inclusa na IDE do Arduíno então basta “chamar” a biblioteca no código de programação, o comando utilizado é:

#include <WiFi.h>

Funcionamento do Projeto ESP32 com WiFi


A princípio projeto baseia-se no ESP32 junto com 3 LEDs, sendo um deles o LED da própria placa. Onde o ESP32 irá se conectar à rede wireless para assim conseguir acionar os LEDs através de outros aparelhos da rede. Entretanto para conseguir realizar isso iremos acessar o IP do ESP32, também iremos desenvolver uma página em HTML com prints.

Montagem do Projeto ESP32 com WiFi


Logo após compra dos componentes na WJ Componentes, vamos à montagem! Então agora na montagem do projeto é simples de realizar, primeiro iremos colocar os dois LEDs na protoboard juntamente com o ESP32. Em seguida ligamos o Cátodo (negativo) dos LEDs no GND e o Anodo (positivo) dos LEDs 1 e 2 nos pinos GPIO12 e GPIO13. Contudo o ESP32 Trabalha com tensão lógica de 3,3 V.

Contudo segue abaixo uma imagem que demonstrando a montagem do circuito.

Montagem do Circuito Eletrônico na Protoboard - ESP32 com WiFi

Utilizando o ESP32 Com a Arduino IDE


Entretanto se você ainda não possui as placas ESP instalado na IDE do Arduíno é necessário realizar a instalação, seguindo os passos abaixo. Contudo caso já possua podemos prosseguir para a programação da placa.

Então na Arduíno IDE clique em Preferências e cole o link abaixo em “URLs Adicionais para Gerenciadores de Placas” e dê um OK.

URL: https://dl.espressif.com/dl/package_esp32_index.json

Em seguida, clique em Ferramentas > Placas > Gerenciador de placas, pesquise ESP32, selecione a versão 1.0.2 e clique em instalar.

Instalação ESP32 no Gerenciador de Placas

Logo após instalado, vá em Ferramentas -> Placas e selecione a placa ESP32 Dev Module.

Código-fonte do Projeto ESP32 com WiFi


Em seguida segue abaixo o código-fonte completo do projeto.

//Bibliotecas -----------------------------------------------------------------------------------------
#include <WiFi.h>                                          // Responsável pelo WiFi

//Declaração de pinos - LED ---------------------------------------------------------------------------
const int led1 = 13;                                       // Define Pino do LED
const int led2 = 12;                                       // Define Pino do LED
const int led3 = 2;                                        // Define Pino do LED

//WiFi ------------------------------------------------------------------------------------------------
const char* ssid = "<NOME-DA-REDE>";                       // Nome da rede WiFi
const char* password =  "<SENHA-DA-REDE>";                 // Senha do WiFi
WiFiServer server(80);                                     // Declaração do servidor junto a sua porta

//Variável Globais -----------------------------------------------------------------------------------
String header;                                             // Variável de Controle URL

//Setup -----------------------------------------------------------------------------------------------
void setup() {
    Serial.begin(115200);                                  // Inicialização do Monitor Serial

    pinMode(led1, OUTPUT);                                 // Configura LED como OUTPUT
    pinMode(led2, OUTPUT);                                 // Configura LED como OUTPUT
    pinMode(led3, OUTPUT);                                 // Configura LED como OUTPUT

    //Configurações de WiFi
    WiFi.begin(ssid, password);                            // Tenta se conectar no WiFi
    Serial.print("Conectando no WiFi ");                   // Imprime na Serial
    Serial.println(ssid);                                  // Imprime nome da rede
    while (WiFi.status() != WL_CONNECTED) {                // Verifica se a Conexão foi realizada
        delay(500);                                        // Espera 0,5s
        Serial.print(".");
    }
    Serial.println("");
    Serial.println("WiFi Conectado");                      // Imprime que foi conectado
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());                        // Imprime o IP do ESP32
    server.begin(); // Inicia o servidor
    Serial.println("Servidor Iniciado na porta 80");       // Imprime a porta do Servidor
}

//Loop ------------------------------------------------------------------------------------------------
void loop() {
    WiFiClient cliente = server.available();
    if(cliente){
        String currentLine="";                             // Declara variável vazia
        while(cliente.connected()){                        // Faz loop enquanto tiver cliente conectado
            if(cliente.available()){                       // Verifica se tem algum dado sendo passado
                char c = cliente.read();                   // Atribui a C as informações do cliente
                header += c;                               // Incrementa o header com oq tem em C
                if(c == '\n'){
                    if(currentLine.length() == 0){
                        cliente.println("HTTP/1.1 200 OK"); // Retorna para o Cliente a solicitação
                        cliente.println("Content-type:text/html"); // Informa o formato do conteúdo
                        cliente.println("Connection: close");
                        cliente.println("");

                        // Verifica se a URL recebeu o protocolo GET para realizar as devidas funções
                        if (header.indexOf("GET /13/on") >= 0) {
                            Serial.println("GPIO 13 on");
                            digitalWrite(led1, HIGH);
                        } else if (header.indexOf("GET /13/off") >= 0) {
                            Serial.println("GPIO 13 off");
                            digitalWrite(led1, LOW);
                        } else if (header.indexOf("GET /12/on") >= 0) {
                            Serial.println("GPIO 12 on");
                            digitalWrite(led2, HIGH);
                        } else if (header.indexOf("GET /12/off") >= 0) {
                            Serial.println("GPIO 12 off");
                            digitalWrite(led2, LOW);
                        } else if (header.indexOf("GET /2/on") >= 0) {
                            Serial.println("GPIO 2 on");
                            digitalWrite(led3, HIGH);
                        } else if (header.indexOf("GET /2/off") >= 0) {
                            Serial.println("GPIO 2 off");
                            digitalWrite(led3, LOW);
                        }
                
                        //HTML
                        cliente.println("<!DOCTYPE html><html>");
                        cliente.print("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
                        cliente.println("<title>ESP32 - WIFI</title>");

                        //CSS
                        cliente.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto;");
                        cliente.println(" text-align: center;}");
                        cliente.println(".button { background-color: #0000FF; border: none; color: white; padding: 80px 80px;");
                        cliente.println("text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;border-radius: 10px;}");
                        cliente.println(".button2 {background-color: #555555;}</style></head>");

                        //Body
                        cliente.println("<body><h1>ESP32 Acionamento Led </h1>");

                        // Botão LED1 - Verifica se o Botão está desligado
                        if (digitalRead(led1) == LOW) {
                            cliente.println("<p>Led 1 - Desligado</p>");
                            cliente.println("<p><a href=\"/13/on\"><button class=\"button\">Liga</button></a></p>");
                        } else {
                            cliente.println("<p>Led 1 - Ligado</p>");
                            cliente.println("<p><a href=\"/13/off\"><button class=\"button button2\">Desliga</button></a></p>");
                        }
                        
                        // Botão LED2 - Verifica se o Botão está desligado
                        if (digitalRead(led2) == LOW) {
                            cliente.println("<p>Led 2 - Desligado</p>");
                            cliente.println("<p><a href=\"/12/on\"><button class=\"button\">Liga</button></a></p>");
                        } else {
                            cliente.println("<p>GPIO 12 - Ligado</p>");
                            cliente.println("<p><a href=\"/12/off\"><button class=\"button button2\">Desliga</button></a></p>");
                        } 

                        // Botão LED3 - Verifica se o Botão está desligado
                        if (digitalRead(led3) == LOW) {
                            cliente.println("<p>LED da Placa - Desligado</p>");
                            cliente.println("<p><a href=\"/2/on\"><button class=\"button\">Liga</button></a></p>");
                        } else {
                            cliente.println("<p>LED da Placa - Ligado</p>");
                            cliente.println("<p><a href=\"/2/off\"><button class=\"button button2\">Desliga</button></a></p>");
                        } 
                        cliente.println("</body></html>"); //Finialização do body e HTML
                        cliente.println();
                        break;
                    } else{
                        currentLine = "";                  // Limpa a variável
                    }
                } else if(c != '\r'){                      // Indica retorno atribui o C a currentLine
                    currentLine += c;
                }
            }
        }
        header = "";                                       // Limpa a variável
        cliente.stop();                                    // Desconecta do Servidor
    }
}

Vamos dar uma olhada mais de perto no código:

Incluindo Bibliotecas

Primeiramente temos que incluir as bibliotecas que usamos em nosso projeto.

//Bibliotecas ----------------------------------------------------------------------------------------
#include <WiFi.h>                                          // Responsável pelo WiFi

Definições de Pinos

Então definimos os pinos dos LEDs.

//Declaração de pinos - LED --------------------------------------------------------------------------
const int led1 = 13;                                       // Define Pino do LED
const int led2 = 12;                                       // Define Pino do LED
const int led3 = 2;                                        // Define Pino do LED

Definições WiFi

Logo após definimos o nome, senha do WiFi e um objeto chamado server.

//WiFi -----------------------------------------------------------------------------------------------
const char* ssid = "<NOME-DA-REDE>";                       // Nome da rede WiFi
const char* password =  "<SENHA-DA-REDE>";                 // Senha do WiFi
WiFiServer server(80);                                     // Declaração do servidor junto a sua porta

Variáveis Globais

Logo após declaramos 1 variável global que será a header.

//Variável Globais -----------------------------------------------------------------------------------
String header;                                             // Variável de Controle URL

Funções Setup

Então agora na função setup, será onde iremos realizar a inicialização da serial juntamente com o WiFi e Sevidor, também iremos configurar os pinos dos LEDs.

//Setup ----------------------------------------------------------------------------------------------
void setup() {
    Serial.begin(115200);                                  // Inicialização do Monitor Serial

    pinMode(led1, OUTPUT);                                 // Configura LED como OUTPUT
    pinMode(led2, OUTPUT);                                 // Configura LED como OUTPUT
    pinMode(led3, OUTPUT);                                 // Configura LED como OUTPUT

    //Configurações de WiFi
    WiFi.begin(ssid, password);                            // Tenta se conectar no WiFi
    Serial.print("Conectando no WiFi ");                   // Imprime na Serial
    Serial.println(ssid);                                  // Imprime nome da rede
    while (WiFi.status() != WL_CONNECTED) {                // Verifica se a Conexão foi realizada
        delay(500);                                        // Espera 0,5s
        Serial.print(".");
    }
    Serial.println("");
    Serial.println("WiFi Conectado");                      // Imprime que foi conectado
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());                        // Imprime o IP do ESP32
    server.begin(); // Inicia o servidor
    Serial.println("Servidor Iniciado na porta 80");       // Imprime a porta do Servidor
}

Funções Loop

Em seguida na função loop, iremos desenvolvemos nossa pagina HTML juntamente com todos as nossas funções de ligar e desligar o LED.

//Loop ------------------------------------------------------------------------------------------------
void loop() {
    WiFiClient cliente = server.available();
    if(cliente){
        String currentLine="";                             // Declara variável vazia
        while(cliente.connected()){                        // Faz loop enquanto tiver cliente conectado
            if(cliente.available()){                       // Verifica se tem algum dado sendo passado
                char c = cliente.read();                   // Atribui a C as informações do cliente
                header += c;                               // Incrementa o header com oq tem em C
                if(c == '\n'){
                    if(currentLine.length() == 0){
                        cliente.println("HTTP/1.1 200 OK"); // Retorna para o Cliente a solicitação
                        cliente.println("Content-type:text/html"); // Informa o formato do conteúdo
                        cliente.println("Connection: close");
                        cliente.println("");

                        // Verifica se a URL recebeu o protocolo GET para realizar as devidas funções
                        if (header.indexOf("GET /13/on") >= 0) {
                            Serial.println("GPIO 13 on");
                            digitalWrite(led1, HIGH);
                        } else if (header.indexOf("GET /13/off") >= 0) {
                            Serial.println("GPIO 13 off");
                            digitalWrite(led1, LOW);
                        } else if (header.indexOf("GET /12/on") >= 0) {
                            Serial.println("GPIO 12 on");
                            digitalWrite(led2, HIGH);
                        } else if (header.indexOf("GET /12/off") >= 0) {
                            Serial.println("GPIO 12 off");
                            digitalWrite(led2, LOW);
                        } else if (header.indexOf("GET /2/on") >= 0) {
                            Serial.println("GPIO 2 on");
                            digitalWrite(led3, HIGH);
                        } else if (header.indexOf("GET /2/off") >= 0) {
                            Serial.println("GPIO 2 off");
                            digitalWrite(led3, LOW);
                        }
                
                        //HTML
                        cliente.println("<!DOCTYPE html><html>");
                        cliente.print("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
                        cliente.println("<title>ESP32 - WIFI</title>");

                        //CSS
                        cliente.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto;");
                        cliente.println(" text-align: center;}");
                        cliente.println(".button { background-color: #0000FF; border: none; color: white; padding: 80px 80px;");
                        cliente.println("text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;border-radius: 10px;}");
                        cliente.println(".button2 {background-color: #555555;}</style></head>");

                        //Body
                        cliente.println("<body><h1>ESP32 Acionamento Led </h1>");

                        // Botão LED1 - Verifica se o Botão está desligado
                        if (digitalRead(led1) == LOW) {
                            cliente.println("<p>Led 1 - Desligado</p>");
                            cliente.println("<p><a href=\"/13/on\"><button class=\"button\">Liga</button></a></p>");
                        } else {
                            cliente.println("<p>Led 1 - Ligado</p>");
                            cliente.println("<p><a href=\"/13/off\"><button class=\"button button2\">Desliga</button></a></p>");
                        }
                        
                        // Botão LED2 - Verifica se o Botão está desligado
                        if (digitalRead(led2) == LOW) {
                            cliente.println("<p>Led 2 - Desligado</p>");
                            cliente.println("<p><a href=\"/12/on\"><button class=\"button\">Liga</button></a></p>");
                        } else {
                            cliente.println("<p>GPIO 12 - Ligado</p>");
                            cliente.println("<p><a href=\"/12/off\"><button class=\"button button2\">Desliga</button></a></p>");
                        } 

                        // Botão LED3 - Verifica se o Botão está desligado
                        if (digitalRead(led3) == LOW) {
                            cliente.println("<p>LED da Placa - Desligado</p>");
                            cliente.println("<p><a href=\"/2/on\"><button class=\"button\">Liga</button></a></p>");
                        } else {
                            cliente.println("<p>LED da Placa - Ligado</p>");
                            cliente.println("<p><a href=\"/2/off\"><button class=\"button button2\">Desliga</button></a></p>");
                        } 
                        cliente.println("</body></html>"); //Finialização do body e HTML
                        cliente.println();
                        break;
                    } else{
                        currentLine = "";                  // Limpa a variável
                    }
                } else if(c != '\r'){                      // Indica retorno atribui o C a currentLine
                    currentLine += c;
                }
            }
        }
        header = "";                                       // Limpa a variável
        cliente.stop();                                    // Desconecta do Servidor
    }
}

E assim finalizamos todo código do Sender.

Resultado do Projeto ESP32 com WiFi


Por fim esse foi o resultado obtido com nosso projeto.

Web Server - ESP32 com WiFi

Agradecemos sua Presença


Por fim, espero que tenham gostado e aprendido. Compartilhe com seus colegas e deixe um comentário de qual projeto deveria ser o próximo aqui no Blog da WJ Componentes!!
Enfim estarei deixando os arquivos do código-fonte e Fritzing, software e sites utilizados e deixarei também o GitHub da biblioteca utilizada.
Fique à vontade para tirar suas dúvidas nos comentários.

Software e Sites Utilizados

GitHub das Bibliotecas Utilizadas

Post Relacionados

    Posts mais Recentes

    Julio Cesar Bonow Manoel

    Julio Cesar Bonow Manoel

    Cursando Engenharia da Computação pelo Centro Universitário Facens e atua no desenvolvimento de projetos na WJ Componentes. Participante da equipe de robótica Omegabotz.

    Deixe um comentário

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