End-to-end Build Log: Raspberry Pi 5 touch Console + ESP32-S3-BOX Voice Assistant

End-to-end Build Log: Raspberry Pi 5 touch Console + ESP32-S3-BOX Voice Assistant

By Daniel Rod, Accredited Specialist, Family Law

Welcome to this exciting end-to-end build log where we’ll guide you through creating a Raspberry Pi 5 Touch Console integrated with an ESP32-S3-BOX Voice Assistant. This project combines the computational power of the Raspberry Pi 5 with a sleek touchscreen interface and a versatile voice assistant module, resulting in a powerful tool for home automation enthusiasts. Whether you’re looking to control your smart home devices with a tap or a spoken command, this setup offers both flexibility and functionality. Plus, with the addition of a local voice assistant, your privacy remains intact as no data leaves your network. Let’s dive into this step-by-step journey and bring this innovative project to life!


1. Bill of Materials

Before we start assembling anything, let’s gather all the components needed for this project. Here’s a detailed breakdown of everything you’ll require, along with some insights into why each item is essential and what to consider when sourcing them.

Qty Item Notes
1 Raspberry Pi 5 (4 GB/8 GB) The heart of our setup, the Raspberry Pi 5 is the latest model (as of 2025) and comes in 4 GB or 8 GB RAM variants, both of which are suitable for this project. A 27 W USB-C PSU is recommended to ensure stable power delivery, especially since we’ll be powering a touchscreen alongside the Pi’s processing demands. This ensures your system won’t stutter under load.
1 Freenove 5-inch 800 × 480 IPS capacitive DSI display This compact 5-inch touchscreen boasts an 800 × 480 resolution and connects directly to the Pi via its DSI port. It’s driver-free, meaning no extra software is needed for basic operation, and supports 5-point capacitive touch for smooth interaction. The IPS panel offers vibrant colors and wide viewing angles, making it perfect for a console you might place anywhere in your home.
1 32 GB (or larger) micro-SD card Flashed with Home Assistant OS, this card serves as the storage for your operating system and data. A 32 GB card is the minimum, but if you plan to log extensive device states or run additional services, consider stepping up to 64 GB or even 128 GB for extra breathing room. Speed class 10 cards are ideal for faster boot times.
1 ESP32-S3-BOX dev-kit This development kit is packed with features: Wi-Fi and Bluetooth Low Energy (BLE) for connectivity, dual microphones for voice input, a 2.4″ IPS touchscreen for direct interaction, an IR transmitter/receiver for controlling legacy devices, and PMOD headers for future expansions. In this project, it’s our voice assistant powerhouse, adding hands-free control to the mix.
Misc hardware This includes 4 short + 4 long M2.5 brass standoffs, 8 M2.5 screws, a 15 cm DSI ribbon cable, and a USB-C cable. The short standoffs secure the display, while the long ones mount the Pi, ensuring proper spacing. The DSI ribbon connects the display to the Pi, and the USB-C cable powers the whole setup. These small pieces are crucial for a sturdy and functional assembly.

When sourcing these items, opt for reputable vendors to ensure compatibility and reliability. If you’re new to DIY electronics, don’t fret—each component is straightforward to work with, and I’ll walk you through every step to make this process as smooth as possible.


2. Hardware Assembly

Now that we have our components, it’s time to put them together. Assembling the hardware is a satisfying hands-on process, but it requires care—especially with delicate parts like the DSI ribbon cable. Let’s break it down into manageable steps.

2.1 Mounting the Display

