Egg Voice Assistant

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 :slight_smile:
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.

1 Like

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.

1 Like

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

Glo portable wireless speaker

Plus you get some extra parts.

Here is the led ring mounted in the led/speaker plate. The speaker can be mounted in the ring or on top of the diffuser (v.2 - work in progress). in the plate there are holes to run the wires though.

2 Likes

OK wow. The reason for my original question is purely because in this photo:
image

…it honestly looks like there is practically an LED for each segment of the diffuser. So it does an amazing job from that single ring of LED’s!

Waou! this is really a beautiful project !!
Thank you for sharing it :slight_smile:

I’m not sure to understand where you installed the microphone and the speaker.
For the speaker, the picture you posted here helps a lot, I understand that it is in the middle of the led circle, right ?
What kind of 50~51mm speaker would you recommend? A big one like this:
image
Or a thiner one:
image

And about the microphone, where did you install it?
I would imagine it on the top of the egg, but I can’t see a dedicated space on your thingiverse model.

Thanks for the precisions :slight_smile:

Just asking is there a site to buy already built. Not the tinkering type lol

I designed a small hole in the base for the mike. You can see it in the attached image. I also ran an old usb cable in, which is hard wired to the board.

Do not have a site to buy. Still playing with it in my free time, which I do not have right now. Future versions have a printed ring backed by a trimmed wire hanger to lock the outer screen on.

OK nice!
So the power cable come from this hole and the mic is positioned close to that hole.
And about the speaker, do you have a recommandation?
I’m about to buy the big one on the picture posted above.
THanks :slight_smile:

There is a hole for the mic and a hole for the cable, opposite one another. The mic hole as a lip on the inside to place it and melt a little filament to keep it in place.

The speaker I used is close to the larger one. I wound up buying a bluetooth speaker and pulled the speaker out of that. I also used the diffuser from it. I put silver duct tape (the actual metal type) on the inside of the diffuser. It cost about $5.00. Plus you have an extra rgbw and battery to play with.

The speaker can be on top or it can be below.