ESPHome 2026.8.0
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 protected:
39 bool start_driver_();
40
42 void stop_driver_();
43
47 void fix_dc_offset_(std::vector<uint8_t> &data);
48
49 size_t read_(uint8_t *buf, size_t len, uint32_t timeout_ms);
50
53
54 static void mic_task(void *params);
55
56 SemaphoreHandle_t active_listeners_semaphore_{nullptr};
57 EventGroupHandle_t event_group_{nullptr};
58
59 TaskHandle_t task_handle_{nullptr};
60
61 gpio_num_t din_pin_{I2S_GPIO_UNUSED};
62 i2s_chan_handle_t rx_handle_;
63 bool pdm_{false};
64#if SOC_I2S_SUPPORTS_PDM_RX
65 i2s_pdm_dsr_t pdm_dsr_{I2S_PDM_DSR_8S};
66#endif
67
69 bool locked_driver_{false};
72};
73
74} // namespace esphome::i2s_audio
75
76#endif // USE_ESP32
void set_correct_dc_offset(bool correct_dc_offset)
void configure_stream_settings_()
Starts the I2S driver.
const void size_t len
Definition hal.h:64
static void uint32_t