Michael Thomson
ESP32 fleet over MQTT

Remote NFC Provisioning Platform

Designed and shipped a connected hardware platform: ESP32 + PN532 devices receive cloud jobs over MQTT and dynamically write NDEF URLs to NFC tags with per-write verification.

Overview

Implemented captive-portal Wi-Fi onboarding, persistent credential storage, fleet heartbeat/status topics, and firmware-level RF and power optimization.

What it does
  • 01Cloud-controlled job delivery over MQTT
  • 02Dynamic NDEF URL writes per tag
  • 03Captive-portal Wi-Fi onboarding
  • 04Tag verification after each write
  • 05RF + power optimization at the firmware layer
  • 06Fleet-scale device targeting and heartbeat

Overview

Built an ESP32-based NFC provisioning device that receives jobs from a cloud platform over MQTT and writes dynamic URLs to NFC tags. End users tap the tag with their phone to launch onboarding experiences such as Wi-Fi setup, account activation, registration flows, or product-specific landing pages.

Unlike traditional static NFC programming, the platform allows tags and onboarding experiences to be managed remotely through a connected SaaS sales platform.

Hardware Layer

Embedded Device
  • ESP32 microcontroller
  • Persistent Wi-Fi credential management
  • Automatic reconnect to known networks
  • Captive portal fallback for initial setup
NFC Layer
  • PN532 NFC module (I²C)
  • Dynamic NDEF URL writing
  • Mobile-compatible phone interaction
  • Tag verification after writes
Power Optimization
  • Explored firmware-based RF disabling
  • Implemented module-level power control strategies
  • Reduced interference during phone reads
  • Lower idle power consumption

Device Architecture

Each device operates as an autonomous provisioning endpoint.

Startup Flow
  1. Boot
  2. Load stored WiFi credentials
  3. Attempt reconnect
  4. Connect to MQTT
  5. Subscribe to device jobs
  6. Idle / Wait
Provisioning Flow
  1. Cloud Job Created
  2. MQTT publishes instruction
  3. ESP32 receives update
  4. Activate NFC writer
  5. Write URL payload
  6. Verify write
  7. Disable RF
  8. Ready for next task

Cloud Communication

Implemented an event-driven architecture using MQTT.

Topics
  • devices/{deviceId}/job
  • devices/{deviceId}/status
  • devices/{deviceId}/heartbeat
Capabilities
  • Remote job delivery
  • Device-specific targeting
  • Status reporting
  • Fleet scalability
  • Near real-time updates

Customer Onboarding Experience

The device acts as the bridge between physical and digital experiences. The onboarding experience can be updated remotely without changing hardware.

Customer Flow
  1. Receive NFC-enabled product
  2. Tap phone
  3. Open dynamic onboarding URL
  4. Enter WiFi / account details
  5. Complete setup
  6. Device activates

Sales Platform Integration

The embedded system connects into a broader sales and fulfillment platform, so devices, tags, customers, and orders are managed from one place.

Built with
ESP32PN532 NFCMQTTC++Wi-FiI²CNDEFSaaS Backend