Skip to main content
Nastrotek
IoT SolutionsIoT SolutionsNew

A Vietnamese voice remote for local Home Assistant control

Notes for building an ESP32-S3 voice remote with ESPHome and a local Home Assistant Assist pipeline so Vietnamese voice commands can stay inside the home network.

Share

LinkedInFacebookX
Remote giọng nói ESP32-S3 tự làm đặt trên bàn với Home Assistant chạy nội bộ

If you want to build along, I recommend validating the full Vietnamese pipeline with push-to-talk before adding a wake word.

Physical switches are still the fastest smart-home interface. But voice is genuinely useful in a few moments: cooking with wet hands, lying in bed, or turning off a whole room without opening the phone.

This idea is a small push-to-talk voice remote for Home Assistant. I prefer push-to-talk over an always-listening device for the first version. It feels easier to explain at home, it is better for privacy, and it makes Vietnamese voice testing less frustrating.

What should the Nastrotek version do?

The MVP should be simple:

  • Press a button and speak Vietnamese.
  • Stream audio to Home Assistant on the local network.
  • Let a local Assist pipeline process the command.
  • Reply through a small speaker, or use an LED when the command succeeds.
  • Provide a mute button or clear status LED so people know when it is listening.

I would avoid a touchscreen, mini dashboard, or long conversational AI mode at the beginning. This remote only needs to control the home: turn on the desk light, switch off the fan, start a bedtime scene, or ask whether the front door is locked.

A 3D-printed ESP32-S3 voice remote prototype being tested with a laptop running Home Assistant in the background.

The first version should prefer push-to-talk so the microphone only listens when someone actually wants to speak.

Hardware proposal

For the fastest path with fewer audio problems:

  • Seeed ReSpeaker Lite with XIAO ESP32-S3.
  • A large push-to-talk button.
  • Status LED states: idle, listening, thinking, error.
  • Small 3D-printed enclosure with microphone holes and a speaker grille.
  • USB-C power for the first version.

For a cheaper but more debug-heavy path:

  • ESP32-S3 DevKit.
  • I2S microphone such as INMP441.
  • MAX98357A I2S amplifier and a small speaker.
  • WS2812 or RGB LED.
  • One PTT button and one mute button.

I would not pick ESP32-C3 for a full voice build. ESP32-S3 has more headroom and is a better fit for ESPHome voice-assistant work, especially when PSRAM is available.

Local Vietnamese pipeline

The local part mostly lives on the Home Assistant machine, not entirely on the remote. The remote listens and plays audio; the server at home handles the heavier work:

A local Vietnamese voice remote pipeline diagram: push-to-talk, ESP32-S3, ESPHome, Home Assistant Assist, local STT, intent handling, local TTS, and feedback to the remote.

Keep the remote focused on listening and playback; Home Assistant on the local network handles STT, intent, and TTS.

PTT button
  -> ESPHome voice assistant
  -> Home Assistant Assist pipeline
  -> Local STT: Whisper or Speech-to-Phrase
  -> Home Assistant intent
  -> Local TTS: Piper
  -> Remote speaker or LED feedback

For Vietnamese, I would start with Whisper for speech-to-text because it is more flexible when commands are not perfectly fixed. The tradeoff is speed: on weaker Home Assistant hardware, responses may feel slow. If the command set is narrow, such as "turn on bedroom light", Speech-to-Phrase is worth testing because it is designed for fast home control.

The small but important work is naming. Entity names, areas, and aliases should match how people at home actually speak. If the entity is called light.bedroom_ceiling, but everyone says "den ngu", add a Vietnamese alias.

Why push-to-talk first?

Wake words are attractive, but Vietnamese plus noisy rooms can make the first build annoying. Sometimes it does not wake. Sometimes TV audio wakes it by accident. Home Assistant supports openWakeWord and microWakeWord paths, but a custom wake word still needs careful training and testing.

Push-to-talk is boring in a good way:

  • Press to listen, release to stop.
  • No continuous listening.
  • Fewer false triggers.
  • Easy for family members to understand.

Once the Vietnamese pipeline is reliable, wake word support can come later.

Easy mistakes

Do not place the speaker too close to the microphone unless the audio path handles echo well. Some ESP32 setups do not have proper echo cancellation, so TTS audio can leak back into the mic.

Do not start with battery power. Voice, Wi-Fi, and speaker output use far more power than a normal sensor node. Build the first version on USB-C, then think about battery later.

Do not make the commands too conversational at the start. For smart-home control, short and consistent phrases win: "turn on desk light", "turn off fan", "bedtime".

Do not skip status LEDs. Without feedback, people cannot tell whether the remote is listening, processing, or simply offline.

My first version

I would build the practical version first:

  • ESP32-S3 or ReSpeaker Lite.
  • Push-to-talk, no wake word yet.
  • Local Home Assistant Assist pipeline.
  • Vietnamese Whisper for STT.
  • Piper for TTS if the selected voice feels good enough; otherwise beep/LED feedback only.
  • The 5-10 smart-home commands used most often at home.

If it survives one week without making me open the Home Assistant app for small actions, it is worth keeping. It does not need to chat like a general assistant. It only needs to understand a few Vietnamese home commands reliably.

References

Share

LinkedInFacebookX

Keep exploring

Read next

Related articles

View more in IoT Solutions

Nastrotek uses cookies for analytics and ad personalization to help us understand how the site is used. You can accept or decline non-essential cookies.