ESP32 - WebSocket
Neste tutorial, vamos aprender o que é o WebSocket, por que precisamos usá-lo para controlar o ESP32 de forma fluida e como usar o WebSocket com o ESP32. Em um exemplo prático, vamos aprender a criar um aplicativo de chat entre o navegador e o ESP32, que permite:
- Digitar uma mensagem na janela de chat do navegador e enviá-la ao ESP32. Você pode adaptar isso para controlar o ESP32.
- Receber mensagens em tempo real do ESP32. Você pode adaptar isso para monitorar o ESP32 em tempo real.

Hardware Necessário
Or you can buy the following kits:
| 1 | × | DIYables ESP32 Starter Kit (ESP32 included) | |
| 1 | × | DIYables ESP32 S3 Starter Kit (ESP32 S3 included) | |
| 1 | × | DIYables Sensor Kit (18 sensors/displays) |
O que é o WebSocket do ESP32?
Agora você pode estar se perguntando: "O que é o WebSocket?" É bem simples: o WebSocket é uma tecnologia que permite que um navegador converse diretamente com um servidor web em tempo real.
- Sem o WebSocket, você precisa atualizar a página para receber novidades. Isso não é muito conveniente.
- Com o WebSocket, a página e o servidor ficam conectados o tempo todo. Isso significa que eles podem trocar informações instantaneamente, sem precisar recarregar a página.
Você provavelmente encontra o WebSocket em aplicativos web do dia a dia, como jogos online, mensagens instantâneas e atualizações do mercado de ações.
Por que precisamos do WebSocket para controlar o ESP32 de forma fluida?
Imagine que você quer controlar seu carrinho de controle remoto usando uma interface web no celular ou no computador. Sem o WebSocket, toda vez que você quisesse mudar a direção ou a velocidade do carrinho, precisaria atualizar a página web. É como ter que apertar um botão de "recarregar" toda vez que quer que seu comando chegue ao carrinho.
Agora, com o WebSocket, é como ter uma conexão contínua e direta entre o seu celular ou computador e o carrinho. Você não precisa mais atualizar a página toda vez que quer guiar o carrinho ou ajustar a velocidade. É como se o carrinho estivesse sempre ouvindo seus comandos em tempo real, sem atrasos causados por recarregamentos constantes da página.
Em geral, o WebSocket permite que você:
- Envie dados do navegador para o ESP32 sem recarregar a página.
- Envie dados do ESP32 para o navegador sem recarregar a página.
Isso permite uma comunicação bidirecional em tempo real.
Benefícios do WebSocket com o ESP32:
- Controle em Tempo Real: O WebSocket permite comunicação instantânea com o ESP32, garantindo respostas rápidas aos comandos para uma experiência de uso fluida.
- Conexão Persistente: Mantenha uma ligação contínua sem atualizar a página de controle, criando uma linha de comunicação sempre pronta para instruções imediatas.
- Eficiência: Tenha respostas rápidas sem a necessidade de recarregar a página o tempo todo, melhorando a satisfação e a eficiência de uso.
Chat Web com o ESP32 via WebSocket
O conteúdo da página web (HTML, CSS, JavaScript) fica armazenado separadamente em um arquivo index.h. Assim, teremos dois arquivos de código no Arduino IDE:
- Um arquivo .ino, que é o código do ESP32 e cria um servidor web e um servidor WebSocket
- Um arquivo .h, que contém o conteúdo da página web.
Passos Rápidos
- Se esta é a primeira vez que você usa o ESP32, veja como configurar o ambiente para ESP32 no Arduino IDE.
- Conecte a placa ESP32 ao seu PC por um cabo micro USB
- Abra o Arduino IDE no seu PC.
- Selecione a placa ESP32 correta (por exemplo, ESP32 Dev Module) e a porta COM.
- Abra o Library Manager clicando no ícone Library Manager na barra de navegação à esquerda do Arduino IDE.
- Pesquise por “DIYables ESP32 WebServer” e encontre a biblioteca Web Server criada pela DIYables.
- Clique no botão Install para instalar a biblioteca Web Server.

- No Arduino IDE, crie um novo sketch e dê um nome a ele, por exemplo, newbiely.com.ino
- Copie o código abaixo e abra no Arduino IDE
- Modifique as informações de WiFi (SSID e senha) no código para corresponder às credenciais da sua rede.
- Crie o arquivo index.h no Arduino IDE da seguinte forma:
- Clique no botão logo abaixo do ícone do Serial Monitor e escolha New Tab, ou use as teclas Ctrl+Shift+N.
- Dê ao arquivo o nome index.h e clique no botão OK
- Copie o código abaixo e cole no index.h.
- Agora você tem o código em dois arquivos: newbiely.com.ino e index.h
- Clique no botão Upload no Arduino IDE para fazer o upload do código para o ESP32.
- Abra o Serial Monitor
- Veja o resultado no Serial Monitor.
- Anote o endereço IP exibido e digite esse endereço na barra de endereços de um navegador no seu celular ou PC.
- Você verá a página web como abaixo:
- Clique no botão CONNECT para conectar a página ao ESP32 via WebSocket.
- Digite algumas palavras e envie-as ao ESP32.
- Você verá a resposta do ESP32.
- Se você modificar o conteúdo HTML no index.h e não mexer em nada no arquivo newbiely.com.ino, ao compilar e fazer o upload do código para o ESP32, o Arduino IDE não vai atualizar o conteúdo HTML.
- Para fazer o Arduino IDE atualizar o conteúdo HTML nesse caso, faça uma alteração no arquivo newbiely.com.ino (por exemplo, adicione uma linha vazia ou um comentário....)




※ Nota:
Explicação do Código Linha por Linha
O código do ESP32 acima contém uma explicação linha por linha. Leia os comentários no código!
Como o Sistema Funciona
O código do ESP32 funciona criando um servidor web e um servidor WebSocket. O processo acontece assim:
- Quando você digita o endereço IP do ESP32 em um navegador, é feita uma requisição da página web (Interface do Usuário) ao ESP32.
- O servidor web do ESP32 responde enviando o conteúdo da página web (HTML, CSS, JavaScript).
- Em seguida, o seu navegador exibe a página web.
- Quando você clica no botão CONNECT, o código JavaScript embutido na página web estabelece uma conexão WebSocket com o servidor WebSocket no ESP32.
- Com a conexão WebSocket estabelecida, quando você digita algo e clica no botão SEND, o código JavaScript envia esse texto ao ESP32 pela conexão WebSocket, em segundo plano.
- Ao receber o valor do ângulo, o servidor WebSocket envia uma resposta de volta à página web.
Você pode conhecer outros exemplos de WebSocket com ESP32 abaixo: