ESPHome 2026.11.0-dev
Loading...
Searching...
No Matches
i2s_audio_microphone.h
Go to the documentation of this file.
1#pragma once
2
3#ifdef USE_ESP32
4
5#include "../i2s_audio.h"
6
9
10#include <freertos/FreeRTOS.h>
11#include <freertos/event_groups.h>
12#include <freertos/semphr.h>
13#include <freertos/task.h>
14
15namespace esphome::i2s_audio {
16
17class I2SAudioMicrophone final : public I2SAudioIn, public microphone::Microphone, public Component {
18 public:
19 void setup() override;
20 void dump_config() override;
21 void start() override;
22 void stop() override;
23
24 void loop() override;
25
26 void set_correct_dc_offset(bool correct_dc_offset) { this->correct_dc_offset_ = correct_dc_offset; }
27
28 void set_din_pin(int8_t pin) { this->din_pin_ = (gpio_num_t) pin; }
29
30 void set_pdm(bool pdm) { this->pdm_ = pdm; }
31
32#if SOC_I2S_SUPPORTS_PDM_RX
33 void set_pdm_dsr(i2s_pdm_dsr_t pdm_dsr) { this->pdm_dsr_ = pdm_dsr; }
34#endif
35
36#ifdef USE_I2S_AUDIO_FULL_DUPLEX
37 void build_full_duplex_config(i2s_std_config_t &std_cfg) override;
38#endif
39
40 protected:
42 void build_std_config_(i2s_std_config_t &std_cfg) const;
43
46 bool start_driver_();
47
49 void stop_driver_();
50
54 void fix_dc_offset_(std::vector<uint8_t> &data);
55
56 size_t read_(uint8_t *buf, size_t len, uint32_t timeout_ms);
57
60
61 static void mic_task(void *params);
62
63 SemaphoreHandle_t active_listeners_semaphore_{nullptr};
64 EventGroupHandle_t event_group_{nullptr};
65
66 TaskHandle_t task_handle_{nullptr};
67
68 gpio_num_t din_pin_{I2S_GPIO_UNUSED};
69 i2s_chan_handle_t rx_handle_{nullptr};
70#if SOC_I2S_SUPPORTS_PDM_RX
71 i2s_pdm_dsr_t pdm_dsr_{I2S_PDM_DSR_8S};
72#endif
73
74 bool pdm_{false};
76 bool locked_driver_{false};
79};
80
81} // namespace esphome::i2s_audio
82
83#endif // USE_ESP32
void build_full_duplex_config(i2s_std_config_t &std_cfg) override
void set_correct_dc_offset(bool correct_dc_offset)
void configure_stream_settings_()
Starts the I2S driver.
void build_std_config_(i2s_std_config_t &std_cfg) const
Builds the standard (non-PDM) mode configuration from the configured settings.
const void size_t len
Definition hal.h:68
static void uint32_t