Atualização Dinâmica com AJAX no ESP32: Tutorial Prático

Introdução🔗

Imagine acessar uma página web hospedada no seu ESP32 e ver dados sendo atualizados 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., sem a necessidade de recarregar a página inteira. Isso é possível graças ao uso de AJAX (Asynchronous JavaScript and XML). Neste artigo, vamos explorar como implementar a atualização dinâmica de páginas web utilizando AJAX no ESP32. Vamos passo a passo entender os conceitos por trás dessa tecnologia e como aplicá-la em um projeto prático💧 Sistema de Reúso de Água Cinza💧 Sistema de Reúso de Água CinzaDescubra como implementar um sistema inteligente de reúso de água cinza com ESP32, monitoramento via sensores e integração IoT para sustentabilidade..

O que é AJAX?🔗

AJAX é um conjunto de técnicas que permite a troca de dados entre o cliente (navegador) e o servidor de forma assíncrona, sem a necessidade de recarregar a página inteira. Em outras palavras, AJAX permite atualizar partes específicas de uma página web dinamicamente, melhorando a experiência do usuário e tornando as 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. web mais responsivas.

AJAX utiliza principalmente:

  • JavaScript: Para manipulação de elementos da página e solicitação de dados ao servidor.
  • XMLHttpRequest ou Fetch API: Para realizar solicitações assíncronas ao servidor.
  • JSON ou XML: Para formatar os dados trocados entre o cliente e o servidor.

Por que usar AJAX com ESP32?🔗

O ESP32 é 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. poderoso com capacidade de se conectar à internet e hospedar um servidor web. Ao utilizar AJAX com o ESP32, podemos:

Configurando o Ambiente🔗

Antes de começarmos, certifique-se de:

Criando um Web Server Simples no ESP32🔗

Vamos iniciar criando um servidor webIntrodução ao Desenvolvimento de um Web Server com ESP32Introdução ao Desenvolvimento de um Web Server com ESP32Desenvolva seu web server com ESP32 e gerencie dispositivos IoT com controle remoto. Siga o tutorial passo a passo e garanta segurança e eficiência. básico que servirá uma página HTML ao cliente.

Código no ESP32

#include <WiFi.h>
// Substitua pelos dados da sua rede Wi-Fi
const char* ssid = "SEU_SSID";
const char* password = "SUA_SENHA";
WiFiServer server(80);
void setup() 
{
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(1000);
    Serial.println("Conectando ao Wi-Fi...");
  }
  Serial.println("Conectado!");
  Serial.print("Endereço IP: ");
  Serial.println(WiFi.localIP());
  server.begin();
}
void loop() 
{
  WiFiClient client = server.available();
  if (client) 
  {
    String request = client.readStringUntil('\r');
    client.flush();
    String response = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n";
    response += "<!DOCTYPE HTML><html><body><h1>Olá do ESP32!</h1></body></html>";
    client.print(response);
    delay(1);
    client.stop();
    Serial.println("Cliente desconectado.");
  }
}

Este código estabelece uma conexão Wi-FiConfigurando a Conexão Wi-Fi no ESP32: Guia Passo a PassoConfigurando a Conexão Wi-Fi no ESP32: Guia Passo a PassoAprenda passo a passo a conectar seu ESP32 à rede Wi-Fi com segurança e estabilidade. Descubra dicas práticas e estratégias de otimização., inicia um servidor na porta 80 e serve uma página HTML simples com a mensagem "Olá do ESP32!".

Implementando AJAX para Atualização Dinâmica🔗

Agora, vamos modificar 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! para incluir uma atualização dinâmica de dados usando AJAX.

Código em Arduino para o ESP32

Primeiramente, precisamos preparar 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! para responder às solicitações AJAX enviadas pelo cliente.

