ESP32 e WebSockets: Comunicação em Tempo Real para IoT

A comunicação em tempo real é essencial em diversas aplicações modernas, especialmente no campo de Internet das CoisasIntegração do ESP32 com Plataformas de Automação Residencial (ex: Home Assistant)Integração do ESP32 com Plataformas de Automação Residencial (ex: Home Assistant)Aprenda a integrar o ESP32 com Home Assistant de forma prática e segura, configurando Wi-Fi, MQTT, sensores e atuadores para uma casa inteligente. (IoT). O ESP32O que é o ESP32: Introdução e Conceitos BásicosO que é o ESP32: Introdução e Conceitos BásicosDescubra como o ESP32 revoluciona a automação e IoT com dicas práticas e projetos que transformam sua casa conectada. Domine a tecnologia! é um microcontroladorCaracterísticas Técnicas e Funcionalidades do ESP32Características Técnicas e Funcionalidades do ESP32Descubra as especificações completas e os recursos avançados do ESP32, a plataforma ideal para automação, IoT e projetos modernos com segurança. potente e versátil que permite implementar sistemas de comunicação eficientes. Neste artigo, exploraremos como implementar WebSockets no ESP32 para criar uma comunicação bidirecional em tempo realExibindo Dados no Monitor Serial com ESP32Exibindo Dados no Monitor Serial com ESP32Aprenda a configurar e exibir dados no Monitor Serial com ESP32, utilizando exemplos práticos e técnicas de depuração para otimizar seus projetos IoT. entre o dispositivo e um cliente web.

O que são WebSockets?🔗

Os WebSockets são um protocolo de comunicação🌧 Alerta de Enchentes com Sensores de Nível de Rios🌧 Alerta de Enchentes com Sensores de Nível de RiosTutorial sobre sistema IoT com ESP32 e sensores de nível. Descubra a implementação, comunicação robusta e alertas para enchentes em comunidades ribeirinhas. que permite uma conexão persistente e bidirecional entre um cliente (geralmente um navegador web) e um servidor. Diferentemente dos métodos tradicionais, como HTTP, onde o cliente precisa solicitar informações repetidamente (polling), os WebSockets estabelecem um canal onde ambos os lados podem enviar e receber dados a qualquer momento.

Vantagens dos WebSockets

Por que usar WebSockets com ESP32?🔗

O ESP32O que é o ESP32: Introdução e Conceitos BásicosO que é o ESP32: Introdução e Conceitos BásicosDescubra como o ESP32 revoluciona a automação e IoT com dicas práticas e projetos que transformam sua casa conectada. Domine a tecnologia! possui suporte nativo a Wi-Fi e alto poder de processamento, tornando-o ideal para aplicações que exigem comunicação em tempo realExibindo Dados no Monitor Serial com ESP32Exibindo Dados no Monitor Serial com ESP32Aprenda a configurar e exibir dados no Monitor Serial com ESP32, utilizando exemplos práticos e técnicas de depuração para otimizar seus projetos IoT.. Ao implementar WebSockets no ESP32, é possível:

Preparando o Ambiente de Desenvolvimento🔗

Antes de começarmos, é necessário configurarInstalando o Arduino IDE para ESP32 no macOSInstalando o Arduino IDE para ESP32 no macOSAprenda passo a passo a instalar e configurar o Arduino IDE no macOS para programar o ESP32. Siga dicas essenciais para solucionar problemas comuns. o ambiente de desenvolvimento:

Requisitos de Hardware

Requisitos de Software

Instalando as Bibliotecas Necessárias

1. Adicionar suporte ao ESP32 no Arduino IDEInstalando o Arduino IDE para ESP32 no WindowsInstalando o Arduino IDE para ESP32 no WindowsEste tutorial passo a passo ensina como instalar o Arduino IDE e configurar o ESP32 no Windows, garantindo um ambiente ideal para IoT.:

https://dl.espressif.com/dl/package_esp32_index.json
  • Clique em OK.

