This my voice assistant design. I have posted the STL file on Thingiverse and the wiring diagram
Great design on the egg! Both retro and futuristic.
Should fit right in to just about any room design.
Thank You!
This is a nice alternative to the usual look of a voice assistant device.
This is fantastic! Thanks for sharing the files. My next project is building some of these voice satellites and was in need of a housing. Never thought one this cool existed!
Will you be posting build instructions and parts list?
I’m curious about the LED lighting in this egg, it looks awesome. You listed a part number on the Thingyverse post but that’s a flat ring. You did you make that work with the shape of the egg? and did you use a few of them?
Dear Todd, thanks a lot! I built one as well but I struggled a lot with getting the mesh fixed in the groove. The outer shell helped a lot
Do you have any recommendations on how to attach it? I used the outer shell and superglue plus activator spray and squeezed it into the groove. But it is neither easy nor perfect as your pictures show.
Thanks again for the great design!
Hubert
Holy moly, this is gorgeous! I’ve wanted to make a smart speaker with integrated LED like this for some time.
Would you be willing to share the configuration file you used?
Can you share where you purchased the mesh fabric?
This would be cool if you could also have a diffuser. “Hey Nabu, make my house smell nice.”
You could do that pretty easily if your diffuser starts when powered on. If that’s the case, add a controlable plug and write a custom sentence with the action to turn that plug on and you are done.
I made it work with the egg, it will go around the speaker and has holes to run the wiring through.
If you look at the speaker plate. you can see the holes and how it the it fit in. I mad a model of the ring to design with and placement.
Yes, still working on a few details, one is the ring to hold the cloth on, Part printed and coat hanger wire.
I did not use any glue. I ad to force the top onto the bottom, which it stays on by friction. I am working on Version 2 which is a little easier to connect.
Mainly extended the top lip and make the bottom a little wider for thicker clothe.
will do, when I get home from work.
Have one with this, like how it defuses the light better.
https://www.amazon.com/gp/product/B09R6CD8NN/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&th=1
This is the one in the video and image, like the look of it better
https://www.amazon.com/gp/product/B0874KZ3JH/ref=ppx_yo_dt_b_asin_image_o01_s00?ie=UTF8&th=1
Going to see how both works together.
here is the config file.
esphome:
name: YouNameIt
friendly_name: Voice Assist 001
on_boot:
- priority: -100
then:
- wait_until: api.connected
- delay: 1s
- if:
condition:
switch.is_on: use_wake_word
then:
- voice_assistant.start_continuous:
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "B6ancbFLU5aqGUISdyGYrBXrcvC2yudC1AGjCZcGLLA="
ota:
password: "5af7aa7e92f0511d7c88b5acfed240a8"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 000.000.000.000
gateway: 000.000.000.000
subnet: 000.000.000.000
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "ssidName"
password: "ssidPWD"
captive_portal:
i2s_audio:
- id: i2s_in
i2s_lrclk_pin: GPIO26 #WS
i2s_bclk_pin: GPIO25 #SCK
microphone:
- platform: i2s_audio
adc_type: external
pdm: false
id: mic_i2s
channel: right
bits_per_sample: 32bit
i2s_audio_id: i2s_in
i2s_din_pin: GPIO33 #SD Pin from the INMP441 Microphone
media_player:
- platform: i2s_audio
name: "esp_speaker"
id: media_player_speaker
i2s_audio_id: i2s_in
dac_type: external
i2s_dout_pin: GPIO27 #DIN Pin of the MAX98357A Audio Amplifier
mode: mono
voice_assistant:
microphone: mic_i2s
id: va
noise_suppression_level: 2
auto_gain: 31dBFS
volume_multiplier: 2.0
use_wake_word: false
media_player: media_player_speaker
on_wake_word_detected:
- light.turn_on:
id: led_light
on_listening:
- light.turn_on:
id: led_light
effect: "Rainbow Spinner"
# red: 71%
# green: 0%
# blue: 71%
on_stt_end:
- light.turn_on:
id: led_light
effect: "None"
red: 0%
green: 100%
blue: 0%
on_error:
- light.turn_on:
id: led_light
effect: "None"
red: 100%
green: 0%
blue: 0%
- if:
condition:
switch.is_on: use_wake_word
then:
- switch.turn_off: use_wake_word
- delay: 1sec
- switch.turn_on: use_wake_word
on_tts_start: # this is required to play the output on a media player
- homeassistant.service:
service: tts.speak
data:
media_player_entity_id: media_player.YouNameIt_esp_speaker #replace this with your media player entity id
message: !lambda 'return x;'
entity_id: tts.piper_2 #replace this with your piper tts id.
on_client_connected:
- if:
condition:
switch.is_on: use_wake_word
then:
- voice_assistant.start_continuous:
on_client_disconnected:
- if:
condition:
switch.is_on: use_wake_word
then:
- voice_assistant.stop:
on_end:
- light.turn_off:
id: led_light
binary_sensor:
- platform: status
name: API Connection
id: api_connection
filters:
- delayed_on: 1s
on_press:
- if:
condition:
switch.is_on: use_wake_word
then:
- voice_assistant.start_continuous:
on_release:
- if:
condition:
switch.is_on: use_wake_word
then:
- voice_assistant.stop:
switch:
- platform: template
name: Use wake word
id: use_wake_word
optimistic: true
restore_mode: RESTORE_DEFAULT_ON
entity_category: config
on_turn_on:
- lambda: id(va).set_use_wake_word(true);
- if:
condition:
not:
- voice_assistant.is_running
then:
- voice_assistant.start_continuous
on_turn_off:
- voice_assistant.stop
- lambda: id(va).set_use_wake_word(false);
light:
- platform: neopixelbus
id: led_light
type: grb
pin: GPIO32 # DIN pin of the LED Strip
num_leds: 24 # change the Number of LEDS according to your LED Strip.
name: "Light"
variant: ws2812x
default_transition_length: 0.5s
effects:
- addressable_scan:
name: Scan Effect With Custom Values
move_interval: 50ms
scan_width: 2
- addressable_rainbow:
name: Rainbow Spinner
speed: 50
width: 24
- addressable_rainbow:
name: Rainbow Fader
speed: 50
- addressable_random_twinkle:
name: Random Twinkle Effect With Custom Values
twinkle_probability: 50%
progress_interval: 32ms
- addressable_flicker:
name: Flicker Effect With Custom Values
update_interval: 16ms
intensity: 100%
I wound up buying a cheap bluetooth speaker for parts. I use the speaker and diffuser from it. It cost about $5.00
Plus you get some extra parts.