ESP32-S3-BOX-3 deploys Home Assistant localized voice assistant, 3 personalized teaching methods – Home Assistant step-by-step teaching EP 10

Everyone should be familiar with controlling smart homes through voice. Even on mobile phones, we often use Hey Siri or OK Google... to call voice assistants. Continuation of the previous article:

We replaced the Home Assistant voice assistant with Google Gemini or ChatGPT, so that the response of the Home Assistant voice assistant would not be as stiff as Siri and would be smarter. It could even be assigned a personality according to your own preferences, but at that time it could only interact with typing. .

Today I will show you how to use ESP32-S3-BOX-3 to build your own Home Assistant. This is better than synchronizing the device to HomeKit or Google Home through HomeKit Bridge or Google Home integration, and then using Siri or Google Assistant voice control. It is more direct and you can create a more suitable voice assistant according to your own preferences👍

Let’s take a look at the final effect first:

Great! It’s so easy to experience the life of an ancient emperor🤣

Without further ado, let’s get started!


ESP32-S3-BOX-3 unboxing

ESP32-S3-BOX-3 開箱圖

Contents:

  1. ESP32-S3-BOX-3 Me: This is the host computer. It can be used directly regardless of other accessories being plugged in.
  2. DOCK: Base, with interfaces on it to connect other devices in series.
  3. SENSOR: It has the same function as DOCK, but it has additional temperature and humidity sensors, infrared transmitter/receiver, radar sensor, rechargeable battery slot, and MicroSD slot. Although I can’t use them today, I use this one because it’s more handsome🤣
  4. BRACKET: Adapter accessory, you can use this to install the host on other devices.
  5. BREAD: Adapter accessory, used to connect to breadboard.
  6. transmission line
  7. RGD module, Dupont line

For what we are going to do today, you can actually buy "ESP32-S3-BOX-3B", which includes the host and DOCK, and the others will not be used. Think about it when you want to buy it.


Step 1. Install and launch the ESPHome add-on

Step 1-1. "Settings" on the left side of Home Assistant ➜ "Add-ons"

Step 1-1. Home Assistant 左側「設定」 ➜ 「附加元件」

Step 1-2. Install "ESPHome"

  1. Click "Add-on Store" in the lower right corner
右下角點選「附加元件商店」
  1. Find "ESPHome" and click
找到「ESPHome」並點擊
  1. Install "ESPHome"
安裝「ESPHome」
  1. Turn on Watchdog, automatically update, and display in the sidebar
  2. Click "Start"
開啟 Watchdog、自動更新、於側邊欄顯示、點擊「啟動」
  1. "ESPHome" startup completed!
「ESPHome」啟動完成!

Step 2. Install the openWakeWord add-on

Step 2-1. "Settings" on the left side of Home Assistant ➜ "Add-ons"

Step 2-1. Home Assistant 左側「設定」 ➜ 「附加元件」

Step 2-2. Install "openWakeWord"

  1. Click "Add-on Store" in the lower right corner
右下角點選「附加元件商店」
  1. Find "openWakeWord" and click
找到「openWakeWord」並點擊
  1. Install "openWakeWord"
安裝「openWakeWord」
  1. Turn on Watchdog and automatically update
  2. Click "Start"
開啟 Watchdog、自動更新、點擊「啟動」
  1. "openWakeWord" startup completed!
「openWakeWord」啟動完成!

Step 3. Add "openWakeWord" integration

Step 3-1. "Settings" on the left side of Home Assistant ➜ "Devices and Services"

Step 3-1. Home Assistant 左側「設定」 ➜ 「裝置與服務」

Step 3-2. Set up "openWakeWord" integration

  1. At this time, "openWakeWord" will appear in the "Scanned" section, click "Settings"
  2. The system will ask whether to use Wyoming Protocol, click "Send"
  3. Click "Finish" in the success message window
這時候會在「已掃描」區塊出現「openWakeWord」,點擊「設定」系統會詢問是否使用 Wyoming Protocal,點擊「傳送」在成功訊息視窗點擊「完成」

Step 4. Set the voice assistant wake word

