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:
C#
1 | #include <WiFi.h> |
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.
C#
1 2 | const char* ssid = "nome_da_rede"; const char* password ="senha_da_rede"; |
Em seguida, no void setup, faremos a inicialização da comunicação Serial e da comunicação WiFi.
C#
1 2 3 4 5 6 7 8 9 10 11 12 | void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.println("Connecting to WiFi.."); } Serial.println("Connected to the WiFi network"); } void loop() {} |
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:
- WL_NO_SSID_AVAIL: quando a rede não for encontrada.
- WL_CONNECT_FAILED: quando as tentativas de conexão falharem.
- WL_DISCONNECTED: quando ela estiver desconectada de uma rede.
- WL_CONNECTION_LOST: quando a conexão for perdida ou interrompida (deixar de receber/enviar pacotes).
- WL_IDLE_STATUS: quando está ou em processo de tentativas de conexão ou as tentativas de conexão atingiram um limite e não foi obtido êxito na conexão, ou seja, a WiFi está ativa mas não conectada.
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.
1 2 3 4 5 6 7 8 9 | #include <WiFi.h> void setup(){ Serial.begin(115200); WiFi.mode(WIFI_MODE_STA); Serial.println(WiFi.macAddress()); } void loop(){} |
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 internaesp_wifi_set_mode(), que, por sua vez, aceita como parâmetro quatro modos de operação. Veremos eles a seguir.
- WIFI_MODE_NULL: nesse modo, a estrutura de dados relativa ao funcionamento de rede não está alocada no chip, ou seja, não foram inicializadas as rotinas nem do modo AP nem do modo STA.
- WIFI_MODE_STA: esse, também chamado de station mode, é o modo de operação para que o dispositivo funcione como um cliente wireless. Um exemplo de uso é quando fizermos um web server: a ESP32 será conectada a uma rede WiFi e fornecerá páginas web no endereço dela. Na figura abaixo visualiza-se um exemplo da topologia nesse modo de operação.
- WIFI_MODE_AP: esse, também conhecido como Access Point mode, é o modo de operação para que o dispositivo funcione como um servidor/roteador. Esse modo é interessante para o caso de monitoramento de dados provenientes de outras placas ESP32. Você ter como clientes não apenas dispositivos como celular e computadores, mas também outras placas que tenham WiFi. Na figura abaixo visualiza-se um exemplo da topologia nesse modo de operação.
- WIFI_MODE_APSTA: esse é um modo de coexistência entre os modos STA e AP. Note que, nesse modo, o ESP32 prioriza o modo STA sob o AP.
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.
C#
1 2 3 4 5 | #include <WiFi.h> const char* ssid = "SSID da sua rede"; const char* password = "Senha da sua rede"; int LED = 2; WiFiServer server(80); |
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.
C#
1 2 | Serial.begin(115200); pinMode(LED, OUTPUT); |
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.
C#
1 2 3 4 | Serial.println(); Serial.print("Conectando-se a "); Serial.println(ssid); WiFi.begin(ssid, password); |
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.
C#
1 2 3 4 5 | while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); |
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.
C#
1 2 3 4 | Serial.println("WiFi conectada."); Serial.println("Endereço de IP: "); Serial.println(WiFi.localIP()); server.begin(); |
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.
C#
1 | WiFiClient client = server.available(); |
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’.
C#
1 2 3 4 5 6 7 8 | if (client) { Serial.println("Novo client."); String currentLine = ""; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); if (c == '\n') { |
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.
C#
1 2 3 4 | if (currentLine.length() == 0) { client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); |
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.
C#
1 2 | client.print("Click <a href=\"/H\">here</a> to turn the LED on pin 2 on.<br>"); client.print("Click <a href=\"/L\">here</a> to turn the LED on pin 2 off.<br>"); |
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.
C#
1 2 | client.println(); break; |
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.
C#
1 2 3 4 5 6 | } else { currentLine = ""; } } else if (c != '\r') { currentLine += c; } |
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.
C#
1 2 3 4 5 6 7 8 9 10 11 12 | if (currentLine.endsWith("GET /H")) { digitalWrite(LED, HIGH); } if (currentLine.endsWith("GET /L")) { digitalWrite(LED, LOW); } } } client.stop(); Serial.println("Client Disconnected."); } } |
Código Completo do Web Server
C#
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | #include <WiFi.h> const char* ssid = "SSID da sua rede"; const char* password = "Senha da sua rede"; int LED = 2; WiFiServer server(80); void setup() { Serial.begin(115200); pinMode(LED, OUTPUT); Serial.println(); Serial.print("Conectando-se a "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi conectada."); Serial.println("Endereço de IP: "); Serial.println(WiFi.localIP()); server.begin(); } void loop() { WiFiClient client = server.available(); if (client) { Serial.println("New Client."); String currentLine = ""; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); if (c == '\n') { if (currentLine.length() == 0) { client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); client.print("Click <a href=\"/H\">here</a> to turn the LED on pin 2 on.<br>"); client.print("Click <a href=\"/L\">here</a> to turn the LED on pin 2 off.<br>"); client.println(); break; } else { currentLine = ""; } } else if (c != '\r') { currentLine += c; } if (currentLine.endsWith("GET /H")) { digitalWrite(LED, HIGH); } if (currentLine.endsWith("GET /L")) { digitalWrite(LED, LOW); } } } client.stop(); Serial.println("Client Disconnected."); } } |
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 LinhaESP32e Acessórios no site da UsinaInfo.
FAQs
How do I connect my ESP32 to the Internet? ›
- We must include the WiFi. ...
- Then we enter the name of the network and its password.
- We put the ESP32 in STATION mode with the function WiFi. ...
- The ESP32 tries to connect to the Wi-Fi network using the function WiFi. ...
- The connection is not instantaneous!
ESP32 can perform as a complete standalone system or as a slave device to a host MCU, reducing communication stack overhead on the main application processor. ESP32 can interface with other systems to provide Wi-Fi and Bluetooth functionality through its SPI / SDIO or I2C / UART interfaces.
What is the capability of ESP32 Wi-Fi? ›ESP32 implements TCP/IP, full 802.11 b/g/n/e/i WLAN MAC protocol, and Wi-Fi Direct specification. This means ESP 32 can speak to most of the WiFi Routers out there when used in station(client) mode. Also it is able to create an Access point with full 802.11 b/g/n/e/i. ESP32 also supports the Wi-Fi Direct .
What is the range of ESP32 Wi-Fi connection? ›DroneBridge for ESP32
Typical WiFi range is ~50m-200m depending on the antennas. High gain directional antennas would offer even more range.
The ESP32 will connect to the Wi-Fi network with the strongest signal (RSSI). If the connection is lost, it will connect to the next network on the list. Read: ESP32 WiFiMulti: Connect to the Strongest Wi-Fi Network (from a list of networks).
How do I use ESP32 as a WiFi hotspot? ›The ESP32 connects to an available WiFi field which in turn is connected to your internet. This is exactly similar to connecting your mobile phone to an available WiFi network. Access Point Mode − This is equivalent to turning on the hotspot on your mobile phone so that other devices can connect to it.
What can you connect to ESP32? ›The ESP32 includes a plethora of built-in peripherals such as capacitive touch, ADCs, DACs, UART, SPI, I2C, PWM, and much more. There are several development platforms available for programming the ESP32. You can use the Arduino IDE, MicroPython, Espruino, Espressif SDK, or one of the platforms listed on WikiPedia.
What is ESP32 for medical devices? ›Patient Health Monitoring on ESP32 Webserver
This system will monitor the parameters like room temperature, room Humidity, Heart Rate, Oxygen Saturation (Sp02) in blood, and body temperature of patients on the ESP32 Webserver.
The ESP32 Bluetooth LE supports up to nine client devices for connection.
What is the function of ESP32 Wi-Fi module? ›ESP32 can connect to internet using its wifi module. It is used here to first scan the available wifi networks, then display the SSID, RSSI, signal strength and also the type of encryption.
What is the Wi-Fi network name for ESP32? ›
The default ESP32 hostname is espressif. There is a method provided by the WiFi. h library that allows you to set a custom hostname.
How can I increase my ESP32 Wi-Fi range? ›An ESP32 Wi-Fi repeater or expander can be used to expand the coverage area of your existing Wi-Fi network. It works by receiving your existing Wi-Fi signal, amplifying it, and then transmitting the enhanced signal.
Does ESP32 have 5GHz Wi-Fi? ›The current ESP32 modules aren't compatible with 5GHz WiFi signals; users will need to wait for the ESP32-C5 for that feature. To get notifications on our latest products, sign-up for our newsletter!
What is the longest range of ESP32? ›A German programmer known as “Jeija” has extended the Wi-Fi range of ESP32 to 10 km, without exceeding regulatory limits, using a directional antenna.
How do I know if ESP32 is connected to the Internet? ›- To check ESP32 connected to wifi use WiFi.status() != WL_CONNECTED.
- In loop you don't need to worry about re-connection in case WiFi Connection lost, ESP32 WiFi Library Takes care of re-connection to WiFi.
It may be that your ESP32 is too far away from your WiFi router. The board antenna is very small and you need to be really close to your router to connect. I use an external 8dbi antenna. * This sketch demonstrates how to scan WiFi networks.
How do I connect ESP32 to WiFi that requires login? ›- #include "WiFi.h"
- const char* ssid = "yourNetworkName"; //choose your wireless ssid.
- const char* password = "yourNetworkPass"; //put your wireless password here.
- void setup() {
- Serial. begin(115200);
- WiFi. begin(ssid, password);
The ESP32 is a low cost micro made by Espressif, which supports Arduino libraries and can connect to WiFi networks. Connecting to a WiFi network is pretty easy. Just call: WiFi. begin("SSID", "Password"); with your network credentials: the network's SSID and password.