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.
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.
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.
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.
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
- Programando Relé RF 4331 -Instruções de emparelhamento do modo de alternância Modo de… Leia mais: Programando Relé RF 433
- Acionando motor DC por meio do pino “Touch” do ESP-32Neste projeto, vamos explorar uma aplicação ainda mais dinâmica e… Leia mais: Acionando motor DC por meio do pino “Touch” do ESP-32
- Acendendo led RGB por meio do pino “Touch” do ESP-32No último post, exploramos o fascinante mundo dos pinos touch… Leia mais: Acendendo led RGB por meio do pino “Touch” do ESP-32
- Utilizando os Pinos touch do ESP32Nesse projeto Vamos aprender a usar os pinos touch´s do… Leia mais: Utilizando os Pinos touch do ESP32
- Como Programar e Localizar o Endereço de uma Tela OLED I2C com Arduinoeste guia, vou levá-lo através dos passos para programar uma… Leia mais: Como Programar e Localizar o Endereço de uma Tela OLED I2C com Arduino
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