Step 4-1. Home Assistant "Settings" on the left ➜ "Voice Assistant"

Step 4-1. Home Assistant 左側「設定」 ➜ 「語音助理」

Step 4-2. Select voice assistant

Step 4-2. 選擇語音助理

Step 4-3. Set wake word

  1. Wake word engine selects "openwakeword"
  2. Choose a wake-up word that you like. Here is an example of choosing "ok nabu"
喚醒詞引擎選擇「openwakeword」喚醒詞選一個你自己喜歡的,這裡示範選擇「ok nabu」

Now that you have set the wake word, proceed to the installation and settings of ESP32-S3-BOX-3!


Step 5. Install and set up ESP32-S3-BOX-3

⚠️Attention! If you have installed S3 BOX in the past, be sure to go to "Settings > Devices and Services > ESPHome" to find the S3 BOX and delete it⚠️

Step 5-1. Flash ESP32-S3-BOX-3 firmware

  1. Go to the ESPHome project website:https://esphome.io/projects/index.html
  2. Select "Voice assistant"
  3. Select "ESP32-S3-BOX-3"
  4. Click "Connect"
前往 ESPHome 專案網站:https://esphome.io/projects/index.html選擇「Voice assistant」選擇「ESP32-S3-BOX-3」點擊「Connect」
  1. Connect ESP32-S3-BOX-3 to your computer through the transmission cable
  2. Select the ESP32-S3-BOX-3 device
  3. Click "Connect"
將 ESP32-S3-BOX-3 透過傳輸線連接到你的電腦選擇 ESP32-S3-BOX-3 裝置點擊「連線」
  1. Select "Install ESP32 S3 Box 3"
  2. Click "Install"
  3. Click "Next"
選擇「Install ESP32 S3 Box 3」點擊「Install」點擊「Next」

Step 5-2. Set up WiFi connection

Enter your home WiFi connection information and click "Connect"

輸入家中的 WiFi 連線資訊並點擊「Connect」

Step 5-3. Add the device to Home Assistant

  1. Click "Add to Home Assistant"
點擊「Add to Home Assistant」
  1. Confirm Home Assistant physical address
    The default is "http://homeassistant.local:8123". If you change it when installing Home Assistant, remember to change it to a URL that can connect to Home Assistant!
  2. Click "Open Link"
確認 Home Assistant 實體位址預設是 "http://homeassistant.local:8123",如果你在安裝 Home Assistant 時有自己變更,記得這裡要換成可以連接到 Home Assistant 的 URL!點擊「Open Link」
  1. At this time you will automatically be taken to the Home Assistant integration list, select "OK" in the pop-up window
  2. Select "ESP32 S3 Box 3" in the Add discovered device menu
  3. Select "Send" in the pop-up window
這時候你會自動被帶到 Home Assistant 整合列表中,在彈跳視窗中選擇「好」在新增所發現的裝置選單中選擇「ESP32 S3 Box 3」彈跳視窗中選擇「傳送」

Step 6. Check whether the ESP32-S3-BOX-3 integration is successful

  1. Home Assistant left column "Settings" > "Devices and Services"
  2. Find ESPHome click device count
Home Assistant 左側欄「設定」>「裝置與服務」找到 ESPHome 點擊裝置數

At this time, you can see the ESP32-S3-BOX-3 related device information, and you can mute and switch the screen, then you have successfully integrated it!

這時候有看到 ESP32-S3-BOX-3 相關裝置資訊,並可以進行靜音、螢幕開關那你就整合成功啦!

Try talking to the voice assistant!

Also featured – Personalize your voice assistant

Just switching to a voice assistant with a brain must still be too boring, right? ! Try changing your profile, customizing your display picture, and customizing your wake word!

Change persona

  1. Click on the right side of the conversation assistant menu⚙️
  2. Add the role you want it to play in the instructions
  3. Click "Send"
點擊對話助理選單右側 ⚙️在指示中新增你想要它扮演的角色點擊「傳送」

In this way, you can change it into a variety of characters you like! Share with me what kind of persona do you like to change into? 🤣

Customize voice assistant display picture

