[ [ Aura ] Building a sub-second Voice Assistant & Full Duplex VoIP Telephony System using Bare Silicon 🚀 ]
About
This is a low-latency, full-duplex Smart Voice Assistant and VoIP Telephone system using only 5 components using only a bare ESP32-S3 microcontroller. Not only can you ask questions using this like you would with a Smart Speaker, but we also go to extremes using the microcontroller silicon! Making actual landline calls across the country using a one voice command using the ESP32.
[Note: Using the pre-trained Alexa firmware models until the wake-word neural network model has been trained.]
Hardware
ESP32-S3 DevKitC-1 (Microcontroller: Dual-Core Xtensa LX7 @ 240MHz, 16MB Flash, 8MB Octal PSRAM)
INMP441 Ominidirectional MEMS Microphone (Digital: I2S Sound In)
MAX98357A 3.2W Class D Mono Amplifier & DAC (Digital: I2S Sound Out)
4Ω 3W Full Range Speaker
WS2812B 8-Pixel RGB LED Ring (Live Visual Feedback)
Built onto a basic Breadboard using jumper wires. Custom 2-Layer PCB being made.
Development Time (~65hrs spent coding optimising firmware & DSP)
There were many challenges when trying to make a fully working full-duplex system using the raw development silicon:
Audio Cleaning & Removing Noise
Problem: Large noise from the 50Hz hum from mains along with DC offset was being captured by the MEMS Microphone due to the breadboard jumpers.
Solution: Designed a digital signal chain with a high pass filter (85Hz) to block out mains hum. A peak filter (3.2kHz) was used to ensure there was no distortion in the voice.
I2S Bus Splitting & Preventing Watchdog Crashes
Problem: When both the microphone and speaker were capturing/sending sound, the DMA was sharing resources causing audio distortion and watchdog crashes with FreeRTOS.
Solution: Split the audio into two separate I2S devices (I2S0 for sending sound, I2S1 for receiving sound). This prevented any deadlocking and allowed full-duplex.
Reducing Latency (< 800ms)
Problem: Most DIY Voice Assistants have a latency between 3-5 seconds.
Solution: Used the Groq LPU to handle processing (Whisper Turbo & Groq LLM). Used Cartesia Sonic for streaming TTS. Clauses are sent to the DAC in milliseconds after detecting silence.
Live Voice Assistant with AES
A custom SIP client was made to talk to JioFiber’s IMS exchange. This allows the ESP32 to make live calls. Ducking ensures that the microphone does not echo back the sound from the speaker.
Autonomous Memory System
Captures information about the user and what platforms they’re registered too. All data is stored in JSON format. Dashboard can be viewed using WebSockets.
Live Demo Videos
[Video 1] Sub-Second Multi Intent Voice Assistant (Live Weather & Bitcoin) 📺:
https://youtube.com/shorts/PmZ0z8Imm-w
[Video 2] Live ESP32 VoIP Call 📞:
https://youtube.com/shorts/HGMN75dKRuE
Full Documentation & Deep Dive
View the full documentation, schematics & Milestones for Part 2/3:
https://github.com/shravanmali/aura-esp32-voice-assistant/blob/main/PROJECT_STORY.md#part-2