Site icon Blog Usinainfo

ESP32 WiFi: Comunicação com a Internet

A conexão wireless é, sem dúvidas, um dos principais motivos para diversos entusiastas da eletrônica utilizar o ESP32 Wifi em seus projetos. Ainda, devido ao seu baixo custo e grande abrangência de aplicação, esse módulo recebe um enfoque especial em aplicações da Internet of Things – IoT. Tendo isso em vista, aprenderemos, ao longo desse tutorial, a utilizar a biblioteca WiFi.

Esse tutorial esp32 está organizado da seguinte maneira: primeiramente, iremos conectar a ESP32 em uma rede WiFi; em seguida, veremos como obter o endereço MAC da placa; por fim, iremos criar um web browser o qual acionaremos ou desligaremos uma LED.

 

Wifi.h

Essa biblioteca, que já vem instalada na biblioteca do Arduino, fornece diversas funções. Estudaremos algumas delas, através de exemplos, para que possamos desenvolver projetos básicos. O principal objetivo é auxiliar o leitor a iniciar a programação referente a comunicação WiFi.

 

Exemplo 1: ESP32 Wifi conectando-se a uma rede WiFi

Primeiramente, precisamos incluir a biblioteca. Para isso, utilize o comando:

[crayon-66340867319ba246867681/]

Feito isso, vamos criar duas constantes para armazenar o nome e a senha da rede a qual você irá se conectar. Para isso, substitua o conteúdo que está dentro das aspas pelo nome e senha da sua rede, conforme o código abaixo.

[crayon-66340867319ce148486201/]

Em seguida, no void setup, faremos a inicialização da comunicação Serial e da comunicação WiFi.

[crayon-66340867319cf269227983/]

Na linha 5 encontra-se a função WiFi.status(), que retorna uma constate informando se houve problema de conexão ou não. Ela está dentro de uma estrutura de repetição, while, que verifica se o status é de conectado (WL_CONNECTED). Se não for, então o haverá um tempo de meio segundo e a verificação irá se repetir. Caso você tenha inserido algum caracter errado no nome da rede e na senha, o seu código ficará mostrando apenas “Connecting to WiFi..”.

Assim que a ESP32 conectar-se, será exibido no monitor serial a mensagem “Connected to the WiFi network”.

 

WiFi.begin()

Essa função é necessária para que a placa se conecte a rede WiFi. Seu uso normalmente acontece com a passagem de dois parâmetros para a função, o nome e senha da rede. Ela pode também ser usada sem eles, conforme uma explicação detalhada pode ser encontrada na referência da linguagem. Além disso, é possível também usá-la passando como parâmetro apenas o nome da rede, ssid, para redes sem senha.

 

WiFi.status()

Essa função pode retornar, além de “WL_CONNECTED” quando a placa estiver conectada a rede, algumas das seguintes constantes:

Existem outras, também, que podem ser conferidas na referência da linguagem. As descritas acima são, entretanto, as mais comuns.

 

Exemplo 2: ESP32 Wifi obtendo o endereço MAC

Esse endereço é uma identificação única de um dispositivo de rede. É muito interessante, portanto, que saibamos o endereço das placas que usaremos. Observe o código abaixo.

[crayon-66340867319d1236658355/]

Duas novas funções são executadas. Veremos elas em mais detalhes.

 

WiFi.mode()

Essa função ajusta o modo de operação do chip WiFi da placa. A um nível mais baixo, ela chama a função interna esp_wifi_set_mode(), que, por sua vez, aceita como parâmetro quatro modos de operação. Veremos eles a seguir.

WiFi.macAddress()

Essa é uma simples função da classe WiFi, usada para retornar o endereço MAC de um dispositivo de rede. O retorno é o endereço no formato hexadecimal. Por exemplo: “A4:CF:12:45:AE:CC”.

 

Exemplo 3: ESP32 Wifi Executando um WebServer

Um web server é, em poucas palavras, um programa que responde a solicitações HTTP, processando páginas e códigos e enviando dados para o cliente. O cliente é o quem faz as solicitações para o web browser, e podem haver diversos clientes fazendo diversas requisições em um dado momento. Nesse tutorial, seremos breves quanto ao funcionamento desse sistema. Para realmente compreender cada etapa, é necessário ter um aprofundamento de conceitos de Redes. Porém, nosso objetivo aqui é demonstrar como criar e manipular um servidor, mesmo sem ter pleno conhecimento de arquitetura de redes. Isso é possível devido a programação de alto nível de abstração que a biblioteca WiFi.h nos fornece. Em seguida, analisaremos pedaço por pedaço do código que usaremos.

Cabeçalho

Primeiramente, incluímos a biblioteca WiFi.h. Você poderá ver, em outros códigos, bibliotecas adicionais. Elas são muito úteis para aplicações mais robustas por fornecerem funções avançadas. Porém, não iremos utilizá-las no nosso web server devido a baixa complexidade de iniciar um pela WiFi.h.

