This is an automated archive made by the Lemmit Bot.
The original was posted on /r/homeassistant by /u/Single_Ad_2068 on 2026-06-08 19:58:23+00:00.
Hi everyone,
This project started as a continuation of my previous idea: turning a simple ceiling speaker into a “smart” speaker. After the first experiment, I decided to buy a couple more ceiling speakers, but this time something better quality. I think it worked out quite well — the sound became much better, and the speakers were still quite cheap.
https://preview.redd.it/0h6tahb9746h1.png?width=521&format=png&auto=webp&s=10d28acde2cb694f02d5cf2f8518f6d8ccd618cb
The speakers were originally not intended for this type of use. They are 70–100V ceiling speakers with an internal transformer. But after removing the transformer, they become normal 8 Ohm speakers. As a bonus, the empty space left inside the enclosure is perfect for installing my own electronics.
https://preview.redd.it/97xzfx3c746h1.png?width=678&format=png&auto=webp&s=f8a795925298fbdc42562bbbcea7a69ffc383083
For the electronics, I used small modules from AliExpress, including an ESP32-S3 board, a MAX98357A I2S Class-D mono DAC/amplifier, and a capacitor to help with power stability and bass response. After some small modifications, everything fits inside the original speaker housing.
https://preview.redd.it/agkjjmud746h1.png?width=683&format=png&auto=webp&s=d78e781c148a6abe27ba522e1aaa13f7bb89d9f3
https://preview.redd.it/l9t6mz6f746h1.png?width=523&format=png&auto=webp&s=04117ea8d590f86935734690e1b61439cc36f2aa
So, the hardware part was more or less solved.
The harder part was the firmware.
I wanted something universal for my own ESP32 audio projects. Existing solutions did not fully satisfy me. ESPHome and Tasmota are great for many tasks, but for this project they felt too limited and did not expose all the functionality I wanted from the ESP32-S3.
So I wrote my own firmware.
https://preview.redd.it/p79l4i2i746h1.png?width=914&format=png&auto=webp&s=17e9c4a8606ca4f26b4d0d530f02b057c38bc34e
Main features
The firmware includes a web interface where I can configure and control the device directly.
https://preview.redd.it/sgjvt5rj746h1.png?width=915&format=png&auto=webp&s=3ded4549f4098fb69fcd2428178c3c447039b7ca
One of the features I wanted was visual GPIO configuration. The firmware allows assigning input/output pins, and the device layout can be shown visually using SVG illustrations of supported boards and modules.
https://preview.redd.it/6mazovhl746h1.png?width=914&format=png&auto=webp&s=fb9f92ac9b23c911abe1f7e2774ba20dd8758043
Of course, it is impossible to include SVG illustrations for every possible board, module, and peripheral because firmware storage is limited, but I added a useful basic set.
https://preview.redd.it/qogct24n746h1.png?width=918&format=png&auto=webp&s=b649940a8f376f7ba617474760b61428d67538db
The speaker can also play internet radio stations from around the world.
https://preview.redd.it/sj6jzwfo746h1.png?width=912&format=png&auto=webp&s=1e2511b8c6f2584e3b66272232ae1f8ed80abf0b
There is monitoring for current ESP32-S3 parameters, including:
- chip status
- CPU/load information
- temperature
- RAM usage
- SD card usage
https://preview.redd.it/h7y5yq4r746h1.png?width=912&format=png&auto=webp&s=8c946bcd08b998b43691bb350576122a95712a93
The firmware also supports assigning different audio files for different events, for example:
- startup sound
- shutdown sound
- firmware update sound
- error sound
- alarm sound
- background music
https://preview.redd.it/yakk6pft746h1.png?width=918&format=png&auto=webp&s=6ba63031163909a7f3a641cfcf369859fd2df8eb
Each event can also have its own individual volume level.
Because the device has an SD card, I also added a small file manager. From there, it is possible to browse files and play music directly from the card. MP3 and other formats are supported, including FLAC.
https://preview.redd.it/v2allzpw746h1.png?width=910&format=png&auto=webp&s=0c964eebdcdabe2dbddbcabbb5a353d5bc9a2844
OTA and safe updates
One of the reasons I like ESP32 devices is OTA updating.
https://preview.redd.it/9ti0ee1y746h1.png?width=906&format=png&auto=webp&s=41f862ca00312a10ef89449eeb317193861d064a
For this project, I also wanted safe OTA behavior. This is useful when a device is installed somewhere difficult to access — for example, in a ceiling, or on Mars.
If a firmware update is uploaded over the air and something goes wrong, the device can detect boot loops and roll back to the previous working firmware. This makes remote updates much safer.
If the update fails, the device response makes it clear that something went wrong, and then I can fix the problem without physically opening the device.
Why I built custom firmware
There are still many other features, and writing the firmware took quite a lot of time. The main reason I built it myself was that I wanted one universal platform for my own ESP32-S3 smart audio projects, with more control than ready-made firmware solutions usually provide.
The project is still developing, and I would be very happy to hear feedback, suggestions, or ideas from the community.
Project GitHub:
github.com
Contribute to elik745i/ESP32-S3-Ceiling-Speaker development by creating an account on GitHub.
Thanks for reading, and have a great day!