2. Instalar as bibliotecasHospedando Múltiplas Páginas Web no ESP32Hospedando Múltiplas Páginas Web no ESP32Descubra como hospedar múltiplas páginas web no ESP32 com um guia passo a passo. Aprenda a configurar rotas e interagir via HTTP.:

Implementando um Servidor WebSocket no ESP32🔗

Vamos criar um servidor WebSocket básico no ESP32 que permitirá a comunicação em tempo realExibindo Dados no Monitor Serial com ESP32Exibindo Dados no Monitor Serial com ESP32Aprenda a configurar e exibir dados no Monitor Serial com ESP32, utilizando exemplos práticos e técnicas de depuração para otimizar seus projetos IoT. com um cliente web.

Código do Servidor WebSocket

#include <WiFi.h>
#include <AsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <WebSocketsServer.h>
const char* ssid = "SEU_SSID";
const char* password = "SUA_SENHA";
AsyncWebServer server(80);
WebSocketsServer webSocket = WebSocketsServer(81);
void setup()
{
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println("Conectando ao Wi-Fi...");
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Conectado com sucesso!");
  Serial.print("Endereço IP: ");
  Serial.println(WiFi.localIP());
  webSocket.begin();
  webSocket.onEvent(webSocketEvent);
  server.begin();
}
void loop()
{
  webSocket.loop();
}
void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length)
{
  switch (type)
  {
    case WStype_DISCONNECTED:
      Serial.printf("Cliente [%u] desconectado.\n", num);
      break;
    case WStype_CONNECTED:
      {
        IPAddress ip = webSocket.remoteIP(num);
        Serial.printf("Cliente [%u] conectado: %s\n", num, ip.toString().c_str());
        webSocket.sendTXT(num, "Bem-vindo ao WebSocket!");
      }
      break;
    case WStype_TEXT:
      Serial.printf("Recebido do cliente [%u]: %s\n", num, payload);
      webSocket.sendTXT(num, "Mensagem recebida.");
      break;
  }
}

Explicação do Código

Carregando o Código no ESP32

Criando um Cliente WebSocket🔗

Para interagir com o servidor WebSocket no ESP32, criaremos uma página webIntegração com Aplicativos Móveis e WebIntegração com Aplicativos Móveis e WebDescubra como integrar ESP32 com aplicativos móveis e dashboards web, garantindo interatividade, controle remoto e segurança em seus projetos IoT. simples que se conecta ao servidor e permite enviar e receber mensagens.

Código HTML e JavaScript do Cliente

Crie um arquivo chamado index.html com o seguinte conteúdo:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Cliente WebSocket ESP32</title>
</head>
<body>
    <h1>WebSocket com ESP32</h1>
    <input type="text" id="messageInput" placeholder="Digite sua mensagem">
    <button onclick="sendMessage()">Enviar</button>
    <ul id="messages"></ul>
    <script>
        var gateway = `ws://${window.location.hostname}:81/`;
        var websocket;
        window.addEventListener('load', onLoad);
        function onLoad()
        {
            initWebSocket();
        }
        function initWebSocket()
        {
            console.log('Tentando abrir conexão WebSocket...');
            websocket = new WebSocket(gateway);
            websocket.onopen = onOpen;
            websocket.onclose = onClose;
            websocket.onmessage = onMessage;
        }
        function onOpen(event)
        {
            console.log('Conexão WebSocket estabelecida');
        }
        function onClose(event)
        {
            console.log('Conexão WebSocket fechada');
            setTimeout(initWebSocket, 2000);
        }
        function onMessage(event)
        {
            var messages = document.getElementById('messages');
            var message = document.createElement('li');
            message.textContent = 'Recebido: ' + event.data;
            messages.appendChild(message);
        }
        function sendMessage()
        {
            var input = document.getElementById('messageInput');
            var message = input.value;
            websocket.send(message);
            input.value = '';
            var messages = document.getElementById('messages');
            var sentMessage = document.createElement('li');
            sentMessage.textContent = 'Enviado: ' + message;
            messages.appendChild(sentMessage);
        }
    </script>
</body>
</html>

Explicação do Código

Servindo o Arquivo index.html do ESP32

