ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
es8311.h
Go to the documentation of this file.
1#pragma once
2
6
7namespace esphome::es8311 {
8
21
29
31 uint32_t mclk; // mclk frequency
32 uint32_t rate; // sample rate
33 uint8_t pre_div; // the pre divider with range from 1 to 8
34 uint8_t pre_mult; // the pre multiplier with x1, x2, x4 and x8 selection
35 uint8_t adc_div; // adcclk divider
36 uint8_t dac_div; // dacclk divider
37 uint8_t fs_mode; // single speed (0) or double speed (1)
38 uint8_t lrck_h; // adc lrck divider and dac lrck divider
39 uint8_t lrck_l; //
40 uint8_t bclk_div; // sclk divider
41 uint8_t adc_osr; // adc osr
42 uint8_t dac_osr; // dac osr
43};
44
45class ES8311 : public audio_dac::AudioDac, public Component, public i2c::I2CDevice {
46 public:
48 // Component overrides //
50
51 void setup() override;
52 void dump_config() override;
53
55 // AudioDac overrides //
57
61 bool set_volume(float volume) override;
62
65 float volume() override;
66
69 bool set_mute_off() override { return this->set_mute_state_(false); }
70
73 bool set_mute_on() override { return this->set_mute_state_(true); }
74
75 bool is_muted() override { return this->is_muted_; }
76
78 // ES8311 configuration setters //
80
81 void set_use_mclk(bool use_mclk) { this->use_mclk_ = use_mclk; }
86 void set_sample_frequency(uint32_t sample_frequency) { this->sample_frequency_ = sample_frequency; }
87 void set_use_mic(bool use_mic) { this->use_mic_ = use_mic; }
88 void set_mic_gain(ES8311MicGain mic_gain) { this->mic_gain_ = mic_gain; }
89
90 protected:
95
100 static const ES8311Coefficient *get_coefficient(uint32_t mclk, uint32_t rate);
101
104 bool configure_clock_();
105
108 bool configure_format_();
109
112 bool configure_mic_();
113
117 bool set_mute_state_(bool mute_state);
118
121
122 bool use_mclk_; // true = use dedicated MCLK pin, false = use SCLK
123 bool sclk_inverted_{false}; // SCLK is inverted
124 bool mclk_inverted_{false}; // MCLK is inverted (ignored if use_mclk_ == false)
125 uint32_t mclk_multiple_{256}; // MCLK frequency is sample rate * mclk_multiple_ (ignored if use_mclk_ == false)
126
130};
131
132} // namespace esphome::es8311
bool set_mute_on() override
Enables mute for audio out.
Definition es8311.h:73
void set_mic_gain(ES8311MicGain mic_gain)
Definition es8311.h:88
bool is_muted() override
Definition es8311.h:75
bool set_mute_off() override
Disables mute for audio out.
Definition es8311.h:69
void set_bits_per_sample(ES8311Resolution resolution)
Definition es8311.h:82
float volume() override
Gets the current volume out from the DAC.
Definition es8311.cpp:72
void set_use_mic(bool use_mic)
Definition es8311.h:87
ES8311Resolution resolution_out_
Definition es8311.h:129
static const ES8311Coefficient * get_coefficient(uint32_t mclk, uint32_t rate)
Retrieves the appropriate registers values for the configured mclk and rate.
Definition es8311.cpp:95
ES8311Resolution resolution_in_
Definition es8311.h:128
uint32_t sample_frequency_
Definition es8311.h:127
uint32_t mclk_multiple_
Definition es8311.h:125
static uint8_t calculate_resolution_value(ES8311Resolution resolution)
Computes the register value for the configured resolution (bits per sample)
Definition es8311.cpp:78
void dump_config() override
Definition es8311.cpp:51
void set_use_mclk(bool use_mclk)
Definition es8311.h:81
bool configure_format_()
Configures the ES8311 registers for the chosen bits per sample.
Definition es8311.cpp:174
bool configure_clock_()
Configures the ES8311 registers for the chosen sample rate.
Definition es8311.cpp:103
void setup() override
Definition es8311.cpp:23
bool configure_mic_()
Configures the ES8311 microphone registers.
Definition es8311.cpp:193
void set_sample_frequency(uint32_t sample_frequency)
Definition es8311.h:86
bool set_mute_state_(bool mute_state)
Mutes or unmute the DAC audio out.
Definition es8311.cpp:207
bool set_volume(float volume) override
Writes the volume out to the DAC.
Definition es8311.cpp:66
ES8311MicGain mic_gain_
Definition es8311.h:120
This Class provides the methods to read/write bytes from/to an i2c device.
Definition i2c.h:132
Resolution resolution
Definition msa3xx.h:1
@ ES8311_RESOLUTION_32
Definition es8311.h:27
@ ES8311_RESOLUTION_16
Definition es8311.h:23
@ ES8311_RESOLUTION_20
Definition es8311.h:25
@ ES8311_RESOLUTION_24
Definition es8311.h:26
@ ES8311_RESOLUTION_18
Definition es8311.h:24
@ ES8311_MIC_GAIN_36DB
Definition es8311.h:17
@ ES8311_MIC_GAIN_30DB
Definition es8311.h:16
@ ES8311_MIC_GAIN_6DB
Definition es8311.h:12
@ ES8311_MIC_GAIN_MAX
Definition es8311.h:19
@ ES8311_MIC_GAIN_MIN
Definition es8311.h:10
@ ES8311_MIC_GAIN_18DB
Definition es8311.h:14
@ ES8311_MIC_GAIN_0DB
Definition es8311.h:11
@ ES8311_MIC_GAIN_12DB
Definition es8311.h:13
@ ES8311_MIC_GAIN_24DB
Definition es8311.h:15
@ ES8311_MIC_GAIN_42DB
Definition es8311.h:18
static void uint32_t