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.
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.
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.
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.
Main features
The firmware includes a web interface where I can configure and control the device directly.
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.
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.
The speaker can also play internet radio stations from around the world.
There is monitoring for current ESP32-S3 parameters, including:
- chip status
- CPU/load information
- temperature
- RAM usage
- SD card usage
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
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.
OTA and safe updates
One of the reasons I like ESP32 devices is OTA updating.
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 - elik745i/ESP32-S3-Ceiling-Speaker
Contribute to elik745i/ESP32-S3-Ceiling-Speaker development by creating an account on GitHub.
Thanks for reading, and have a great day!