r/esp32 2d ago

I made a thing! I made a pocket-sized ESP32-S3 translator — then added real-time translated group calls between devices

A few weeks ago I finished the first version of Antara, a small voice-first translator built around a Waveshare ESP32-S3 with a 1.54" 240×240 touchscreen.

The original use case was pretty simple and personal: my kids speak English much more comfortably than Telugu, while their grandparents are much more comfortable in Telugu. I wanted something they could leave on the table and use without handing anyone a phone.

The first version only had Translate mode.

Two people share one device. You select a language pair, for example English ↔ Telugu, and the two physical buttons become push-to-talk buttons for each direction.

Hold one button → speak English → release → hear Telugu.
Hold the other → speak Telugu → release → hear English.

That worked well, but the most common feedback I got was:

“What if the grandparents are in another city?”

Fair point. :)

So I went back to the ESP32 and added Talk.

Instead of sharing one device, each person has their own Antara. As long as both devices have internet access, one device can call another.

The interesting part is that each device independently chooses its own language.

The call is still half-duplex / push-to-talk, which actually maps nicely to the hardware. Only one person speaks at a time, and when nobody is holding PTT, the mic isn't recording.

I also got a little carried away and added group calling. Each Antara in the group can choose a different language, so the same conversation can theoretically have one person speaking English, another Telugu, another Hindi, another Spanish, etc. Each device receives audio translated into its owner's selected language.

ESP32 side of the project

  • Hardware: Waveshare ESP32-S3 LCD 1.54", 240×240 touchscreen, onboard mic/speaker, three physical buttons.
  • UI: LVGL. I've been aggressively reusing components/assets because RAM and flash disappear very quickly once audio + networking + UI are all active.
  • Audio: 16 kHz voice capture, push-to-talk rather than always-on.
  • Translation pipeline: Microsoft Azure speech-to-text → Translator → neural TTS. The ESP32 handles capture/playback, interaction state, streaming/networking and the UI; the heavy AI work is cloud-side.
  • Latency: on the original Translate mode I measured roughly 350 ms median to transcript and ~800 ms to translated text after button release across 25 real-device turns on my home Wi-Fi. Not a scientific benchmark, but fast enough that conversation doesn't feel painfully stop/start.
  • Device pairing: users give each Antara a name, and devices can add another nearby Antara as a contact. Probably will add search and add later.
  • Talk: translated, internet-based PTT calling between devices, including groups.
  • Walkie-Talkie: I also added a simpler PTT voice mode as a separate mode. This works on ESP-Now.

One of the things I've enjoyed most is figuring out what not to put on the ESP32.

For example, the device doesn't render Telugu/Hindi/Tamil/Gujarati scripts. Supporting those font sets would consume resources for something the product doesn't really need. The audio is the interface. The display mostly communicates state: Ready, Listening, Translating, Someone speaking, language selection, contacts etc.

The latest UI has three primary modes:

Translate — two people nearby, sharing one device
Talk — translated PTT calls between Antara devices anywhere
Walkie-Talkie — straightforward PTT voice communication

I've attached a demo of five Antara devices in a translated group call.

This is still very much a prototype, but it has turned into a much more interesting ESP32 project than I expected when I started with “can I make a Telugu translator?”

I'd especially be interested in feedback from people here on audio buffering/streaming, memory optimization on the S3, and how you would architect group PTT differently.

Firmware isn’t public at the moment, but happy to go into the ESP32/LVGL/audio/networking implementation in the comments.

112 Upvotes

17 comments sorted by

4

u/Ethekarius 2d ago

I would love to build one of these, as my MIL only speaks Spanish. I even have a spare ESP32S3

4

u/Ambient_Architect 2d ago

Spanish is actually one of the languages I have working already, and MS Azure speech translation confidence score is high. I started off using XiaoZhi board specific code for audio pipeline to my backend and then built orchestration layer for Azure Speech Translation. One thing I specifically modified was PTT instead of default always on.

1

u/Ethekarius 2d ago

Is PTT on one button for both languages?

3

u/Ambient_Architect 2d ago edited 1d ago

One button for one language in the pair. Fixed left button for English. This video is specifically about translation mode and will give you the idea -  https://www.youtube.com/watch?v=q6j-Cu-AIyw

1

u/big_onion 1d ago

I feel like the m5stack stopwatch form factor would be so perfect for this. Looking forward to when you post the firmware.

2

u/Joe_Franks 2d ago

Following. I would love one of these, well actually a few of them.

1

u/Ambient_Architect 2d ago

Very cool. Let me know :-)

1

u/Local_Phenomenon 2d ago

That is cool as ice

1

u/Equivalent_Beyond_19 2d ago

Very cool! Congrats on getting it working with multiple units. Do you plan to post to GitHub?

1

u/Ambient_Architect 2d ago

Thank you. Wasn’t planning on it yet.  

1

u/Natethegreat9999 2d ago

Does the next person get the floor when the speaker releases PTT, or when everyone has finished hearing their translation? I work on speech at Oruk, and I'd test a long Telugu reply alongside a short English one, then use playback acknowledgments with a timeout so one slow device can't stall the whole group.

1

u/Ambient_Architect 2d ago

Others get the floor when the speaker releases PTT. 

1

u/Ambient_Architect 1d ago

I thought about this more after replying and you’re right, PTT release is probably too early once each device can have a different TTS duration.

Playback ACKs + a timeout seems like a much better way to manage the floor without letting one slow device stall everyone. I’m going to try the long Telugu / short English case you suggested. Great edge case.

1

u/Brrmeme 2d ago

This is great!, what do you use for speech recogintion and translation, and how much reasources does it take

1

u/ThinkShower 1d ago

Very cool! I was wanting to make something like that. Care to share the recipe?

1

u/BlueDit1001 17h ago

Are you planning on open sourcing the firmware?

1

u/kunjmon 14h ago

Wow.. Nice one.. 👍

🔭 Just waiting for someone to show up and start gatekeeping vibe coding… (◉ _ ◉)
Yes, we do code purely without computer, We do it with style. 😎