ESPHome 2026.10.0-dev
Loading...
Searching...
No Matches
esphome::micro_wake_word::MicroWakeWord Class Referencefinal

#include <micro_wake_word.h>

Inheritance diagram for esphome::micro_wake_word::MicroWakeWord:
esphome::Component esphome::ota::OTAGlobalStateListener

Public Member Functions

void setup () override
 
void loop () override
 
float get_setup_priority () const override
 
void dump_config () override
 
void on_ota_global_state (ota::OTAState state, float progress, uint8_t error, ota::OTAComponent *comp) override
 
void start ()
 
void stop ()
 
bool is_running () const
 
void set_features_step_size (uint8_t step_size)
 
void set_microphone_source (microphone::MicrophoneSource *microphone_source)
 
void set_stop_after_detection (bool stop_after_detection)
 
void set_task_stack_in_psram (bool task_stack_in_psram)
 
Trigger< std::string > * get_wake_word_detected_trigger ()
 
void add_wake_word_model (WakeWordModel *model)
 
bool add_runtime_model (std::unique_ptr< WakeWordModel > model)
 Adds a runtime-downloaded wake word model.
 
bool remove_runtime_model (const std::string &model_id)
 Removes a runtime-downloaded wake word model and frees its interpreter, arenas, and model buffer.
 
WakeWordModelget_model_by_id (const std::string &model_id)
 Returns the wake word model with the given id, or nullptr if none matches (compiled or runtime).
 
std::vector< std::string > get_runtime_model_ids ()
 Returns the ids of all runtime-downloaded models. Must be called from the main loop.
 
uint8_t get_features_step_size () const
 Returns the feature step size (ms) the frontend is configured for. Runtime models must match it.
 
void add_vad_model (const uint8_t *model_start, uint8_t probability_cutoff, size_t sliding_window_size, size_t tensor_arena_size)
 
bool get_vad_state ()
 
std::vector< WakeWordModel * > get_wake_words ()
 
- Public Member Functions inherited from esphome::Component
float get_actual_setup_priority () const
 
void set_setup_priority (float priority)
 
void call ()
 
virtual void on_shutdown ()
 
virtual void on_safe_shutdown ()
 
virtual bool teardown ()
 Called during teardown to allow component to gracefully finish operations.
 
virtual void on_powerdown ()
 Called after teardown is complete to power down hardware.
 
uint8_t get_component_state () const
 
void reset_to_construction_state ()
 Reset this component back to the construction state to allow setup to run again.
 
bool is_in_loop_state () const
 Check if this component has completed setup and is in the loop state.
 
bool is_idle () const
 Check if this component is idle.
 
void mark_failed ()
 Mark this component as failed.
 
void mark_failed (const LogString *message)
 
void disable_loop ()
 Disable this component's loop.
 
void enable_loop ()
 Enable this component's loop.
 
void enable_loop_soon_any_context ()
 Thread and ISR-safe version of enable_loop() that can be called from any context.
 
bool is_failed () const
 
bool is_ready () const
 
virtual bool can_proceed ()
 
bool status_has_warning () const
 
bool status_has_error () const
 
void status_set_warning ()
 
void status_set_warning (const char *message)
 
void status_set_warning (const LogString *message)
 
void status_set_error ()
 
void status_set_error (const LogString *message)
 
void status_clear_warning ()
 
void status_clear_error ()
 
void status_momentary_warning (const char *name, uint32_t length=5000)
 Set warning status flag and automatically clear it after a timeout.
 
void status_momentary_error (const char *name, uint32_t length=5000)
 Set error status flag and automatically clear it after a timeout.
 
bool has_overridden_loop () const
 
const LogString * get_component_log_str () const ESPHOME_ALWAYS_INLINE
 Get the integration where this component was declared as a LogString for logging.
 
bool should_warn_of_blocking (uint32_t blocking_time, uint32_t &threshold_ms_out)
 
- Public Member Functions inherited from esphome::ota::OTAGlobalStateListener
virtual ~OTAGlobalStateListener ()=default
 

Protected Member Functions

void suspend_task_ ()
 Suspends the inference task.
 
void resume_task_ ()
 Resumes the inference task.
 