Frankly speaking, the default display image is really boring, right? Then try changing the picture! You can even change it to a photo of yourself (if you are narcissistic enough🤣), as if there is another self helping you handle big and small things, cool~

Before starting, take a look at the picture below to understand the 6 states of the Home Assistant voice assistant:

Home Assistant 語音助理的 6 種狀態
Image credit: Home Assistant

① Enter ESPHome web UI

Usually it will be in the sidebar. If not, go to "Settings > Add-ons" to find it.

進入 ESPHome web UI

② Put ESP32-S3-BOX-3 into management (ADOPT)

This will allow you to adjust various settings. Once completed you will see the status in the upper right corner change from DISCOVERED to ONLINE

ESP32-S3-BOX-3 納入管理 (ADOPT)
Image credit: Home Assistant
ESP32-S3-BOX-3 納入管理 (ADOPT)

③ Select picture material or create picture material

In Home Assistant Github repository There are materials shared for everyone to use. If you are like me and have no artistic talent, you can just find one you like from there.

Of course, you can also draw it yourself, or let AI draw it for you, and refer to the format and specifications to produce relevant picture material files:

  1. Size: 320×240. If the provided material is not in 4:3 ratio, the remaining area will be filled with background color.
  2. Image format: PNG, JPEG, SVG.
  3. In the image, you can use two background colors to roughly distinguish whether the voice assistant is active or inactive:
    • loading, idle state: dark background.
    • listening, thinking, reply status: light background.
    • error status: dark or light background is fine.
  4. If the background of your image is left transparent, you can set the background color in the configuration in the following steps.
  5. Prepare 6 pictures and put them into a folder
  6. Place the folder containing 6 pictures into the folder of config/ESPHome

④ Edit ESP32-S3-BOX-3 configuration file

Find ESP32-S3-BOX-3 in ESPHome web UI and click "EDIT"

編輯 ESP32-S3-BOX-3 設定檔

At this time you will see the yaml editor, like this:

編輯 ESP32-S3-BOX-3 設定檔

If you choose Home Assistant Github repository Material library, place the following code into substitutions In the block:
※ Remember to change the path to the material path you want

YAML
substitutions:
  loading_illustration_file: https://github.com/jlpouffier/home-assistant-s3-box-community-illustrations/raw/main/jarvis_female/illustrations/loading.png
  idle_illustration_file: https://github.com/jlpouffier/home-assistant-s3-box-community-illustrations/raw/main/jarvis_female/illustrations/idle.png
  listening_illustration_file: https://github.com/jlpouffier/home-assistant-s3-box-community-illustrations/raw/main/jarvis_female/illustrations/listening.png
  thinking_illustration_file: https://github.com/jlpouffier/home-assistant-s3-box-community-illustrations/raw/main/jarvis_female/illustrations/thinking.png
  replying_illustration_file: https://github.com/jlpouffier/home-assistant-s3-box-community-illustrations/raw/main/jarvis_female/illustrations/replying.png
  error_illustration_file: https://github.com/jlpouffier/home-assistant-s3-box-community-illustrations/raw/main/jarvis_female/illustrations/error.png

If you are making your own material, place the following code into substitutions block and set the background color of each state (if the image has a transparent background):
※ Change the example voice_assistant_gfx Replace it with the name of your material folder
※ Remember to change the background color of each status (line 8~13 in the example below)

YAML
substitutions:
  loading_illustration_file: voice_assistant_gfx/loading.png
  idle_illustration_file: voice_assistant_gfx/idle.png
  listening_illustration_file: voice_assistant_gfx/listening.png
  thinking_illustration_file: voice_assistant_gfx/thinking.png
  replying_illustration_file: voice_assistant_gfx/replying.png
  error_illustration_file: voice_assistant_gfx/error.png
  loading_illustration_background_color: '000000'
  idle_illustration_background_color: '000000'
  listening_illustration_background_color: 'FFFFFF'
  thinking_illustration_background_color: 'FFFFFF'
  replying_illustration_background_color: 'FFFFFF'
  error_illustration_background_color: '000000'

⑤ Save and install