Para que o ESP32 sirva a página webIntegração com Aplicativos Móveis e WebIntegração com Aplicativos Móveis e WebDescubra como integrar ESP32 com aplicativos móveis e dashboards web, garantindo interatividade, controle remoto e segurança em seus projetos IoT., precisamos modificar o código do servidor para enviar esse arquivo quando um cliente acessar o endereço IP do ESP32.

Modificando o Código do Servidor

Adicione o seguinte antes da função setup():

const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Cliente WebSocket ESP32</title>
</head>
<body>
    <h1>WebSocket com ESP32</h1>
    <input type="text" id="messageInput" placeholder="Digite sua mensagem">
    <button onclick="sendMessage()">Enviar</button>
    <ul id="messages"></ul>
    <script>
        var gateway = `ws://${window.location.hostname}:81/`;
        var websocket;
        window.addEventListener('load', onLoad);
        function onLoad()
        {
            initWebSocket();
        }
        function initWebSocket()
        {
            console.log('Tentando abrir conexão WebSocket...');
            websocket = new WebSocket(gateway);
            websocket.onopen = onOpen;
            websocket.onclose = onClose;
            websocket.onmessage = onMessage;
        }
        function onOpen(event)
        {
            console.log('Conexão WebSocket estabelecida');
        }
        function onClose(event)
        {
            console.log('Conexão WebSocket fechada');
            setTimeout(initWebSocket, 2000);
        }
        function onMessage(event)
        {
            var messages = document.getElementById('messages');
            var message = document.createElement('li');
            message.textContent = 'Recebido: ' + event.data;
            messages.appendChild(message);
        }
        function sendMessage()
        {
            var input = document.getElementById('messageInput');
            var message = input.value;
            websocket.send(message);
            input.value = '';
            var messages = document.getElementById('messages');
            var sentMessage = document.createElement('li');
            sentMessage.textContent = 'Enviado: ' + message;
            messages.appendChild(sentMessage);
        }
    </script>
</body>
</html>
)rawliteral";

Na função setup(), adicione:

server.on("/", HTTP_GET, [](AsyncWebServerRequest *request)
{
  request->send_P(200, "text/html", index_html);
});

Explicação das Modificações

Atualizando o Código no ESP32

Testando a Comunicação em Tempo Real🔗

1. Conecte-se à Rede Wi-FiConectando o ESP32 à Rede Wi-Fi: Seus Primeiros PassosConectando o ESP32 à Rede Wi-Fi: Seus Primeiros PassosDescubra como conectar seu ESP32 à rede Wi-Fi com segurança e eficiência. Siga o guia passo a passo e otimize seus projetos de IoT com facilidade.: Certifique-se de que o computador está conectado à mesma rede Wi-FiConectando o ESP32 à Rede Wi-Fi: Seus Primeiros PassosConectando o ESP32 à Rede Wi-Fi: Seus Primeiros PassosDescubra como conectar seu ESP32 à rede Wi-Fi com segurança e eficiência. Siga o guia passo a passo e otimize seus projetos de IoT com facilidade. que o ESP32.

2. Acesse o Endereço IP do ESP32O que é o ESP32: Introdução e Conceitos BásicosO que é o ESP32: Introdução e Conceitos BásicosDescubra como o ESP32 revoluciona a automação e IoT com dicas práticas e projetos que transformam sua casa conectada. Domine a tecnologia!: Abra um navegador web e digite o endereço IP exibido no serialEnviando Dados do ESP32 para o ArduinoEnviando Dados do ESP32 para o ArduinoDescubra como enviar dados do ESP32 para o Arduino com comunicação serial simples e robusta, garantindo integração e monitoramento em tempo real. do ESP32.

3. Interaja com a Página:

  • Digite uma mensagem no campo de texto.
  • Clique em Enviar.
  • Observe que a mensagem enviada e a resposta do servidor aparecem na lista.

4. Verifique o SerialEnviando Dados do ESP32 para o ArduinoEnviando Dados do ESP32 para o ArduinoDescubra como enviar dados do ESP32 para o Arduino com comunicação serial simples e robusta, garantindo integração e monitoramento em tempo real.:

