SuperDMZ
Back to the blog
🛠️
Updates · · SuperDMZ Team

SuperDMZ Arduino v1.1.0: production-grade ProvisioningPortal + new SmartIoT example

Four hours after v1.0.2 we shipped v1.1.0 with the two examples needed to turn the library into a real product. Captive portal with WiFi scan, live dashboard over the tunnel, OTA through the tunnel itself, and a GPIO0 button with partial reconfiguration.

What changed

We got direct feedback right after launch: "the examples don't take you all the way to a product — I want a captive portal for WiFi setup, a dashboard to see SuperDMZ status, and sensor telemetry". Fair. v1.1.0 delivers that.

ProvisioningPortal rewritten (production-grade)

The example is still called ProvisioningPortal but everything inside changed:

  • WiFi network scan inside the captive portal — the end customer picks the SSID from a dropdown sorted by RSSI with visual bars (▂▄▆█), instead of typing the network name by hand and getting it wrong the first time.
  • In-place AP→STA transition — after saving the config, the ESP goes straight into client mode. Before it had to reboot; now the "Saved" page appears and 5 seconds later the tunnel is up.
  • Live dashboard served by the tunnel showing 3 cards: SuperDMZ state (public URL, bytes in/out), WiFi (SSID, IP, RSSI with bars, MAC), and System (chip, free heap, uptime). Auto-refresh every 5 s via /api/status.
  • GPIO0 (BOOT) button with two modes:
    • Hold for 3 seconds: clears WiFi only, keeps the token, returns to AP mode. Useful when the customer changes networks.
    • Hold for 10 seconds: full factory reset, wipes everything including the token. Useful for resale.
  • AP SSID derived from chip MAC: SuperDMZ-Setup-A4F2. In a room with 10 ESPs each one shows up with a unique suffix — no collisions.

New example: SmartIoT (full template)

If you want to skip ahead, the SmartIoT example has everything from ProvisioningPortal plus:

  • Sensor telemetry — temperature and humidity. The example uses synthetic values with random walk so it runs on any board without extra hardware. Replace readTempC() and readHumidity() with real readings from your DS18B20/BME280/SHT3x/etc.
  • Temperature sparkline on the dashboard — simple vanilla-JS chart (no Chart.js or other external libs) showing the last 60 seconds of readings.
  • JSON endpoint /api/telemetry with everything (sensors, tunnel state, WiFi, system) for integration with external systems. Curl the public URL and you get the device's full state in one GET.
  • OTA through the tunnel itself — POST a .bin to /api/ota and the ESP flashes the new firmware and reboots. Remote firmware updates from anywhere on the planet, no LAN access, no extra server.
  • Reboot button on the dashboard for remote restart.

Which one to pick

Depends on where you are in the cycle:

ExampleLinesUse it for
HelloWorld~50Test the library in 5 minutes. Hardcoded credentials.
WebServerBridge~80Integrate with your project that already uses ESPAsyncWebServer.
ProvisioningPortal~280Real IoT device without sensors — camera, control panel, gateway, etc.
SmartIoT~380Template for a full commercial product with sensors and telemetry.

How to upgrade

In the Arduino IDE: the Library Manager detects the new version within an hour. Open Sketch → Include Library → Manage Libraries…, search SuperDMZ, click Update. You can force it earlier by downloading the v1.1.0 ZIP and installing via Add .ZIP Library.

In PlatformIO: the ^1.0.2 in your platformio.ini will already pick up v1.1.0 on the next pio pkg update (semver caret covers the whole major).

Repo and issues

Code, examples, and roadmap: github.com/superdmz/SuperDMZ-Arduino. Feature requests (next board, next capability) and bugs: GitHub issues.

Next up: v1.1.x for bugs as they come. Next major v1.2: Arduino UNO R4 WiFi and MKR WiFi 1010.


Want to try SuperDMZ?

Free plan, no credit card. Your first tunnel runs in under 60 seconds.

Create a free account

More in Updates