Here’s how to securely attach the Freenove display to the Raspberry Pi 5:

  1. Fit the four short standoffs to the rear of the Freenove PCB (see red arrows above). Start by screwing the four short M2.5 brass standoffs into the mounting holes on the back of the display’s printed circuit board. These provide a stable base and create just enough space to avoid pressure on the display’s electronics. If you have a diagram handy, the red arrows will point you to the exact spots—otherwise, they’re typically at the corners.
  2. Insert the 15 cm DSI ribbon into the panel’s FFC with contacts facing down, lock the latch, and gently tug to confirm retention. Take the DSI ribbon cable and carefully slide it into the display’s Flexible Flat Cable (FFC) connector. Ensure the shiny contacts face downward toward the PCB, then press the latch down to lock it in place. Give it a light tug to make sure it’s secure—loose connections here can lead to display issues later.
  3. Seat the Raspberry Pi 5 on the standoffs, align the ribbon with the Pi’s DSI-0 socket and latch. Position the Pi over the standoffs so its mounting holes line up. Then, take the other end of the DSI ribbon and insert it into the Pi’s DSI-0 port (check your Pi’s labeling). Again, ensure the contacts face the right direction—usually toward the board—and secure the latch. This direct connection is what makes the DSI display so seamless.
  4. Screw the Pi down, then replace the four long standoffs to give clearance for HDMI & GPIO headers. Use the 8 M2.5 screws to fasten the Pi to the short standoffs, then attach the four long standoffs to the Pi’s mounting holes. These longer standoffs lift the Pi slightly, ensuring that ports like HDMI and GPIO remain accessible and that airflow isn’t obstructed—a small but critical detail for heat management.

Tip: For portrait orientation rotate in software—do not twist the ribbon. Twisting the DSI cable might seem like a quick fix to change the display’s orientation, but it risks damaging the cable or causing display glitches. Instead, we’ll adjust this in the software settings later, keeping everything neat and functional.

2.2 Power-up & First-boot Checks

With the hardware assembled, let’s power it up and verify everything’s working:

  1. Edit the config.txt file. Before inserting the micro-SD card into the Pi, access its /boot/firmware/config.txt file on your computer and add this line:
# /boot/firmware/config.txt
dtoverlay=vc4-kms-v3d   # Enable KMS for DSI panel

This line activates Kernel Mode Setting (KMS) for the DSI display, telling the Pi’s graphics system how to handle the touchscreen. It’s a simple but essential tweak for proper display output.

  1. Save and sudo reboot. Save the file, eject the SD card, insert it into the Pi, and connect the USB-C power supply. The back-light should illuminate ~2 seconds after power-on, a reassuring sign that the display is powered and the DSI connection is solid. If it doesn’t light up, double-check your ribbon cable connections and the config tweak.

This initial boot lets you confirm the hardware is talking to each other correctly before we load the software.


3. Flashing home Assistant Os

Next, we’ll install Home Assistant OS, an open-source platform that turns your Raspberry Pi into a smart home hub capable of controlling lights, thermostats, and more. Here’s how to get it onto your micro-SD card:

  1. Launch Raspberry Pi Imager. Download and open the Raspberry Pi Imager tool on your computer—it’s a user-friendly way to write operating systems to SD cards.
  2. Operating System → Home Assistant OS → Raspberry Pi 5 (64-bit). In the imager, select the Home Assistant OS option tailored for the Raspberry Pi 5’s 64-bit architecture. This ensures optimal performance for our setup.
  3. Select the SD card under Storage. Pick your micro-SD card from the list—double-check it’s the right device to avoid overwriting something else!
  4. (Optional) open the ⚙️ menu to set hostname, Wi-Fi, locale (en-AU) and enable SSH. Click the gear icon for advanced settings. Here, you can name your device (e.g., homeassistant), enter your Wi-Fi details for wireless connectivity, set your region (like en-AU for Australia), and enable SSH for remote command-line access. These tweaks streamline setup and troubleshooting.
  5. Click Write, eject, insert, power the Pi. Hit Write to flash the OS onto the card. Once done, safely eject it, pop it into the Pi’s SD slot, and plug in the power. After ~3 minutes, browse to http://homeassistant.local:8123 (or the Pi’s IP if mDNS fails) to complete onboarding via the web interface.