bool try_lock_models_ ()
 Parks the inference task at a safe point (or verifies it isn't running) so the model lists may be mutated from the main loop.
 
void unlock_models_ ()
 Releases the inference task parked by a successful try_lock_models_() call.
 
void set_state_ (State state)
 
bool generate_features_ (const int16_t *audio_buffer, size_t samples_available, int8_t features_buffer[PREPROCESSOR_FEATURE_SIZE], size_t *processed_samples)
 Generates a spectrogram feature from an input buffer of audio samples.
 
void process_probabilities_ ()
 Processes any new probabilities for each model.
 
void unload_models_ ()
 Deletes each model's TFLite interpreters and frees tensor arena memory.
 
bool update_model_probabilities_ (const int8_t audio_features[PREPROCESSOR_FEATURE_SIZE])
 Runs an inference with each model using the new spectrogram features.
 
- Protected Member Functions inherited from esphome::Component
friend void::setup ()
 
friend void::original_setup ()
 
void set_component_source_ (uint8_t index)
 Set where this component was loaded from for some debug messages.
 
virtual void call_setup ()
 
void call_dump_config_ ()
 
void enable_loop_slow_path_ ()
 
void set_component_state_ (uint8_t state)
 Helper to set component state (clears state bits and sets new state)
 
bool set_status_flag_ (uint8_t flag)
 Helper to set a status LED flag on both this component and the app.
 
void set_interval (const char *name, uint32_t interval, std::function< void()> &&f)
 Set an interval function with a const char* name.
 
void set_interval (uint32_t id, uint32_t interval, std::function< void()> &&f)
 Set an interval function with a numeric ID (zero heap allocation).
 
void set_interval (InternalSchedulerID id, uint32_t interval, std::function< void()> &&f)
 
void set_interval (uint32_t interval, std::function< void()> &&f)
 
bool cancel_interval (const char *name)
 Cancel an interval function.
 
bool cancel_interval (uint32_t id)
 
bool cancel_interval (InternalSchedulerID id)
 
void set_timeout (const char *name, uint32_t timeout, std::function< void()> &&f)
 Set a timeout function with a const char* name.
 
void set_timeout (uint32_t id, uint32_t timeout, std::function< void()> &&f)
 Set a timeout function with a numeric ID (zero heap allocation).
 
void set_timeout (InternalSchedulerID id, uint32_t timeout, std::function< void()> &&f)
 
void set_timeout (uint32_t timeout, std::function< void()> &&f)
 
bool cancel_timeout (const char *name)
 Cancel a timeout function.
 
bool cancel_timeout (uint32_t id)
 
bool cancel_timeout (InternalSchedulerID id)
 
void defer (const char *name, std::function< void()> &&f)
 Defer a callback to the next loop() call with a const char* name.
 
void defer (std::function< void()> &&f)
 Defer a callback to the next loop() call.
 
void defer (uint32_t id, std::function< void()> &&f)
 Defer a callback with a numeric ID (zero heap allocation)
 
bool cancel_defer (const char *name)
 Cancel a defer callback using the specified name, name must not be empty.
 
bool cancel_defer (uint32_t id)
 
void status_clear_warning_slow_path_ ()
 
void status_clear_error_slow_path_ ()
 

Static Protected Member Functions

static void inference_task (void *params)
 

Protected Attributes

microphone::MicrophoneSourcemicrophone_source_ {nullptr}
 
Trigger< std::string > wake_word_detected_trigger_
 
State state_ {State::STOPPED}
 
std::weak_ptr< ring_buffer::RingBufferring_buffer_
 
std::vector< WakeWordModel * > wake_word_models_
 
std::vector< std::unique_ptr< WakeWordModel > > runtime_models_
 
std::unique_ptr< VADModelvad_model_
 
bool vad_state_ {false}
 
bool pending_start_ {false}
 
bool pending_stop_ {false}
 
bool stop_after_detection_
 
bool task_stack_in_psram_ {false}
 
uint8_t features_step_size_
 
struct FrontendConfig frontend_config_
 
struct FrontendState frontend_state_
 
EventGroupHandle_t event_group_
 
QueueHandle_t detection_queue_
 
StaticTask inference_task_
 
- Protected Attributes inherited from esphome::Component
uint8_t component_source_index_ {0}
 Index into component source PROGMEM lookup table (0 = not set)
 
uint8_t warn_if_blocking_over_ {WARN_IF_BLOCKING_OVER_CS}
 Warn threshold in centiseconds (max 2550ms)
 
uint8_t component_state_ {0x00}
 State of this component - each bit has a purpose: Bits 0-2: Component state (0x00=CONSTRUCTION, 0x01=SETUP, 0x02=LOOP, 0x03=FAILED, 0x04=LOOP_DONE) Bit 3: STATUS_LED_WARNING Bit 4: STATUS_LED_ERROR Bit 5: Has overridden loop() (set at registration time) Bits 6-7: Unused - reserved for future expansion.
 
volatile bool pending_enable_loop_ {false}
 ISR-safe flag for enable_loop_soon_any_context.
 
ComponentRuntimeStats runtime_stats_
 

Detailed Description

Definition at line 34 of file micro_wake_word.h.

Member Function Documentation

◆ add_runtime_model()

bool esphome::micro_wake_word::MicroWakeWord::add_runtime_model ( std::unique_ptr< WakeWordModel > model)

Adds a runtime-downloaded wake word model.

Must be called from the main loop. If the inference task is running it is paused at a safe point before the model lists are mutated, so the task never observes a half-updated vector. Callers should check get_model_by_id() before constructing the model: a WakeWordModel permanently claims a preference backend that is not released when the model is destroyed, so building one only to have it rejected here costs internal RAM that never comes back.

Returns
True if the model was added, false if it has no valid data, on a duplicate id, or if the task could not be paused

Definition at line 297 of file micro_wake_word.cpp.

◆ add_vad_model()

void esphome::micro_wake_word::MicroWakeWord::add_vad_model ( const uint8_t * model_start,
uint8_t probability_cutoff,
size_t sliding_window_size,
size_t tensor_arena_size )

Definition at line 389 of file micro_wake_word.cpp.

◆ add_wake_word_model()

void esphome::micro_wake_word::MicroWakeWord::add_wake_word_model ( WakeWordModel * model)

Definition at line 262 of file micro_wake_word.cpp.

◆ dump_config()

void esphome::micro_wake_word::MicroWakeWord::dump_config ( )
overridevirtual

Reimplemented from esphome::Component.

Definition at line 85 of file micro_wake_word.cpp.

◆ generate_features_()

bool esphome::micro_wake_word::MicroWakeWord::generate_features_ ( const int16_t * audio_buffer,
size_t samples_available,
int8_t features_buffer[PREPROCESSOR_FEATURE_SIZE],
size_t * processed_samples )
protected

Generates a spectrogram feature from an input buffer of audio samples.

The frontend buffers samples internally, so callers may stream arbitrary-sized chunks; a feature is only emitted once enough samples have accumulated to fill a full analysis window.

Parameters
audio_buffer(const int16_t *) Buffer containing input audio samples
samples_available(size_t) Number of samples available in the input buffer
features_buffer(int8_t *) Buffer to store the generated feature, valid only when the return value is true
processed_samples(size_t *) Set to the number of samples consumed from the input buffer
Returns
True if a new feature was generated; false if more samples are required

Definition at line 552 of file micro_wake_word.cpp.

◆ get_features_step_size()

uint8_t esphome::micro_wake_word::MicroWakeWord::get_features_step_size ( ) const
inline

Returns the feature step size (ms) the frontend is configured for. Runtime models must match it.

Definition at line 93 of file micro_wake_word.h.

◆ get_model_by_id()

WakeWordModel * esphome::micro_wake_word::MicroWakeWord::get_model_by_id ( const std::string & model_id)

Returns the wake word model with the given id, or nullptr if none matches (compiled or runtime).

Must be called from the main loop, as the returned pointer is invalidated by remove_runtime_model().

Definition at line 379 of file micro_wake_word.cpp.

◆ get_runtime_model_ids()

std::vector< std::string > esphome::micro_wake_word::MicroWakeWord::get_runtime_model_ids ( )

Returns the ids of all runtime-downloaded models. Must be called from the main loop.

Definition at line 370 of file micro_wake_word.cpp.

◆ get_setup_priority()

float esphome::micro_wake_word::MicroWakeWord::get_setup_priority ( ) const
overridevirtual

Reimplemented from esphome::Component.

Definition at line 68 of file micro_wake_word.cpp.

◆ get_vad_state()

bool esphome::micro_wake_word::MicroWakeWord::get_vad_state ( )
inline

Definition at line 100 of file micro_wake_word.h.

◆ get_wake_word_detected_trigger()

Trigger< std::string > * esphome::micro_wake_word::MicroWakeWord::get_wake_word_detected_trigger ( )
inline

Definition at line 65 of file micro_wake_word.h.

◆ get_wake_words()

std::vector< WakeWordModel * > esphome::micro_wake_word::MicroWakeWord::get_wake_words ( )

Definition at line 252 of file micro_wake_word.cpp.

◆ inference_task()

void esphome::micro_wake_word::MicroWakeWord::inference_task ( void * params)
staticprotected

Definition at line 158 of file micro_wake_word.cpp.

◆ is_running()

bool esphome::micro_wake_word::MicroWakeWord::is_running ( ) const
inline

Definition at line 53 of file micro_wake_word.h.

◆ loop()

void esphome::micro_wake_word::MicroWakeWord::loop ( )
overridevirtual

Reimplemented from esphome::Component.

Definition at line 407 of file micro_wake_word.cpp.

◆ on_ota_global_state()

void esphome::micro_wake_word::MicroWakeWord::on_ota_global_state ( ota::OTAState state,
float progress,
uint8_t error,
ota::OTAComponent * comp )
overridevirtual

Implements esphome::ota::OTAGlobalStateListener.

Definition at line 149 of file micro_wake_word.cpp.

◆ process_probabilities_()

void esphome::micro_wake_word::MicroWakeWord::process_probabilities_ ( )
protected

Processes any new probabilities for each model.

If any wake word is detected, it will send a DetectionEvent to the detection_queue_.

Definition at line 588 of file micro_wake_word.cpp.

◆ remove_runtime_model()

bool esphome::micro_wake_word::MicroWakeWord::remove_runtime_model ( const std::string & model_id)

Removes a runtime-downloaded wake word model and frees its interpreter, arenas, and model buffer.

Must be called from the main loop. If the inference task is running it is paused at a safe point first, and any queued detection events are dropped (they hold pointers into the model being destroyed).

Returns
True if the model was removed, false if the id is not a runtime model or the task could not be paused

Definition at line 335 of file micro_wake_word.cpp.

◆ resume_task_()

void esphome::micro_wake_word::MicroWakeWord::resume_task_ ( )
protected

Resumes the inference task.

Definition at line 401 of file micro_wake_word.cpp.

◆ set_features_step_size()

void esphome::micro_wake_word::MicroWakeWord::set_features_step_size ( uint8_t step_size)
inline

Definition at line 55 of file micro_wake_word.h.

◆ set_microphone_source()

void esphome::micro_wake_word::MicroWakeWord::set_microphone_source ( microphone::MicrophoneSource * microphone_source)
inline

Definition at line 57 of file micro_wake_word.h.

◆ set_state_()

void esphome::micro_wake_word::MicroWakeWord::set_state_ ( State state)
protected

Definition at line 544 of file micro_wake_word.cpp.

◆ set_stop_after_detection()

void esphome::micro_wake_word::MicroWakeWord::set_stop_after_detection ( bool stop_after_detection)
inline

Definition at line 61 of file micro_wake_word.h.

◆ set_task_stack_in_psram()

void esphome::micro_wake_word::MicroWakeWord::set_task_stack_in_psram ( bool task_stack_in_psram)
inline

Definition at line 63 of file micro_wake_word.h.

◆ setup()

void esphome::micro_wake_word::MicroWakeWord::setup ( )
overridevirtual

Reimplemented from esphome::Component.

Definition at line 96 of file micro_wake_word.cpp.

◆ start()

void esphome::micro_wake_word::MicroWakeWord::start ( )

Definition at line 512 of file micro_wake_word.cpp.

◆ stop()

void esphome::micro_wake_word::MicroWakeWord::stop ( )

Definition at line 534 of file micro_wake_word.cpp.

◆ suspend_task_()

void esphome::micro_wake_word::MicroWakeWord::suspend_task_ ( )
protected

Suspends the inference task.

Definition at line 395 of file micro_wake_word.cpp.

◆ try_lock_models_()

bool esphome::micro_wake_word::MicroWakeWord::try_lock_models_ ( )
protected

Parks the inference task at a safe point (or verifies it isn't running) so the model lists may be mutated from the main loop.

Every successful call must be paired with unlock_models_().

Returns
True if the lists may be mutated, false if the running task never acknowledged the pause request

Definition at line 264 of file micro_wake_word.cpp.

◆ unload_models_()

void esphome::micro_wake_word::MicroWakeWord::unload_models_ ( )
protected

Deletes each model's TFLite interpreters and frees tensor arena memory.

Definition at line 620 of file micro_wake_word.cpp.

◆ unlock_models_()

void esphome::micro_wake_word::MicroWakeWord::unlock_models_ ( )
protected

Releases the inference task parked by a successful try_lock_models_() call.

Definition at line 289 of file micro_wake_word.cpp.

◆ update_model_probabilities_()

bool esphome::micro_wake_word::MicroWakeWord::update_model_probabilities_ ( const int8_t audio_features[PREPROCESSOR_FEATURE_SIZE])
protected

Runs an inference with each model using the new spectrogram features.

Parameters
audio_features(int8_t *) Buffer containing new spectrogram features
Returns
True if successful, false if any errors were encountered

Definition at line 629 of file micro_wake_word.cpp.

Field Documentation

◆ detection_queue_

QueueHandle_t esphome::micro_wake_word::MicroWakeWord::detection_queue_
protected

Definition at line 138 of file micro_wake_word.h.

◆ event_group_

EventGroupHandle_t esphome::micro_wake_word::MicroWakeWord::event_group_
protected

Definition at line 135 of file micro_wake_word.h.

◆ features_step_size_

uint8_t esphome::micro_wake_word::MicroWakeWord::features_step_size_
protected

Definition at line 128 of file micro_wake_word.h.

◆ frontend_config_

struct FrontendConfig esphome::micro_wake_word::MicroWakeWord::frontend_config_
protected

Definition at line 131 of file micro_wake_word.h.

◆ frontend_state_

struct FrontendState esphome::micro_wake_word::MicroWakeWord::frontend_state_
protected

Definition at line 132 of file micro_wake_word.h.

◆ inference_task_

StaticTask esphome::micro_wake_word::MicroWakeWord::inference_task_
protected

Definition at line 140 of file micro_wake_word.h.

◆ microphone_source_

microphone::MicrophoneSource* esphome::micro_wake_word::MicroWakeWord::microphone_source_ {nullptr}
protected

Definition at line 108 of file micro_wake_word.h.

◆ pending_start_

bool esphome::micro_wake_word::MicroWakeWord::pending_start_ {false}
protected

Definition at line 121 of file micro_wake_word.h.

◆ pending_stop_

bool esphome::micro_wake_word::MicroWakeWord::pending_stop_ {false}
protected

Definition at line 122 of file micro_wake_word.h.

◆ ring_buffer_

std::weak_ptr<ring_buffer::RingBuffer> esphome::micro_wake_word::MicroWakeWord::ring_buffer_
protected

Definition at line 112 of file micro_wake_word.h.

◆ runtime_models_

std::vector<std::unique_ptr<WakeWordModel> > esphome::micro_wake_word::MicroWakeWord::runtime_models_
protected

Definition at line 114 of file micro_wake_word.h.

◆ state_

State esphome::micro_wake_word::MicroWakeWord::state_ {State::STOPPED}
protected

Definition at line 110 of file micro_wake_word.h.

◆ stop_after_detection_

bool esphome::micro_wake_word::MicroWakeWord::stop_after_detection_
protected

Definition at line 124 of file micro_wake_word.h.

◆ task_stack_in_psram_

bool esphome::micro_wake_word::MicroWakeWord::task_stack_in_psram_ {false}
protected

Definition at line 126 of file micro_wake_word.h.

◆ vad_model_

std::unique_ptr<VADModel> esphome::micro_wake_word::MicroWakeWord::vad_model_
protected

Definition at line 117 of file micro_wake_word.h.

◆ vad_state_

bool esphome::micro_wake_word::MicroWakeWord::vad_state_ {false}
protected

Definition at line 118 of file micro_wake_word.h.

◆ wake_word_detected_trigger_

Trigger<std::string> esphome::micro_wake_word::MicroWakeWord::wake_word_detected_trigger_
protected

Definition at line 109 of file micro_wake_word.h.

◆ wake_word_models_

std::vector<WakeWordModel *> esphome::micro_wake_word::MicroWakeWord::wake_word_models_
protected

Definition at line 113 of file micro_wake_word.h.


The documentation for this class was generated from the following files: