mirror of
https://github.com/esphome/esphome.git
synced 2024-12-22 16:37:52 +01:00
[i2s_audio.microphone] Fixing adc bug (#6654)
This commit is contained in:
parent
e7c1ddb452
commit
80a0b5b1b1
@ -61,28 +61,57 @@ void I2SAudioMicrophone::start_() {
|
|||||||
.bits_per_chan = I2S_BITS_PER_CHAN_DEFAULT,
|
.bits_per_chan = I2S_BITS_PER_CHAN_DEFAULT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
esp_err_t err;
|
||||||
|
|
||||||
#if SOC_I2S_SUPPORTS_ADC
|
#if SOC_I2S_SUPPORTS_ADC
|
||||||
if (this->adc_) {
|
if (this->adc_) {
|
||||||
config.mode = (i2s_mode_t) (config.mode | I2S_MODE_ADC_BUILT_IN);
|
config.mode = (i2s_mode_t) (config.mode | I2S_MODE_ADC_BUILT_IN);
|
||||||
i2s_driver_install(this->parent_->get_port(), &config, 0, nullptr);
|
err = i2s_driver_install(this->parent_->get_port(), &config, 0, nullptr);
|
||||||
|
if (err != ESP_OK) {
|
||||||
|
ESP_LOGW(TAG, "Error installing I2S driver: %s", esp_err_to_name(err));
|
||||||
|
this->status_set_error();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = i2s_set_adc_mode(ADC_UNIT_1, this->adc_channel_);
|
||||||
|
if (err != ESP_OK) {
|
||||||
|
ESP_LOGW(TAG, "Error setting ADC mode: %s", esp_err_to_name(err));
|
||||||
|
this->status_set_error();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
err = i2s_adc_enable(this->parent_->get_port());
|
||||||
|
if (err != ESP_OK) {
|
||||||
|
ESP_LOGW(TAG, "Error enabling ADC: %s", esp_err_to_name(err));
|
||||||
|
this->status_set_error();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
i2s_set_adc_mode(ADC_UNIT_1, this->adc_channel_);
|
|
||||||
i2s_adc_enable(this->parent_->get_port());
|
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
if (this->pdm_)
|
if (this->pdm_)
|
||||||
config.mode = (i2s_mode_t) (config.mode | I2S_MODE_PDM);
|
config.mode = (i2s_mode_t) (config.mode | I2S_MODE_PDM);
|
||||||
|
|
||||||
i2s_driver_install(this->parent_->get_port(), &config, 0, nullptr);
|
err = i2s_driver_install(this->parent_->get_port(), &config, 0, nullptr);
|
||||||
|
if (err != ESP_OK) {
|
||||||
|
ESP_LOGW(TAG, "Error installing I2S driver: %s", esp_err_to_name(err));
|
||||||
|
this->status_set_error();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
i2s_pin_config_t pin_config = this->parent_->get_pin_config();
|
i2s_pin_config_t pin_config = this->parent_->get_pin_config();
|
||||||
pin_config.data_in_num = this->din_pin_;
|
pin_config.data_in_num = this->din_pin_;
|
||||||
|
|
||||||
i2s_set_pin(this->parent_->get_port(), &pin_config);
|
err = i2s_set_pin(this->parent_->get_port(), &pin_config);
|
||||||
|
if (err != ESP_OK) {
|
||||||
|
ESP_LOGW(TAG, "Error setting I2S pin: %s", esp_err_to_name(err));
|
||||||
|
this->status_set_error();
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this->state_ = microphone::STATE_RUNNING;
|
this->state_ = microphone::STATE_RUNNING;
|
||||||
this->high_freq_.start();
|
this->high_freq_.start();
|
||||||
|
this->status_clear_error();
|
||||||
}
|
}
|
||||||
|
|
||||||
void I2SAudioMicrophone::stop() {
|
void I2SAudioMicrophone::stop() {
|
||||||
@ -96,11 +125,33 @@ void I2SAudioMicrophone::stop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void I2SAudioMicrophone::stop_() {
|
void I2SAudioMicrophone::stop_() {
|
||||||
i2s_stop(this->parent_->get_port());
|
esp_err_t err;
|
||||||
i2s_driver_uninstall(this->parent_->get_port());
|
#if SOC_I2S_SUPPORTS_ADC
|
||||||
|
if (this->adc_) {
|
||||||
|
err = i2s_adc_disable(this->parent_->get_port());
|
||||||
|
if (err != ESP_OK) {
|
||||||
|
ESP_LOGW(TAG, "Error disabling ADC: %s", esp_err_to_name(err));
|
||||||
|
this->status_set_error();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
err = i2s_stop(this->parent_->get_port());
|
||||||
|
if (err != ESP_OK) {
|
||||||
|
ESP_LOGW(TAG, "Error stopping I2S microphone: %s", esp_err_to_name(err));
|
||||||
|
this->status_set_error();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
err = i2s_driver_uninstall(this->parent_->get_port());
|
||||||
|
if (err != ESP_OK) {
|
||||||
|
ESP_LOGW(TAG, "Error uninstalling I2S driver: %s", esp_err_to_name(err));
|
||||||
|
this->status_set_error();
|
||||||
|
return;
|
||||||
|
}
|
||||||
this->parent_->unlock();
|
this->parent_->unlock();
|
||||||
this->state_ = microphone::STATE_STOPPED;
|
this->state_ = microphone::STATE_STOPPED;
|
||||||
this->high_freq_.stop();
|
this->high_freq_.stop();
|
||||||
|
this->status_clear_error();
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t I2SAudioMicrophone::read(int16_t *buf, size_t len) {
|
size_t I2SAudioMicrophone::read(int16_t *buf, size_t len) {
|
||||||
|
Loading…
Reference in New Issue
Block a user