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.
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:
Chame APIs JSON-RPC 2.0 com parâmetros posicionais/nomeados, notificações, structs mapeadas e códigos de erro padrão:
Execute operações GraphQL com variáveis tipadas, seleção de operações, preservação de dados parciais e streaming com @defer:
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:
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.
Baixe a última versão e coloque a pasta dentro do seu diretório Arduino/libraries/.
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() {}
Se esta biblioteca economizou seu tempo, considere deixar uma ⭐ no GitHub.