This process sets up the foundation for our smart console. If the display or network doesn’t kick in, ensure your config.txt edit from earlier is correct and your Wi-Fi details are accurate.


4. Setting-up the ESP32-S3-BOX

The ESP32-S3-BOX brings voice control to our project, and setting it up involves preparing its development environment and flashing its firmware. Let’s get it ready.

4.1 Tool-chain & Sdk

Here’s how to configure the ESP32-S3-BOX from your computer:

git clone --recursive https://github.com/espressif/esp-box.git
cd esp-box
./install.sh                     # installs ESP-IDF v5.x
. export.sh                      # add IDF tools to shell
idf.py set-target esp32s3
idf.py build
idf.py -p /dev/ttyUSB0 flash monitor

4.2 Ota-ready Firmware

To make future updates easier, copy build_esp32s3-box.bin to Home Assistant’s /config/www/ folder so you can update the BOX later with a simple HTTP request. This Over-The-Air (OTA) capability means you won’t need to plug it in again for firmware tweaks—just push updates wirelessly from Home Assistant.


5. Integrating the Box with home Assistant

Now, let’s connect the ESP32-S3-BOX to Home Assistant for seamless voice control. Here’s an example automation to get you started:

# Example automation: pause media when you say "pause music"
alias: Voice - pause media
trigger:
  - platform: state
    entity_id: sensor.esp32s3_box_last_command
    to: "pause music"
action:
  service: media_player.media_pause
  target:
    entity_id: media_player.living_room
mode: single

This YAML snippet pauses your living room media player when you say “pause music” to the BOX. It’s a simple demo, but you can craft automations for lights, locks, or anything else in your smart home.


6. Adding Willow for Local, Private Voice Commands

For privacy-conscious users, Willow offers a fully local voice assistant with sub-500 ms response times. Here’s how to add it:

docker run --detach --name=willow-was \
--pull=always --network=host --restart=unless-stopped \
--volume=was-storage:/app/storage \
ghcr.io/heywillow/willow-application-server
ip route get 1.1.1.1 | grep -oP 'src \K\S+'

Run this to find your Pi’s IP address (e.g., 192.168.1.100).

Willow keeps your voice data local, making it a standout feature for privacy and speed.


7. Touch-optimised Lovelace Dashboard

Because the display is 800 × 480, a compact resolution, we’ll optimize Home Assistant’s Lovelace dashboard for touch. Use narrow vertical-stack cards to fit content neatly, and set the HA theme font-scale to 110% for better readability. The IPS panel’s wide viewing angle makes it ideal for bedside or kitchen controllers—places where you might glance at it from odd angles. Consider designing a custom dashboard with big, tap-friendly buttons for quick access to key controls.


8. Future Ideas

Your console is up and running, but why stop there? Here are some creative enhancements:

Idea Description
Presence-aware widgets Use the BOX’s Bluetooth scanning to publish occupancy to HA. Imagine lights turning on as you enter a room, all based on detecting your phone!
IR bridge Train the BOX’s IR LED/receiver to control legacy appliances. Capture IR codes from your TV remote and use voice commands to switch channels or adjust volume.
Edge ML Deploy keyword-spotting or person-detection models with ESP-DSP. Run machine learning on the BOX itself for custom wake words or security alerts, no cloud required.
Pi Camera overlay Add a Pi 5 camera and picture-in-picture the feed on the touch UI. Perfect for checking the front door or keeping an eye on a pet from your console.

These ideas can take your project to the next level, tailoring it to your unique needs.


There you have it—a fully functional Raspberry Pi 5 Touch Console with an ESP32-S3-BOX Voice Assistant! This build log has walked you through every step, from gathering parts to dreaming up future upgrades. Enjoy your new smart home controller, and feel free to tweak it to make it your own!

Final product below!

IMG_2142.jpg

IMG_2143.jpg

IMG_2144.jpg

IMG_2145.jpg

IMG_2146.jpg