|
5 | 5 | from esphome import automation, core |
6 | 6 | from esphome.automation import maybe_simple_id |
7 | 7 | from esphome.components import sensor, microphone |
| 8 | +from esphome.components.esp32 import add_idf_component |
8 | 9 | from esphome.const import ( |
9 | 10 | CONF_ID, |
10 | 11 | CONF_SENSORS, |
|
62 | 63 | CONF_HIGH_FREQ = "high_freq" |
63 | 64 | CONF_DSP_FILTERS = "dsp_filters" |
64 | 65 | CONF_AUTO_START = "auto_start" |
| 66 | +CONF_USE_ESP_DSP = "use_esp_dsp" |
65 | 67 |
|
66 | 68 | ICON_WAVEFORM = "mdi:waveform" |
67 | 69 |
|
|
147 | 149 | } |
148 | 150 | ) |
149 | 151 |
|
150 | | -CONFIG_SCHEMA = cv.Schema( |
151 | | - { |
152 | | - cv.GenerateID(): cv.declare_id(SoundLevelMeter), |
153 | | - cv.Optional(CONF_MICROPHONE, default={}): microphone.microphone_source_schema( |
154 | | - min_bits_per_sample=16, |
155 | | - max_bits_per_sample=32, |
156 | | - ), |
157 | | - cv.Optional(CONF_UPDATE_INTERVAL, default="60s"): cv.positive_time_period_milliseconds, |
158 | | - cv.Optional(CONF_AUTO_START, default=True): cv.boolean, |
159 | | - cv.Optional(CONF_HIGH_FREQ, default=False): cv.boolean, |
160 | | - cv.Optional(CONF_RING_BUFFER_SIZE, default="100ms"): cv.positive_time_period_milliseconds, |
161 | | - cv.Optional(CONF_WARMUP_INTERVAL, default="0ms"): cv.positive_time_period_milliseconds, |
162 | | - cv.Optional(CONF_TASK_STACK_SIZE, default=4096): cv.positive_not_null_int, |
163 | | - cv.Optional(CONF_TASK_PRIORITY, default=2): cv.uint8_t, |
164 | | - cv.Optional(CONF_TASK_CORE, default=1): cv.int_range(0, 1), |
165 | | - cv.Optional(CONF_MIC_SENSITIVITY): cv.decibel, |
166 | | - cv.Optional(CONF_MIC_SENSITIVITY_REF): cv.decibel, |
167 | | - cv.Optional(CONF_OFFSET): cv.decibel, |
168 | | - cv.Optional(CONF_DSP_FILTERS, default=[]): [CONFIG_DSP_FILTER_SCHEMA], |
169 | | - cv.Optional(CONF_SENSORS, default=[]): [CONFIG_SENSOR_SCHEMA], |
170 | | - } |
171 | | -).extend(cv.COMPONENT_SCHEMA) |
| 152 | +CONFIG_SCHEMA = cv.All( |
| 153 | + cv.Schema( |
| 154 | + { |
| 155 | + cv.GenerateID(): cv.declare_id(SoundLevelMeter), |
| 156 | + cv.Optional( |
| 157 | + CONF_MICROPHONE, default={} |
| 158 | + ): microphone.microphone_source_schema( |
| 159 | + min_bits_per_sample=16, |
| 160 | + max_bits_per_sample=32, |
| 161 | + ), |
| 162 | + cv.Optional( |
| 163 | + CONF_UPDATE_INTERVAL, default="60s" |
| 164 | + ): cv.positive_time_period_milliseconds, |
| 165 | + cv.Optional(CONF_AUTO_START, default=True): cv.boolean, |
| 166 | + cv.Optional(CONF_HIGH_FREQ, default=False): cv.boolean, |
| 167 | + cv.Optional( |
| 168 | + CONF_RING_BUFFER_SIZE, default="100ms" |
| 169 | + ): cv.positive_time_period_milliseconds, |
| 170 | + cv.Optional( |
| 171 | + CONF_WARMUP_INTERVAL, default="0ms" |
| 172 | + ): cv.positive_time_period_milliseconds, |
| 173 | + cv.Optional(CONF_TASK_STACK_SIZE, default=4096): cv.positive_not_null_int, |
| 174 | + cv.Optional(CONF_TASK_PRIORITY, default=2): cv.uint8_t, |
| 175 | + cv.Optional(CONF_TASK_CORE, default=1): cv.int_range(0, 1), |
| 176 | + cv.Optional(CONF_MIC_SENSITIVITY): cv.decibel, |
| 177 | + cv.Optional(CONF_MIC_SENSITIVITY_REF): cv.decibel, |
| 178 | + cv.Optional(CONF_OFFSET): cv.decibel, |
| 179 | + cv.Optional(CONF_DSP_FILTERS, default=[]): [CONFIG_DSP_FILTER_SCHEMA], |
| 180 | + cv.Optional(CONF_SENSORS, default=[]): [CONFIG_SENSOR_SCHEMA], |
| 181 | + cv.Optional(CONF_USE_ESP_DSP, default=False): cv.All( |
| 182 | + cv.boolean, cv.only_with_esp_idf |
| 183 | + ), |
| 184 | + } |
| 185 | + ).extend(cv.COMPONENT_SCHEMA), |
| 186 | + cv.only_on_esp32, |
| 187 | +) |
172 | 188 |
|
173 | 189 | SOUND_LEVEL_METER_ACTION_SCHEMA = maybe_simple_id( |
174 | 190 | {cv.GenerateID(): cv.use_id(SoundLevelMeter)} |
@@ -223,6 +239,9 @@ async def to_code(config): |
223 | 239 | cg.add(var.set_mic_sensitivity_ref(config[CONF_MIC_SENSITIVITY_REF])) |
224 | 240 | if CONF_OFFSET in config: |
225 | 241 | cg.add(var.set_offset(config[CONF_OFFSET])) |
| 242 | + if config[CONF_USE_ESP_DSP]: |
| 243 | + add_idf_component(name="espressif/esp-dsp", ref="1.7.0") |
| 244 | + cg.add_define("USE_ESP_DSP") |
226 | 245 |
|
227 | 246 | for fc in config[CONF_DSP_FILTERS]: |
228 | 247 | await add_dsp_filter(fc, var) |
|
0 commit comments