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, Serviços GraphQL, JSON-RPC 2.0 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));

Chame APIs JSON-RPC 2.0 com parâmetros posicionais/nomeados, notificações, structs mapeadas e códigos de erro padrão:

int soma = 0;

client.jsonRpc("/rpc")
      .method("add")
      .param(15)
      .param(27)
      .id(1)
      .getResult(&soma);

Execute operações GraphQL com variáveis tipadas, seleção de operações, preservação de dados parciais e streaming com @defer:

String nome;
int id = 0;

client.graphql("/graphql")
      .query("query GetUser($id: ID!) { user(id: $id) { id name } }")
      .variable("id", 101)
      .getData("user.id", &id)
      .getData("user.name", &nome);

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, SOAP, GraphQL ou JSON-RPC
client.get("/api/v1/health");
client.soap("/ws/service");
client.graphql("/graphql");
client.jsonRpc("/rpc");

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.9.1

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() {}
#include <WiFi.h>
#include "ESP32HTTPClient.h"

ESP32HTTPClient client("https://countries.trevorblades.com");

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

    char countryName[64] = {0};

    // Consulta dados de país com variáveis e vincula diretamente à variável
    client.graphql("/graphql")
          .query("query GetCountry($code: ID!) { country(code: $code) { name } }")
          .variable("code", "BR")
          .getData("country.name", countryName, sizeof(countryName));

    Serial.printf("País: %s\n", countryName);
}

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

ESP32HTTPClient client("https://api.example.com");

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

    int soma = 0;

    // Dispara chamada JSON-RPC 2.0 e vincula resultado diretamente à variável
    client.jsonRpc("/rpc")
          .method("add")
          .param(15)
          .param(27)
          .id(1)
          .getResult(&soma);

    Serial.printf("Resultado: %d\n", soma);
}

void loop() {}

→ Ver todos os exemplos


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