Enviando Dados de Sensores em Tempo Real🔗

Vamos expandir o exemplo para enviar dados de um sensorProgramando o ESP32 para Integração de SensoresProgramando o ESP32 para Integração de SensoresAprenda a programar o ESP32 e integrar sensores com técnicas de leitura e controle para projetos de IoT, do hardware ao código. conectado ao ESP32 para o cliente web em intervalos regulares.

Configurando o Sensor

Para este exemplo, usaremos um potenciômetroLeitura de Potenciômetros e Sensores de TemperaturaLeitura de Potenciômetros e Sensores de TemperaturaConfigure o ESP32 para ler potenciômetros e sensores de temperatura com alta precisão, aplicando calibração e filtragem para medições confiáveis. conectado a um pino analógico do ESP32O que é o ESP32: Introdução e Conceitos BásicosO que é o ESP32: Introdução e Conceitos BásicosDescubra como o ESP32 revoluciona a automação e IoT com dicas práticas e projetos que transformam sua casa conectada. Domine a tecnologia!.

Modificando o Código do Servidor

Adicione a leitura do sensorProgramando o ESP32 para Integração de SensoresProgramando o ESP32 para Integração de SensoresAprenda a programar o ESP32 e integrar sensores com técnicas de leitura e controle para projetos de IoT, do hardware ao código. no loop():

void loop()
{
  webSocket.loop();
  static unsigned long lastSensorRead = 0;
  if (millis() - lastSensorRead > 1000)
  {
    lastSensorRead = millis();
    int sensorValue = analogRead(36); // GPIO 36
    String sensorData = "Sensor: " + String(sensorValue);
    webSocket.broadcastTXT(sensorData);
  }
}

Explicação das Modificações

Atualizando o Cliente Web

Modifique a função onMessage(event) no códigoDesafios Práticos: Experimentando com Múltiplos LEDsDesafios Práticos: Experimentando com Múltiplos LEDsAprenda a controlar múltiplos LEDs com ESP32 em projetos IoT. Descubra desafios práticos, montagem de circuitos, programação e efeitos visuais incríveis! JavaScript para exibir os dados do sensor de forma adequada.

function onMessage(event)
{
    var messages = document.getElementById('messages');
    var message = document.createElement('li');
    message.textContent = event.data;
    messages.appendChild(message);
}

Testando a Atualização em Tempo Real

1. Recarregue o CódigoDesafios Práticos: Experimentando com Múltiplos LEDsDesafios Práticos: Experimentando com Múltiplos LEDsAprenda a controlar múltiplos LEDs com ESP32 em projetos IoT. Descubra desafios práticos, montagem de circuitos, programação e efeitos visuais incríveis! no ESP32: Envie o códigoDesafios Práticos: Experimentando com Múltiplos LEDsDesafios Práticos: Experimentando com Múltiplos LEDsAprenda a controlar múltiplos LEDs com ESP32 em projetos IoT. Descubra desafios práticos, montagem de circuitos, programação e efeitos visuais incríveis! modificado para o ESP32.

2. Recarregue a Página WebIntegração com Aplicativos Móveis e WebIntegração com Aplicativos Móveis e WebDescubra como integrar ESP32 com aplicativos móveis e dashboards web, garantindo interatividade, controle remoto e segurança em seus projetos IoT.: No navegador, atualize a página.

3. Observe os Dados:

Controle Remoto em Tempo Real🔗

Além de enviar dados do ESP32 para o cliente, podemos controlar o ESP32 a partir da página webIntegração com Aplicativos Móveis e WebIntegração com Aplicativos Móveis e WebDescubra como integrar ESP32 com aplicativos móveis e dashboards web, garantindo interatividade, controle remoto e segurança em seus projetos IoT.. Vamos adicionar a capacidade de ligar e desligar um LED conectado ao ESP32.

Configurando o LED

Modificando o Código do Servidor

Na função setup(), configure o pino do LEDDesafios Práticos: Experimentando com Múltiplos LEDsDesafios Práticos: Experimentando com Múltiplos LEDsAprenda a controlar múltiplos LEDs com ESP32 em projetos IoT. Descubra desafios práticos, montagem de circuitos, programação e efeitos visuais incríveis!:

