ESPHome 2025.5.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 {
16namespace i2s_audio {
17
19 public:
20 void setup() 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#ifdef USE_I2S_LEGACY
29 void set_din_pin(int8_t pin) { this->din_pin_ = pin; }
30#else
31 void set_din_pin(int8_t pin) { this->din_pin_ = (gpio_num_t) pin; }
32#endif
33
34 void set_pdm(bool pdm) { this->pdm_ = pdm; }
35
36#ifdef USE_I2S_LEGACY
37#if SOC_I2S_SUPPORTS_ADC
38 void set_adc_channel(adc1_channel_t channel) {
39 this->adc_channel_ = channel;
40 this->adc_ = true;
41 }
42#endif
43#endif
44
45 protected:
46 bool start_driver_();
47 void stop_driver_();
48
52 void fix_dc_offset_(std::vector<uint8_t> &data);
53
54 size_t read_(uint8_t *buf, size_t len, TickType_t ticks_to_wait);
55
58
59 static void mic_task(void *params);
60
61 SemaphoreHandle_t active_listeners_semaphore_{nullptr};
62 EventGroupHandle_t event_group_{nullptr};
63
64 TaskHandle_t task_handle_{nullptr};
65
66#ifdef USE_I2S_LEGACY
67 int8_t din_pin_{I2S_PIN_NO_CHANGE};
68#if SOC_I2S_SUPPORTS_ADC
69 adc1_channel_t adc_channel_{ADC1_CHANNEL_MAX};
70 bool adc_{false};
71#endif
72#else
73 gpio_num_t din_pin_{I2S_GPIO_UNUSED};
74 i2s_chan_handle_t rx_handle_;
75#endif
76 bool pdm_{false};
77
79 int32_t dc_offset_{0};
80};
81
82} // namespace i2s_audio
83} // namespace esphome
84
85#endif // USE_ESP32
void fix_dc_offset_(std::vector< uint8_t > &data)
Attempts to correct a microphone DC offset; e.g., a microphones silent level is offset from 0.
size_t read_(uint8_t *buf, size_t len, TickType_t ticks_to_wait)
void set_correct_dc_offset(bool correct_dc_offset)
void configure_stream_settings_()
Sets the Microphone audio_stream_info_ member variable to the configured I2S settings.
void set_adc_channel(adc1_channel_t channel)
Providing packet encoding functions for exchanging data with a remote host.
Definition a01nyub.cpp:7
std::string size_t len
Definition helpers.h:301