Embedded & Devices / Built
Pocket Dial
A SIP registrar and PBX that runs on an ESP32-S3, with extension calling, peer-to-peer RTP, call features, web administration, optional LVGL UI and dual-OTA.
OVERVIEW
What I built.
A SIP registrar and PBX that runs on an ESP32-S3, with extension calling, peer-to-peer RTP, call features, web administration, optional LVGL UI and dual-OTA.
Built a SIP registrar and PBX engine that runs directly on an ESP32-S3-class device.
Implemented extension registration/calling plus call features including transfer, hold, parking, ring groups, paging, forwarding and DND.
Added web administration, optional LVGL display support, provisioning and dual-slot OTA.
SYSTEM ARCHITECTURE
How the system is divided.
Desk phones/softphones -> SIP signaling -> Pocket Dial registrar/PBX on ESP32.
RTP media remains peer-to-peer between endpoints so the MCU controls signaling without carrying the audio stream.
The same C++17 core also builds on desktop for faster testing and CI.
NETWORK / DATA FLOW
What talks to what.
TECHNOLOGY STACK
The technical surface.
IMPLEMENTATION
How it works in practice.
- 01
Desk phones/softphones -> SIP signaling -> Pocket Dial registrar/PBX on ESP32.
- 02
RTP media remains peer-to-peer between endpoints so the MCU controls signaling without carrying the audio stream.
- 03
The same C++17 core also builds on desktop for faster testing and CI.
TESTING & VALIDATION
How I know it works.
Desktop build of the same C++17 core
GoogleTest-covered behavior
CI-gated builds
Field-deployable ESP32 firmware path
Call-feature verification for registration, calls, transfer, hold and related state
EXTERNAL SERVICES & DEPENDENCIES
What sits outside the core.
ENGINEERING EVIDENCE
Artifacts behind the claims.
BOUNDARIES / CONSTRAINTS
What the project does not pretend to solve.
—Designed as a local-link appliance
—Registrar defaults must be explicitly hardened for secure deployments
—RTP is intentionally endpoint-to-endpoint rather than MCU-relayed
RESULT / CURRENT STATE
What this produced.
A self-contained microcontroller phone exchange that can operate without a cloud PBX or conventional server.