Lançamos a SuperDMZ para ESP32 e o caminho até a Arduino Library Manager
A biblioteca SuperDMZ para Arduino agora está disponível para instalação direta pelo IDE. Quatro linhas de código transformam qualquer ESP32 em um endereço público https://seu-host.dmzgate.com. Aproveitamos pra contar também o caminho de publicação no GitHub e os bastidores do release.
Por que ESP32 entra no SuperDMZ
Quase metade das mensagens que chegam no nosso suporte são alguma variação de: "tenho um sensor/câmera/painel rodando num ESP, posso expor pelo SuperDMZ sem instalar o client num PC do lado?". Resposta agora: sim, e com quatro linhas de código.
O cliente Windows/Linux/macOS é ótimo quando existe um host com sistema operacional na ponta. Para IoT essa exigência é fricção: o dispositivo já é o "PC". Forçar uma máquina intermediária só pra rodar o tunnel encarece o produto, aumenta a superfície de falha, e cria mais um cabo pra mantermos.
A biblioteca SuperDMZ que publicamos hoje resolve isso embarcando o protocolo do tunnel direto no firmware do ESP32. O dispositivo conecta sozinho ao nó SuperDMZ via WebSocket TLS e fica acessível em https://<seu-host>.dmzgate.com com cert válido do Let's Encrypt — sem IP fixo, sem abrir porta no roteador, sem cloud externa.
Compatibilidade
Suportamos a família ESP32 inteira:
- ESP32 clássico (WROOM-32, WROVER)
- ESP32-S2 e ESP32-S3
- ESP32-C3 e ESP32-C6 (RISC-V)
- Arduino Nano ESP32 — funciona direto, é um ESP32-S3 com formato de Nano
ESP8266 fica de fora oficialmente — o mbedtls embarcado tem heap insuficiente pra manter WSS estável em produção. Quem quer experimentar mesmo assim consegue compilar com algum esforço, mas não recomendamos para deploy real.
Já temos roadmap traçado para Arduino UNO R4 WiFi (v1.1), MKR WiFi 1010 / Nano 33 IoT (v1.2), Portenta H7 / Giga R1 WiFi (v1.3) e Raspberry Pi Pico W (v2.0). Cada uma é portar a camada de rede pra biblioteca específica do chip (WiFiS3.h, WiFiNINA.h, MbedOS WiFi etc) — mesma API pública.
Como instalar
No Arduino IDE 2.x:
- Sketch → Include Library → Manage Libraries…
- Busque
SuperDMZ - Clique Install. As dependências (
WebSocketsde Markus Sattler eArduinoJsonde Benoit Blanchon) são oferecidas no mesmo prompt.
No PlatformIO:
; platformio.ini
lib_deps =
superdmz/SuperDMZ@^1.0.2
Hello World
Quatro linhas pra subir um ESP32 falando com o mundo:
#include <WiFi.h>
#include <WebServer.h>
#include <SuperDMZ.h>
WebServer server(80);
SuperDMZ tunnel;
void setup() {
WiFi.begin("YOUR_WIFI", "YOUR_PASS");
while (WiFi.status() != WL_CONNECTED) delay(200);
server.on("/", [](){ server.send(200, "text/html", "<h1>Hello</h1>"); });
server.begin();
tunnel.begin("PASTE_YOUR_48_HEX_TOKEN", 80);
}
void loop() {
server.handleClient();
tunnel.loop();
}
Compile, grave, abra o Serial Monitor a 115200 baud. Em ~5 segundos:
[wifi] OK, IP = 192.168.1.42
[http] local WebServer on port 80
[SuperDMZ] connecting wss://spo1.nodes.superdmz.com:443/ws/tunnel ...
[SuperDMZ] ONLINE: https://your-host.dmzgate.com -> http://localhost:80
Pronto. Abra a URL pública em qualquer celular do outro lado do planeta e a página do ESP responde.
O caminho até a Arduino Library Manager
Pra biblioteca aparecer no Library Manager oficial do IDE pra qualquer pessoa no mundo, ela precisa ser aceita no índice mantido pelo Arduino. O fluxo é todo público no GitHub e leva uns 30 minutos do começo ao fim quando tudo está em ordem.
Resumo do que fizemos:
- Repo público em github.com/superdmz/SuperDMZ-Arduino com o código, exemplos,
library.properties,library.json,LICENSE,keywords.txteCHANGELOG.md. - Tag semver apontando para o commit do release (
1.0.1). - GitHub Actions de CI rodando
arduino/arduino-lint-actionem modo strict maisarduino/compile-sketchescompilando os exemplos numa matriz de seis placas ESP32 — garante regressão zero nas próximas versões. - Fork do
arduino/library-registry, adicionar uma linha aorepositories.txtcom o URL do nosso repo, e abrir PR. - O bot da Arduino roda a verificação automática (mais rigorosa que o nosso CI local), comenta o resultado, e mergeia se tudo estiver verde.
- O indexer da Arduino sincroniza o índice a cada hora. No próximo refresh do Library Manager dentro do IDE, a biblioteca aparece pra todos no mundo.
Detalhe importante: para releases futuros (v1.0.2, v1.1, etc.) não é necessário abrir PR de novo. Basta empurrar a tag nova pro nosso repo — o indexer detecta sozinho e publica em ~1 hora.
O bug que o autor encontrou
Na publicação inicial caímos numa armadilha típica de quem trabalha em produto multi-idioma: deixamos comentários em português dentro dos arquivos .ino e .cpp da biblioteca. O Serial.printf já estava em inglês desde o início (logs são consumidos por ferramentas globais — Stack Overflow, grep, dashboards — e tradução quebra integrações), mas os comentários escaparam da regra. Em poucas horas isso virou v1.0.2 com a limpeza completa. Lição reforçada internamente: código que sai pro mundo via Library Manager é inglês em tudo: logs, comentários, docstrings, strings de exemplo.
Próximos passos
Pra você que vai usar:
- O guia completo de instalação tem o passo-a-passo, os 7 passos, tabela da API e troubleshooting.
- Crie o tunnel no painel com protocolo HTTP e
local_port = 80. - Os exemplos
WebServerBridge(ESPAsyncWebServer + JSON + GPIO) eProvisioningPortal(captive portal salvando WiFi+token em NVS) cobrem casos de uso reais — incluindo OTA.
Pra quem está construindo produto: o ProvisioningPortal resolve o problema de provisionamento sem que você precise compilar um firmware por cliente. O dispositivo sai da fábrica em modo AP, o cliente final aponta o celular pra ele, configura WiFi e token via captive portal, e o ESP reboota já como cliente. Texto comercial pronto: "seu IoT ganha endereço público em 30 segundos, sem IP fixo, sem abrir porta no roteador, sem cloud externa".
Bom hacking. Bugs e pedidos de placa nova: GitHub Issues.
Quer experimentar o SuperDMZ?
Plano gratuito sem cartão de crédito. Em menos de 60 segundos seu primeiro túnel está no ar.
Criar conta grátis