I’ve been experimenting a lot, 3D printing a lot, trying different speakers, trying linux vs esphome. I’d like to offer a point in time snapshot that is fairly easy to make, and works pretty well including both mic’s and speakers. On the audio output side it’s better than a google home mini. On the mic side it’s more sensitive than a google mini, but less discerning if there is competing noise in the room notably TV voices. But it’s not awful, especially if you add an automation in HA to mute the TV when it hears the wake word.
It is not cheap, exactly, but it doesn’t break the bank.
The main part is a Seeed Studio reSpeaker XVF3800 with ESP32-S3 (the round one not the linear one I think is called plus). About $70 us.
That does not come with a speaker, and I paired it with this: Speaker on Amazon
There are a lot of smaller speakers, and I built a couple with them, but a little more “umph” helped a lot. That’s about $15.
What helped even more was a speaker “cabinet” I 3D printed and stuffed with polyfill. The result gives a more more faithful tone from it, and disperses it around the room. 3D printed needed and some design skills if you want to change, but about $3 in filament give or take.
The design looks like this (cross section). The speaker goes into the larger chamber facing down. Down-facing also works best with the noise cancellation built into the reSpeaker. The speaker goes on top of that top ring (and save the shipping circular foam to get a bit of padding under it). The cutouts are for USB connector and mute button. In the side view shot you can get the idea. The cutout showing here on the front doesn’t have a USB plug as that reSpeaker is modified, but the normal ones come with a USB on front and back (as seen from the edge), one for the mic array, one for the ESP32.
This mounting exposes the top light ring which gives useful feedback on progress – it points to the source of voice (indicating its “beam forming” for noise cancellation in other directions is working), and it has various indicators of thinking and responses, and failure modes. A right angle USB C works nicely to power it.
It’s physically large, about like a Google Home (the original non-mini just called "home), and has similar speaker volume.
Basically for a bit under $100 I get something about like a Google Home (non-mini), not quite the voice recognition (yet, software is improving), and all local control.
The case is in Fusion if anyone wants the model (and I can figure out how to attach it here) you are welcome. It’s fully parameterized so with some measurements you could redesign for a different speaker (well, smaller, if you go much better you need to change how it holds the puck). On a P1S it’s about a 4-5 hour print with PLA and standard quality.
For software I tried linux (on a raspberry pi, not the esp32) and that worked well with the standard Home Assistant (experimental) code. That did not control some aspects of the reSpeaker (locking beam forming for example), but was quicker at wake word recognition. The esp32 is much more convenient (well, no separate rPi box) and does lock beam forming. I am using formatBCE’s github code for the software into which he put massive effort and it’s quite good.
Note that Future proof’s Satellite 1.1 also has a 4 mic array, but as of this writing it can only use 2 of them. So other companies are working on mic arrays for better voice, but Seeed seems a step ahead. Without the esp32 (or with the firmware that does not use it even if present), this is a standalone USB mic so any voice satellite software that accepts a USB mic (like the linux I mentioned) works with it. The puck also has a 3.5mm audio out, but I used its jst plug which supports up to a 5w speaker without separate amp (plus the 3.5mm jack is on the edge and I wanted to come out of the bottom to the speaker).