#include <WiFi.h>
const char* ssid = "SEU_SSID";
const char* password = "SUA_SENHA";
WiFiServer server(80);
String header;
int valorSensor = 0;
void setup() 
{
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(1000);
    Serial.println("Conectando ao Wi-Fi...");
  }
  Serial.println("Conectado!");
  Serial.print("Endereço IP: ");
  Serial.println(WiFi.localIP());
  server.begin();
}
void loop() 
{
  WiFiClient client = server.available();
  if (client) 
  {
    String currentLine = "";
    while (client.connected()) 
    {
      if (client.available()) 
      {
        char c = client.read();
        header += c;
        if (c == '\n') 
        {
          if (currentLine.length() == 0) 
          {
            if (header.indexOf("GET /dados") >= 0) 
            {
              valorSensor = analogRead(34); // Exemplo de leitura de sensor
              String jsonResponse = "{\"valor\":" + String(valorSensor) + "}";
              client.println("HTTP/1.1 200 OK");
              client.println("Content-Type: application/json");
              client.println("Connection: close");
              client.println();
              client.println(jsonResponse);
              break;
            }
            else 
            {
              client.println("HTTP/1.1 200 OK");
              client.println("Content-Type: text/html");
              client.println("Connection: close");
              client.println();
              client.println(index_html);
              break;
            }
          }
          else 
          {
            currentLine = "";
          }
        }
        else if (c != '\r') 
        {
          currentLine += c;
        }
      }
    }
    header = "";
    client.stop();
  }
}
const char* index_html = R"rawliteral(
<!DOCTYPE HTML><html>
<head>
  <title>ESP32 com AJAX</title>
  <meta http-equiv="refresh" content="30">
</head>
<body>
  <h1>Leitura do Sensor</h1>
  <p>Valor: <span id="valorSensor">0</span></p>
  <script>
    setInterval(function() {
      var xhttp = new XMLHttpRequest();
      xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
          var jsonResposta = JSON.parse(this.responseText);
          document.getElementById("valorSensor").innerHTML = jsonResposta.valor;
        }
      };
      xhttp.open("GET", "/dados", true);
      xhttp.send();
    }, 1000);
  </script>
</body>
</html>
)rawliteral";

Explicação do Código

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! acima, fizemos as seguintes alterações:

Entendendo o Código JavaScript🔗

No trecho de 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! HTML, o script JavaScript faz o seguinte:

<script>
  setInterval(function() {
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
      if (this.readyState == 4 && this.status == 200) {
        var jsonResposta = JSON.parse(this.responseText);
        document.getElementById("valorSensor").innerHTML = jsonResposta.valor;
      }
    };
    xhttp.open("GET", "/dados", true);
    xhttp.send();
  }, 1000);
</script>
  • setInterval: Define uma função para ser executada a cada 1000 milissegundos (1 segundo).
  • XMLHttpRequest: Cria um objeto para realizar a solicitação AJAX.
  • onreadystatechange: Define uma função que é chamada sempre que o estado da solicitação muda.
  • responseText: Obtém a resposta do servidor como texto.
  • JSON.parse: Converte o texto JSON recebido em um objeto JavaScript.
  • Atualização do DOM: Atualiza o conteúdo do elemento com id valorSensor com o valor recebido.

Exemplo Prático: Monitorando Temperatura em Tempo Real🔗

Vamos agora implementar um exemplo prático onde o ESP32 lê a temperatura🦠 Analisador de Qualidade da Água Portátil🦠 Analisador de Qualidade da Água PortátilConfira o tutorial completo que integra sensores IoT e ESP32 para monitorar pH, turbidez, condutividade e temperatura em tempo real com relatórios PDF. de um sensor (por exemplo, o DHT11Exibindo Dados de Sensores em Tempo Real no NavegadorExibindo Dados de Sensores em Tempo Real no NavegadorAprenda a configurar o ESP32 para monitorar sensores em tempo real via navegador, integrando Wi-Fi e AJAX para visualização dinâmica.) e atualiza essa informação em 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. usando AJAX.