This step will take different installation times depending on the hardware environment you are using, so please be patient! Once completed, you can see the new display image on the screen! ~

※ I used Raspberry Pi 4 + 8G RAM (Raspberry Pi 4 Model B/8G) and ran it for about 30 minutes

儲存並安裝

I unexpectedly found that this is a perfect match for my desktop🤣

ESP32-S3-BOX-3 桌面搭配

There is still a lot to play with in ESP32-S3-BOX-3, and there is also self-made firmware by foreign masters to give the BOX’s touch screen more functions. I will find time to try it in the future.

I hope today’s article can be helpful to you who have joined Home Assistant in building a localized voice assistant. You are also welcome to leave a message below to interact with me! 👋

8 COMMENTS

  1. Hi Neil,
    After I followed the settings and talked to the ESP32, it didn't wake it up. The ESP32 was always on the standby screen. Do I need to register and pay for HA Cloud to use this voice function?

  2. Hi Neil, please tell me how to solve the problem that printf outputs Chinese characters with black squares. Even after changing several fonts, it still remains the same?

    • Try it yourself :D
      I originally thought that if glyphs were not added, then the entire character set would be included.
      The result must be added
      Sorry to bother you

      – file: “https://github.com/notofonts/noto-cjk/raw/refs/heads/main/google-fonts/NotoSerifTC%5Bwght%5D.ttf”
      id: font_response
      size: 15
      glyphs: '${allowed_characters}'

  3. After using the sensor and completing the settings and firmware burning according to the content of your article, will there be entities for temperature, humidity, and infrared transmission and reception in the HA?

LEAVE A REPLY

Please enter your comment!
Please enter your name here

