Ir para o conteúdo

Biblioteca ESP32 HTTP Client

Uma biblioteca cliente HTTP leve, de baixa alocação e alto desempenho para ESP32 que vincula dados de resposta diretamente às suas variáveis — contando com mecanismos nativos em streaming e zero heap para APIs REST, Web Services SOAP 1.1 / 1.2 e comunicação HTTP extensível.

Arduino Library PlatformIO Registry Idioma Cobertura Licença Estrelas Downloads


O que é?

ESP32-HTTP-Client é um cliente HTTP moderno e modular para o ESP32 projetado para conectar serviços web e a memória do microcontrolador com máxima eficiência. Em vez de tratar a comunicação HTTP como manipulação manual de strings e processamento pesado de árvores DOM, a biblioteca extrai campos de resposta em tempo real diretamente do fluxo da rede para variáveis C++.

Construído sobre um núcleo de transporte compartilhado e eficiente (TLS, reuso de conexão, autenticação, timeouts e retries), o cliente disponibiliza builders dedicados e fluentes para os principais padrões de comunicação web:

Consuma endpoints RESTful com métodos intuitivos (get, post, put, patch, del), parâmetros de rota/busca e extração direta de JSON ou mapeamento bidirecional de structs:

int userId;
float temperature;
char city[32];

client.get("/report")
      .query("format", "compact")
      .getBody("userId", &userId)
      .getBody("sensor.temp", &temperature)
      .getBody("0.address.city", city, sizeof(city));

Conecte-se a serviços corporativos SOAP com geração automática de envelopes, gerenciamento de SOAPAction / Content-Type, streaming de tags XML e inspeção nativa de SOAP Faults:

float preco = 0.0f;
SoapFault falha;

client.soap("/ws")
      .soapAction("http://example.org/GetPrice")
      .body("<m:GetPrice xmlns:m=\"http://example.org\"><m:Item>ESP32</m:Item></m:GetPrice>")
      .getFault(&falha)
      .getBody("Price", &preco);

Uma única instância de cliente gerencia configurações persistentes para todas as requisições — incluindo segurança TLS, cabeçalhos customizados, autenticação (Bearer, Basic, API Key, Cookies), retentativas automáticas e métricas de observabilidade:

ESP32HTTPClient client("https://api.example.com");
client.bearer("token_xyz");
client.setTimeout(5000);
client.setMaxRetry(2);

// Reutilize o mesmo cliente para endpoints REST ou SOAP
client.get("/api/v1/health");
client.soap("/ws/service");

Um cliente unificado. Vinculação direta de memória. Mínimo consumo de RAM.


Desempenho em Destaque

Comparativo medido em 100 requisições HTTP GET consecutivas com cargas JSON em um dispositivo ESP32 real:

Métrica Padrão (HTTPClient + ArduinoJson) ESP32-HTTP-Client
Alocação de heap por requisição ~58.2 KB ~15 bytes
Pegada média de RAM 34.2% 24.3%
Heap livre mínima 114.3 KB 128.6 KB
Tempo médio de execução ~750 ms ~59 ms

Veja a análise de desempenho completa


Instalação Rápida

Procure por ESP32-HTTP-Client no Gerenciador de Bibliotecas do Arduino IDE e clique em Instalar.

Adicione ESP32-HTTP-Client ao seu platformio.ini:

lib_deps =
    PedroFnseca/ESP32-HTTP-Client@^1.4.0

Baixe a última versão e coloque a pasta dentro do seu diretório Arduino/libraries/.

Guia de instalação completo


Início Rápido em 30 Segundos

#include <WiFi.h>
#include "ESP32HTTPClient.h"

ESP32HTTPClient client("https://jsonplaceholder.typicode.com");

void setup() {
    Serial.begin(115200);
    WiFi.begin("SEU_SSID", "SUA_SENHA");
    while (WiFi.status() != WL_CONNECTED) delay(100);

    int userId = 0;

    // A API retorna: { "userId": 1, "id": 1, "title": "...", "completed": false }
    client.get("/todos/1").getBody("userId", &userId);

    Serial.printf("ID do Usuário: %d\n", userId);
}

void loop() {}
#include <WiFi.h>
#include "ESP32HTTPClient.h"

ESP32HTTPClient client("https://www.dataaccess.com");

void setup() {
    Serial.begin(115200);
    WiFi.begin("SEU_SSID", "SUA_SENHA");
    while (WiFi.status() != WL_CONNECTED) delay(100);

    char result[64] = {0};

    // Envia requisição SOAP 1.1 e extrai diretamente a tag <m:NumberToWordsResult>
    client.soap("/webservicesserver/NumberConversion.wso")
          .soapAction("http://www.dataaccess.com/webservicesserver/NumberToWords")
          .body("<NumberToWords xmlns=\"http://www.dataaccess.com/webservicesserver/\">"
                "<ubiNum>500</ubiNum>"
                "</NumberToWords>")
          .getBody("NumberToWordsResult", result, sizeof(result));

    Serial.printf("Resultado: %s\n", result);
}

void loop() {}

Ver todos os exemplos


Se esta biblioteca economizou seu tempo, considere deixar uma ⭐ no GitHub.