O ESP32 é um microcontrolador com Wi-Fi & Bluetooth integrados e pode ser programado com a mesma IDE do Arduino.
Para saber o funcionamento do Bluetooth, clique no link a seguir.
Bluetooth: o que é e como funciona?Clique aqui
Sobre o ESP32
Fabricado pela empresa chinesa Espressif, é um chip com Bluetooth e Wi-Fi de 2,4 GHz, portanto, pode ser usado para projetos com a Internet das Coisas (IoT). Possui o microprocessador Xtensa LX6 Dual-Core de 32 bits e uma velocidade de clock de 240 MHz. Existem muitos modelos de placas com ESP32, para este post, foi escolhido o ESP32 Wemos D1 R32.
ESP32 Wemos D1 R32


Habilitando o ESP32 na IDE do Arduino
Primeiramente, conecte a placa em uma porta USB no PC. Depois, na janela da IDE do Arduino, vá em Arquivo -> Preferências.




Então, clique em Ferramentas -> Placa -> esp32. Para usar a placa ESP32 Wemos D1 R32, escolha a placa WEMOS D1 R32. Não se esqueça de selecionar a porta serial (COM). Finalmente, você pode programá-lo como se fosse um Arduino. Exceto que deve colocar os números dos pinos que aparecem na placa. Por exemplo, para acionar um LED ligado no pino IO14, deve escrever a linha de código “#define PINO_LED 14” ou “const int LED=14;”.
Controlando um servomotor com o ESP32
Aqui é mostrado como controlar um servomotor usando o microcontrolador e um servidor web. Primeiramente, faça as conexões da placa com o servo: fio vermelho com o 5V, fio marrom ou preto com o GND e o fio laranja, amarelo ou branco de sinal com o GPIO13 ou qualquer outro pino com PWM.

A biblioteca para controlar servomotores com o ESP32 se chama ESP32Servo.h.
Criando um servidor web
Com a finalidade de controlar o servomotor usando a internet, vamos criar um servidor web. Carregue este código para verificar se o microcontrolador consegue detectar redes WiFi próximas.
#include <WiFi.h>
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.disconnect();
delay(100);
}
void loop() {
Serial.println("Scanning for Wi-Fi networks...");
int n = WiFi.scanNetworks();
if (n == 0) {
Serial.println("No networks found");
} else {
for (int i = 0; i < n; ++i) {
Serial.printf("%d: %s (%d dBm)\n", i + 1, WiFi.SSID(i).c_str(), WiFi.RSSI(i));
}
}
delay(5000);
}

Em seguida, carregue este código para encontrar o IP da placa e escolha uma rede que o ESP32 possa detectar.
#include <WiFi.h> //Biblioteca necessária.
const char* ssid = "Coloque o nome da sua rede WiFi aqui.";
const char* password = "Coloque a senha da sua rede aqui.";
WiFiServer server(80); //Define a porta onde o servidor opera, 80 para html.
void setup()
{
Serial.begin(115200);
delay(10);
// Conectando ao Wi-Fi
Serial.println("Conectando ao WiFi...");
WiFi.begin(ssid, password); //Inicia a conexão com a rede WiFi.
while (WiFi.status() != WL_CONNECTED) //Neste loop, o ESP32 tenta se //conectar com //a rede até conseguir.
{
delay(1000);
Serial.println("Tentando conectar...");
}
Serial.println("Conectado!");
Serial.print("Endereço IP: ");
Serial.println(WiFi.localIP());
// Iniciando o servidor.
server.begin();
}
void loop()
{
WiFiClient client = server.available();
if (client) //Verifica se há cliente conectado.
{
Serial.println("Cliente conectado.");
String request = "";
while (client.connected())
{
if (client.available())//Interagir com o cliente se estiver disponível.
{
char c = client.read();//Lendo os dados enviados pelo cliente.
request += c;
if (c == '\n')
{
// Requisição completa recebida
Serial.print("Requisição: ");
Serial.println(request);
// Resposta HTTP
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println();
// Corpo da página
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<h1>Olá, Mundo!</h1>");
client.println("</html>");
break;
}
}
}
delay(1);
client.stop();
Serial.println("Cliente desconectado.");
}
}

Ao digitar http://’seu número de IP’ no navegador, deve aparecer esta página. Não digite https://’número do IP’, senão o servidor não abrirá.

Modificando o código para controlar o servomotor
Este é o código modificado para controlar a posição do servomotor com 5 botões.
#include <ESP32Servo.h>
#include <WiFi.h>
static const int servoPin=13;
const char* ssid = "Coloque o nome da rede aqui";
const char* password = "Coloque a senha da rede aqui.";
int p;
WiFiServer server(80);
Servo servo;
void setup()
{
servo.attach(servoPin);
Serial.begin(115200);
delay(10);
// Conectando ao Wi-Fi
Serial.println("Conectando ao WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println("Tentando conectar...");
}
Serial.println("Conectado!");
Serial.print("Endereço IP: ");
Serial.println(WiFi.localIP());
// Iniciando o servidor
server.begin();
p=90;
servo.write(p);
}
void loop()
{
WiFiClient client = server.available();
if (client)//Verifica se há cliente conectado.
{
Serial.println("Cliente conectado.");
String request = "";
while (client.connected())
{
if (client.available())
{
char c = client.read();
request += c;
if (c == '\n')
{
//Processando a requisição.Como devem funcionar os botões.
if (request.indexOf("/SERVO=0") != -1){
p=0;
servo.write(p);
}
if (request.indexOf("/SERVO=180") != -1){
p=180;
servo.write(p);
}
if (request.indexOf("/SERVO=90") != -1){
p=90;
servo.write(p);
}
if (request.indexOf("/SERVO=PLUS") != -1){
p=p+10;
servo.write(p);
}
if (request.indexOf("/SERVO=MINUS") != -1){
p=p-10;
servo.write(p);
}
// Resposta HTTP
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println();
// Corpo da página
client.println("<!DOCTYPE HTML>");
client.println("<html>");
client.println("<h1>Buttons to control servo</h1>");
//Estes são botões que aparecerão no servidor web.
client.println("<p><a href=\"/SERVO=0\"><button>0</button></a></p>");
client.println("<p><a href=\"/SERVO=180\"><button>180</button></a></p>");
client.println("<p><a href=\"/SERVO=90\"><button>90</button></a></p>");
client.println("<p><a href=\"/SERVO=PLUS\"><button>+</button></a></p>");
client.println("<p><a href=\"/SERVO=MINUS\"><button>-</button></a></p>");
client.println("</html>");
break;
}
}
}
delay(1);
client.stop();
Serial.println("Cliente desconectado.");
}
}
O vídeo abaixo mostra o controle do servomotor por um servidor web.