void setup()
{
  // ... código existente ...
  pinMode(2, OUTPUT); // Configura o GPIO 2 como saída para o LED
  // ... código existente ...
}

Modifique a função webSocketEvent() para controlar o LEDDesafios Práticos: Experimentando com Múltiplos LEDsDesafios Práticos: Experimentando com Múltiplos LEDsAprenda a controlar múltiplos LEDs com ESP32 em projetos IoT. Descubra desafios práticos, montagem de circuitos, programação e efeitos visuais incríveis! quando receber uma mensagem específica:

void webSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length)
{
  switch (type)
  {
    // ... casos existentes ...
    case WStype_TEXT:
      String message = String((char *) &payload[0]);
      Serial.printf("Recebido do cliente [%u]: %s\n", num, payload);
      if (message == "LED_ON")
      {
        digitalWrite(2, HIGH);
        webSocket.sendTXT(num, "LED ligado");
      }
      else if (message == "LED_OFF")
      {
        digitalWrite(2, LOW);
        webSocket.sendTXT(num, "LED desligado");
      }
      else
      {
        webSocket.sendTXT(num, "Comando desconhecido");
      }
      break;
  }
}

Modificando o Cliente Web

Adicione botões na página webIntegração com Aplicativos Móveis e WebIntegração com Aplicativos Móveis e WebDescubra como integrar ESP32 com aplicativos móveis e dashboards web, garantindo interatividade, controle remoto e segurança em seus projetos IoT. para controlar o LED:

<button onclick="turnOnLed()">Ligar LED</button>
<button onclick="turnOffLed()">Desligar LED</button>

Adicione as funções JavaScript correspondentes:

function turnOnLed()
{
    websocket.send('LED_ON');
}
function turnOffLed()
{
    websocket.send('LED_OFF');
}

Testando o Controle Remoto

1. Carregue o Novo CódigoDesafios Práticos: Experimentando com Múltiplos LEDsDesafios Práticos: Experimentando com Múltiplos LEDsAprenda a controlar múltiplos LEDs com ESP32 em projetos IoT. Descubra desafios práticos, montagem de circuitos, programação e efeitos visuais incríveis! no ESP32.

2. Recarregue a Página WebIntegração com Aplicativos Móveis e WebIntegração com Aplicativos Móveis e WebDescubra como integrar ESP32 com aplicativos móveis e dashboards web, garantindo interatividade, controle remoto e segurança em seus projetos IoT..

3. Controle o LEDDesafios Práticos: Experimentando com Múltiplos LEDsDesafios Práticos: Experimentando com Múltiplos LEDsAprenda a controlar múltiplos LEDs com ESP32 em projetos IoT. Descubra desafios práticos, montagem de circuitos, programação e efeitos visuais incríveis!:

Conclusão🔗

Implementamos com sucesso um sistema de comunicação📞 Interfone IP com Vídeo Chamada📞 Interfone IP com Vídeo ChamadaDescubra como integrar interfone IP com vídeo chamada utilizando ESP32 para segurança residencial e corporativa, com streaming e criptografia avançada. em tempo real utilizando WebSockets no ESP32. Exploramos como estabelecer uma conexão bidirecional entre o ESP32 e um cliente web, enviar e receber dados em tempo real e controlar dispositivos remotamente.

Este conhecimento abre portas para uma variedade de aplicações📞 Interfone IP com Vídeo Chamada📞 Interfone IP com Vídeo ChamadaDescubra como integrar interfone IP com vídeo chamada utilizando ESP32 para segurança residencial e corporativa, com streaming e criptografia avançada. em IoT, como:

A implementação de WebSockets no ESP32 proporciona uma comunicação eficiente e responsiva, essencial para sistemas modernos que exigem interação em tempo realExibindo Dados no Monitor Serial com ESP32Exibindo Dados no Monitor Serial com ESP32Aprenda a configurar e exibir dados no Monitor Serial com ESP32, utilizando exemplos práticos e técnicas de depuração para otimizar seus projetos IoT..

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados