Back to portfolio

BRIQX IoT Platform

The full BRIQX IoT platform for createq — ESP-IDF 5.3 firmware for four retail product lines and the Next.js + FastAPI cloud dashboard that manages hundreds of field devices across Europe. One ecosystem spanning embedded firmware, MQTT fleet control, dual OTA, telemetry, and venue operations.

BRIQX IoT Platform

Project Overview

The BRIQX IoT Platform is createq's end-to-end product stack: ESP32 firmware for retail audio, video, and ultrasonic controllers, plus the cloud fleet dashboard that provisions, monitors, and updates every device in the field. I architected the shared firmware generic/ module layer (~46 reusable components) and contributed across the cloud stack — product-type registry, dual OTA jobs, MQTT telemetry ingestion, and mobile remote QR sessions.

Four firmware builds — BRIQX Audio All-in-One, Cove/Iconics venue installations, multi-channel Bluetooth senders, and ClearWaterNow ultrasonic controllers — all connect to the same dashboard via MQTT over TLS. Audio products bridge to an NXP i.MX RT1021 co-processor over a custom binary UART protocol; the dashboard orchestrates updates on both MCUs remotely.

Four Shipped Product Lines

Cove AIO cove_all_in_one

ESP32-S3 + NXP RT1021 for Iconics/Harman Cove venues. Up to 3 USB hub speaker slots, Vividtech screen control over USB CDC, speaker install wizard, mobile remote QR on display. BM83 or FSC-BT6038A Bluetooth backends.

BRIQX Audio AIO audio_all_in_one

Dual-MCU audio player with TinyUSB UAC2, NXP UART bridge, Q-bus RS-485 handler, SD media playback, and phone-based QR remote control for venue operators.

BRIQX Multicast audio_multicast

ESP32-S3 routes WAV/MP3 from SD over shared I2S to up to 5 FSC-BT6038A Bluetooth modules (4 channels in current build). SSD1306 OLED UI, PCM9211 input switching, MQTT-safe lightweight JSON during playback.

ClearWaterNow Ultrasonic ultrasonic

ESP32-S3/S2 parking controller: RS485 KV protocol to power boards, Modbus RTU pH sensor, W5500 Ethernet fallback after 10 WiFi failures, ST7920 LCD, BLE provisioning, MQTTS to CWN broker.

My Key Contributions

1
ESP↔NXP Binary UART Protocol (3,200+ LOC)

Designed and implemented the full command/response protocol between ESP32-S3 and NXP RT1021: 115200 baud, RTS/CTS flow control, 4096-byte buffers, 40+ commands (volume, play/pause, track seek, speaker binding, hub power, OTA start). Packet format: [0xAA][CMD][DATA][XOR checksum][0x55]. Outcome: reliable dual-MCU control from cloud MQTT down to USB speaker hardware.

2
Dual-MCU OTA Pipeline

Built end-to-end NXP firmware update chain: MQTT trigger (target: "nxp") → HTTPS download to ESP SD card → CMD_OTA_START (0x50) → XMODEM-CRC transfer via ported esp_xmodem component → NXP secondary flash slot → MCUBoot SWAP_MOVE → auto-confirm. Added SHA256 verification and NVS recovery flags for interrupted updates. Outcome: field NXP updates without physical access to the audio MCU.

3
Speaker Install Wizard & Persistent Binding

Implemented cq_speaker_install.c maintenance-mode workflow: SPK_START → per-port SPK_BIND with hub power cycling → SPK_DONE. Co-developed with NXP firmware so serial-number-to-slot mapping survives power cycles, connection order, and hub port changes. Outcome: venue technicians can install speakers without re-enumerating on every reboot.

4
Mobile Remote QR Sessions

Built server-minted QR code flow for phone-based playback control: single-use tokens displayed on OLED/Vividtech screen, UART rotate command on scan, session timing enforced server-side. Shipped in Audio AIO v3.0.16 and Cove AIO v1.0.1. Outcome: venue staff control playback from their phone without installing an app.

5
Shared Platform Layer (generic/)

Maintained 46 shared modules — cq_mqtt, cq_wifi, cq_ota, cq_sdcard, cq_prov, cq_qbus, cq_crash, cq_mobile_remote, etc. — with per-product feature flags and RAM tuning for ESP32-S3 constraints. Outcome: new product features ship once and propagate across the fleet.

6
Cove / Vividtech Display Integration

Integrated BriqxNow protocol over USB CDC to control commercial Vividtech venue displays (GPIO19/20), including QR session rendering and status overlays alongside NXP audio orchestration. Outcome: unified ESP32 controls both the screen and the audio system in Cove installations.

Fleet Cloud Dashboard

The cloud command center for the entire BRIQX ecosystem — every field device connects via MQTT over TLS, reports telemetry to TimescaleDB, receives OTA updates, and is managed through a Next.js web UI backed by FastAPI, PostgreSQL, Redis, and Mosquitto.

1
Product-Type Registry

Built capability registry mapping each device_type to feature flags (dual OTA, media push, RS485, mobile remote). Frontend renders per-device controls — audio players show NXP OTA and media upload; ultrasonic controllers show RS485 board management. Outcome: one dashboard serves four product lines without code forks.

2
Dual OTA Job Pipeline

OTA jobs dispatched via MQTT with product-type filtering; devices download, verify SHA256, and report status. NXP path triggers ESP-side XMODEM chain. Outcome: both MCUs in dual-MCU products update remotely from the dashboard.

3
Telemetry & Fleet Analytics

MQTT ingest into TimescaleDB with continuous aggregates for venue/zone analytics, device watchdog, and board stale detection. Telegram bot for alerts and daily digests. Outcome: operations team monitors hundreds of retail devices from one screen.

4
Production Deployment & GDPR

Deployed split topology: ClearWaterNow and BRIQX on separate VPS instances with Docker Compose, Nginx TLS, and GitLab CI from staging via Tailscale. GDPR data export/erasure, audit logs, TOTP 2FA, and RBAC. Outcome: production-grade platform ready for EU commercial deployment.

Implementation & Data Flow

How dual-MCU audio control works

  • Cloud dashboard sends play/volume command via MQTT → ESP32 parses and translates to UART binary packet → NXP RT1021 receives, routes to correct USB speaker slot → isochronous USB audio OUT streams from 32 KB ring buffer.
  • NXP OTA: server publishes OTA job → ESP downloads .bin to SD → sends CMD_OTA_START → switches UART to XMODEM mode → NXP writes secondary slot → MCUBoot swaps on reboot → ESP confirms success via MQTT.
  • Network resilience: MQTTS on port 8883 with WSS:443 auto-fallback; ultrasonic product adds W5500 Ethernet after 10 consecutive WiFi disconnects.
  • Security: documented Secure Boot v2 (RSA-3072) + flash encryption provisioning workflow; per-device NVS credentials burned at factory via flash-tool.

Key Metrics & Outcomes

4
Shipped Products
40+
UART Commands
46
Shared Modules
3,200+
LOC Protocol
2
OTA Targets
100s
Field Devices

Production outcomes: Firmware platform deployed to commercial venues (BRIQX audio, Cove/Iconics installations, CWN parking). Dual OTA enables remote fixes on both ESP and NXP without site visits. Mobile remote QR reduces operator training burden. Speaker binding fix eliminated the #1 field support issue (speakers swapping slots after power cycle).

Technologies & Languages

Embedded — Languages

CCMakeShell

Embedded — Platform & Protocols

ESP-IDF 5.3.xFreeRTOSESP32-S3 MQTT/TLS (8883)MQTT/WSS (443)TinyUSB UAC2 XMODEM-CRCUART Binary ProtocolRS485/Modbus Q-busI2SESP-NOWBLE Provisioning W5500 EthernetUSB CDCMCUBoot OTA

Cloud — Stack

PythonTypeScript/TSXFastAPI Next.js 16React 19PostgreSQL TimescaleDBRedisMQTT/Mosquitto DockerNginxGitLab CI