Em seguida, definimos a rede e a senha da rede a qual a ESP32 irá se conectar. Nessa etapa, você deve substituir o conteúdo entre aspas pelas credencias da sua rede. Na sequência, declaramos uma variável LED para armazenar o pino o qual iremos manipular pela web. Caso você queira mudar o pino, basta alterar o valor da variável. A última linha do cabeçalho define a porta que o servidor irá utilizar. A mais comum é a utilização da porta 80.

[crayon-66340867319d3754084513/]

void setup()

Explicaremos essa e a próxima seção de maneira mais dividida, de forma a facilitar o entendimento. No final, você poderá encontrar o código completo caso deseje copiá-lo.

Nessa seção, iniciamos a comunicação serial para visualizarmos, no Serial Monitor, o status da programação. Isso servirá como uma espécie de log, informando-nos o que está acontecendo no sistema. Em seguida, definimos a porta LED, GPIO 2, como saída de dados.

[crayon-66340867319d4578608939/]

A seguir, teremos as primeiras informações que aparecerão no Monitor Serial quando o código começar a ser executado. O primeiro println é apenas para iniciar a frase abaixo dele em um novo parágrafo. Será exibido, o nome da rede a qual a ESP32 irá tentar se conectar e, logo a seguir, a tentativa de conexão será iniciada.

[crayon-66340867319df509911129/]

Nessa estrutura de repetição, while, verificamos se a conexão obteve sucesso. Enquanto a função WiFi.status não retornar “WL_CONNECTED”, uma constante que define o status da conexão como bem sucedida, serão exibidos pontos no Monitor Serial. Portanto, caso você tenha inserido alguma informação incorreta nas variáveis ssid e password, então o código ficará exibindo pontinhos infinitamente.

[crayon-66340867319e1786187764/]

Em caso de sucesso na tentativa de conexão, serão exibidas as mensagens abaixo, inclusive o endereço IP da NodeMCU. Em seguida, o servidor web será iniciado, através da função server.begin. Como definido anteriormente, a porta a qual esse servidor receberá dados será na porta padrão 80.

[crayon-66340867319e3554214874/]

void loop()

Essa função inicializa uma variável client, que recebe os parâmetros do objeto cliente – derivado da classe WiFi.h. Em outras palavras, ele verifica se existe um cliente conectado com dados a serem transmitidos.

[crayon-66340867319e4777022358/]

Em seguida, caso exista um cliente, então é notificado no Monitor Serial que um novo client se conectou. Em seguida, criamos uma variável para armazenar a mensagem desse client. A estrutura de repetição a seguir, while, mantém-se até o cliente ser desconectado. Na sequência, na estrutura de decisão if, verificamos se existem bytes, dados, a serem lidos. Caso existam, então os armazenamos na variável c e mostramo-os no Monitor Serial. Por fim, verificamos se o caractere é um símbolo de nova linha, representado por ‘\n’.

[crayon-66340867319e6810421195/]

Em seguida, é verificado, através da função length, se a mensagem terminou – ou seja, se não há mais bytes recebidos. Feito isso, é dado uma resposta ao cliente, através da função client.println, de forma a notificá-lo que a mensagem foi recebida.

[crayon-66340867319e8689714237/]

Na função client.print, enviamos duas mensagens de texto com marcações HTML. Nessa seção, caso você deseje, pode alterar para exibir outras tags de HTML, personalizando a página. Entretanto, no nosso caso, apenas é criado duas frases, uma para acionar a LED e outra para apagá-la.

[crayon-66340867319ea972014534/]

Na sequência, mandamos uma linha em branco para notificar o fim da mensagem. Logo após encerramos o laço de repetição while, desconectando o client.

[crayon-66340867319eb000262174/]

Esta estrutura else remete a verificação dos caracteres da mensagem recebida pelo cliente.  A primeira, impede a string de ficar com espaços em branco. A segunda, ‘\r’ significa um caractere de retorno, indicando o início de uma nova linha. Por fim, adicionamos ele a variável currentLine como parte da mensagem.

[crayon-66340867319f9807792032/]

Finalmente, verificamos se a requisição foi para acionar a LED (H) ou desliga-la (L). Em seguida, finalizamos a conexão com o cliente através da função client.stop e notificamos no Monitor Serial.

[crayon-66340867319fa921414431/]

Código Completo do Web Server

[crayon-66340867319fb765521218/]

Feito isso, podemos conectar-se à página do web server através do computador, indicando o endereço IP que foi mostrado na Monitor Serial. Confira abaixo como a página deve aparecer em um web browser.

Também podemos acessá-la de um celular ou tablet, como mostra a imagem abaixo.

Conclusão

Por fim, esses foi o primeiro tutorial esp32 envolvendo a comunicação sem fio com a Internet por meio da placa de desenvolvimento NodeMCU ESP32 Wifi. Apresentamos conceitos essenciais para o desenvolvimento de códigos mais complexos e que envolvam mais dispositivos. Em breve, teremos mais projetos envolvendo a ESP. Fique ligado!

Conheça toda Linha ESP32 e Acessórios no site da UsinaInfo.

Sair da versão mobile