Componentes Necessários

Circuito

Conecte o sensor DHT11Exibindo 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 ESP32 da seguinte forma:

Código no ESP32

Inclua a biblioteca do DHT11 e ajuste 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!:

#include <WiFi.h>
#include "DHT.h"
#define DHTPIN 4
#define DHTTYPE DHT11
const char* ssid = "SEU_SSID";
const char* password = "SUA_SENHA";
WiFiServer server(80);
String header;
DHT dht(DHTPIN, DHTTYPE);
void setup() 
{
  Serial.begin(115200);
  dht.begin();
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(1000);
    Serial.println("Conectando ao Wi-Fi...");
  }
  Serial.println("Conectado!");
  Serial.print("Endereço IP: ");
  Serial.println(WiFi.localIP());
  server.begin();
}
void loop() 
{
  WiFiClient client = server.available();
  if (client) 
  {
    String currentLine = "";
    while (client.connected()) 
    {
      if (client.available()) 
      {
        char c = client.read();
        header += c;
        if (c == '\n') 
        {
          if (currentLine.length() == 0) 
          {
            if (header.indexOf("GET /dados") >= 0) 
            {
              float temperatura = dht.readTemperature();
              String jsonResponse = "{\"temperatura\":" + String(temperatura) + "}";
              client.println("HTTP/1.1 200 OK");
              client.println("Content-Type: application/json");
              client.println("Connection: close");
              client.println();
              client.println(jsonResponse);
              break;
            }
            else 
            {
              client.println("HTTP/1.1 200 OK");
              client.println("Content-Type: text/html");
              client.println("Connection: close");
              client.println();
              client.println(index_html);
              break;
            }
          }
          else 
          {
            currentLine = "";
          }
        }
        else if (c != '\r') 
        {
          currentLine += c;
        }
      }
    }
    header = "";
    client.stop();
  }
}
const char* index_html = R"rawliteral(
<!DOCTYPE HTML><html>
<head>
  <title>Monitor de Temperatura</title>
</head>
<body>
  <h1>Temperatura Atual</h1>
  <p>Temperatura: <span id="temperatura">--</span> °C</p>
  <script>
    setInterval(function() {
      var xhttp = new XMLHttpRequest();
      xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
          var jsonResposta = JSON.parse(this.responseText);
          document.getElementById("temperatura").innerHTML = jsonResposta.temperatura;
        }
      };
      xhttp.open("GET", "/dados", true);
      xhttp.send();
    }, 2000);
  </script>
</body>
</html>
)rawliteral";

Explicação Adicional

Considerações sobre Desempenho e Otimização🔗

Ao implementar atualização dinâmica com AJAX, é importante considerar:

Conclusão🔗

A atualização dinâmica de páginas com AJAX no ESP32 permite criar interfaces web interativas e eficientes para monitoramento e controle de dispositivosControle de Dispositivos com ESP32 via BluetoothControle de Dispositivos com ESP32 via BluetoothDescubra como controlar dispositivos com ESP32 via Bluetooth em projetos IoT. Aprenda a configurar circuitos e programar funcionalidades de automação. em tempo real. Ao entender os conceitos de AJAX e como aplicá-los no ESP32, você pode expandir seus projetos IoT, oferecendo experiências ricas aos usuários sem a necessidade de recarregar páginas inteiras.

Experimentar com diferentes sensores e ajustar os intervalos de atualização conforme suas necessidades permitirá que você otimize seu projeto para melhor desempenhoDual-Core do ESP32: Como Funciona e BenefíciosDual-Core do ESP32: Como Funciona e BenefíciosDescubra como a arquitetura dual-core do ESP32 otimiza a performance em IoT e automação, distribuindo tarefas e gerenciando recursos com eficiência. e usabilidade. Continue explorando e inovando em suas aplicações com o ESP32 e as possibilidades que o AJAX oferece.

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