you might like
recent discussions
  • Jerry 2025/04/14Thank you very much Neil for your selfless sharing. The websites you provided are of great help to me. I will save it first and digest it slowly^^ I also look forward to Neil's industry news and teaching articles in the futureHome Assistant Floor plan A new experience in smart home control with visual floor plan! – Home Assistant step-by-step tutorial EP 6
  • Neil 2025/04/13Hi Jerry, I usually get information about HA from these places: Website: – Home Assistant official Release notes – Automata – Home Automation Community – Weijia Home Intelligence FB Group: – Taiwan Home Assistant enthusiasts exchange – Home Assistant YouTube channel: – Smart Home Solver – Everything Smart Home – Home Assistant Programming language: Strictly speaking, YAML is not really a programming language (let me make this clear in case some people mind 🤣), but if we include these data formats or style languages that “look like” programming languages, and sort them by depth of use in HA (the deeper the bottom, the deeper the bottom): – YAML (data format): a language for configuration files used in many places in the HA environment. – CSS (style language): used to adjust the interface style (font size, color, image, position, etc.). – JSON (data format): If you use Node-RED, you will probably come across it. – Jinja2 (Python template syntax): You may encounter it when you explore automation or Dashboard in depth. ※ But in fact, even if HA does not know the above, it can still make a smart home complete. You don’t have to put so much pressure on yourself, but if you are interested, it is also good to know more. It is actually difficult to generalize about the support of devices. Now, even if the home appliances themselves do not support it, there are still many different ways to connect traditional home appliances to HA. In addition, cases like Haier do require in-depth research. What I usually do is to crawl a lot of information on the Internet, and usually find attempts made by others. It just so happens that when I was looking up other information recently, I saw someone sharing how Haier water heaters were connected to HA. But it is indeed like what you said, if you get involved for a while, you will understand these details more and more. 🤣Home Assistant Floor plan A new experience in smart home control with visual floor plan! – Home Assistant step-by-step tutorial EP 6
  • Jerry 2025/04/10Hello Neil: After observing for 1 or 2 days, everything seems to be normal. Maybe it’s because the system was not stable during the initial setup period!? The more I play, the deeper I feel. I also find that I still have many shortcomings. I wonder if Neil can share and teach everyone how to fish? For example, recommend good websites, forums, FB groups, youtube videos, or give some guidance. In addition to the YAML language, would it be helpful to know some CSS syntax? Do I need to know other languages? I can even start a new teaching direction. When I see non-big-name products that claim to support APP (such as products from mainland China), I can teach everyone how to identify whether they can be connected to HA and how to ask customer service? Where can I see supported articles or platforms? This kind of experience sharing, I think, will be very helpful to everyone. I am currently looking to buy a heat pump water heater from Haier. Haier is a big manufacturer in the world and has its own APP. I have also found Haier's kit from HACS, but it does not seem to support heat pump water heaters. Does that mean it cannot be connected to HA? Or is there any channel to check it? There are also many flat panel lights and fan function lamps on the other side of the strait, which also claim to support APP connection, but they are all small manufacturers and it is difficult to tell whether they can be connected to HA. These are the problems I am facing now. If the home appliances I buy are different from what Neil shared, I don’t know where to start. Maybe I'm still too inexperienced. If I play for a few more months, maybe the above problems won't be a problem anymore, haha^^Home Assistant Floor plan A new experience in smart home control with visual floor plan! – Home Assistant step-by-step tutorial EP 6
  • Neil 2025/04/09Hi Jerry, I tested it myself and it was fine, but please note that because it is controlled through the cloud, there is an extra layer of brand mediation, so it is not suitable for fast switching. I tested it myself and it took about 1 second to complete the synchronization after clicking. Remember to put the entity in entities, otherwise the status display may have problemsHome Assistant Floor plan A new experience in smart home control with visual floor plan! – Home Assistant step-by-step tutorial EP 6
  • Jerry 2025/04/07Thanks Neil for clarifying this. I tested it later and found that when using the "button panel" to control the switch of the Electrolux air conditioner (the same model as Neil), the device will respond to turning on or off in about 1 second, but the "status icon" for turning on is much slower, and it takes about 30 seconds. The "status icon" for turning off is normal, and the "status icons" of other negative ion switches and the "status icons" of the monitoring light switch are also normal, which made me think there was a problem with the synchronization. I'll test it again, maybe it's caused by the wrong setting.Home Assistant Floor plan A new experience in smart home control with visual floor plan! – Home Assistant step-by-step tutorial EP 6
  • Neil 2025/04/07Hi Jerry, 1. This method is through cloud integration, which is actually using HA to call Xiaomi/Electrolux to control the device. 2. It is not normal. If this happens, you may need to check whether the entity you display on the floor plan can truly represent the status of the device. If not, you may need to try other entities of the same device.Home Assistant Floor plan A new experience in smart home control with visual floor plan! – Home Assistant step-by-step tutorial EP 6
  • Jerry 2025/04/07The problem is solved. Thanks again to Neil for his help^^ I have two more questions about concepts. Neil, do I have any misunderstandings? 1. I connected Xiaomi and Electrolux devices to HA through HACS. Is it still connected through WiFi? Before connecting, you need to obtain API key and Access Token from the official. This means that the communication between HA and the device still needs to go through the official. It’s just that the official APP can be replaced and all integrated into the HA APP for control? 2. After testing, when controlling the device through physical operation or the original official APP, the HA app cannot know the status of the device synchronously, but it can know the opposite. Is this normal? For example, the Xiaomi electric fan at home was turned on by someone physically before going out, but when the person is outside, he cannot know through the HA app that the device was forgotten to be turned off. He has to connect to the Xiaomi app to know!?Home Assistant Floor plan A new experience in smart home control with visual floor plan! – Home Assistant step-by-step tutorial EP 6
  • Ghost 2025/04/07Xiaomi Home currently does not support Taiwan. For now, you can only use Xiaomi Miot Auto. As for Xiaomi Cloud Map Extractor, I currently have a 2FA problem. There seems to be no simple solution. I haven’t tried it successfully yet.Home Assistant must-install HACS plug-in installation steps detailed explanation – Home Assistant step-by-step tutorial EP 17
  • Neil 2025/04/07Jerry, it seems that the click action cannot penetrate the part where the picture changes because of the overlapping pictures. Try adding pointer-events: none to the style.Home Assistant Floor plan A new experience in smart home control with visual floor plan! – Home Assistant step-by-step tutorial EP 6
you might like