mirror of
https://github.com/esphome/esphome.git
synced 2024-11-27 09:18:00 +01:00
Merge branch 'dev' into nvds-max7219digit-invertaction
This commit is contained in:
commit
49212b3aa7
12 changed files with 217 additions and 123 deletions
2
.github/workflows/ci.yml
vendored
2
.github/workflows/ci.yml
vendored
|
@ -219,7 +219,7 @@ jobs:
|
||||||
. venv/bin/activate
|
. venv/bin/activate
|
||||||
pytest -vv --cov-report=xml --tb=native tests
|
pytest -vv --cov-report=xml --tb=native tests
|
||||||
- name: Upload coverage to Codecov
|
- name: Upload coverage to Codecov
|
||||||
uses: codecov/codecov-action@v4
|
uses: codecov/codecov-action@v5
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.CODECOV_TOKEN }}
|
token: ${{ secrets.CODECOV_TOKEN }}
|
||||||
|
|
||||||
|
|
|
@ -204,11 +204,11 @@ void BME68xBSEC2Component::update_subscription_() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void BME68xBSEC2Component::run_() {
|
void BME68xBSEC2Component::run_() {
|
||||||
|
this->op_mode_ = this->bsec_settings_.op_mode;
|
||||||
int64_t curr_time_ns = this->get_time_ns_();
|
int64_t curr_time_ns = this->get_time_ns_();
|
||||||
if (curr_time_ns < this->next_call_ns_) {
|
if (curr_time_ns < this->bsec_settings_.next_call) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this->op_mode_ = this->bsec_settings_.op_mode;
|
|
||||||
uint8_t status;
|
uint8_t status;
|
||||||
|
|
||||||
ESP_LOGV(TAG, "Performing sensor run");
|
ESP_LOGV(TAG, "Performing sensor run");
|
||||||
|
@ -219,9 +219,28 @@ void BME68xBSEC2Component::run_() {
|
||||||
ESP_LOGW(TAG, "Failed to fetch sensor control settings (BSEC2 error code %d)", this->bsec_status_);
|
ESP_LOGW(TAG, "Failed to fetch sensor control settings (BSEC2 error code %d)", this->bsec_status_);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this->next_call_ns_ = this->bsec_settings_.next_call;
|
|
||||||
|
|
||||||
if (this->bsec_settings_.trigger_measurement) {
|
switch (this->bsec_settings_.op_mode) {
|
||||||
|
case BME68X_FORCED_MODE:
|
||||||
|
bme68x_get_conf(&bme68x_conf, &this->bme68x_);
|
||||||
|
|
||||||
|
bme68x_conf.os_hum = this->bsec_settings_.humidity_oversampling;
|
||||||
|
bme68x_conf.os_temp = this->bsec_settings_.temperature_oversampling;
|
||||||
|
bme68x_conf.os_pres = this->bsec_settings_.pressure_oversampling;
|
||||||
|
bme68x_set_conf(&bme68x_conf, &this->bme68x_);
|
||||||
|
this->bme68x_heatr_conf_.enable = BME68X_ENABLE;
|
||||||
|
this->bme68x_heatr_conf_.heatr_temp = this->bsec_settings_.heater_temperature;
|
||||||
|
this->bme68x_heatr_conf_.heatr_dur = this->bsec_settings_.heater_duration;
|
||||||
|
|
||||||
|
// status = bme68x_set_op_mode(this->bsec_settings_.op_mode, &this->bme68x_);
|
||||||
|
status = bme68x_set_heatr_conf(BME68X_FORCED_MODE, &this->bme68x_heatr_conf_, &this->bme68x_);
|
||||||
|
status = bme68x_set_op_mode(BME68X_FORCED_MODE, &this->bme68x_);
|
||||||
|
this->op_mode_ = BME68X_FORCED_MODE;
|
||||||
|
ESP_LOGV(TAG, "Using forced mode");
|
||||||
|
|
||||||
|
break;
|
||||||
|
case BME68X_PARALLEL_MODE:
|
||||||
|
if (this->op_mode_ != this->bsec_settings_.op_mode) {
|
||||||
bme68x_get_conf(&bme68x_conf, &this->bme68x_);
|
bme68x_get_conf(&bme68x_conf, &this->bme68x_);
|
||||||
|
|
||||||
bme68x_conf.os_hum = this->bsec_settings_.humidity_oversampling;
|
bme68x_conf.os_hum = this->bsec_settings_.humidity_oversampling;
|
||||||
|
@ -229,22 +248,6 @@ void BME68xBSEC2Component::run_() {
|
||||||
bme68x_conf.os_pres = this->bsec_settings_.pressure_oversampling;
|
bme68x_conf.os_pres = this->bsec_settings_.pressure_oversampling;
|
||||||
bme68x_set_conf(&bme68x_conf, &this->bme68x_);
|
bme68x_set_conf(&bme68x_conf, &this->bme68x_);
|
||||||
|
|
||||||
switch (this->bsec_settings_.op_mode) {
|
|
||||||
case BME68X_FORCED_MODE:
|
|
||||||
this->bme68x_heatr_conf_.enable = BME68X_ENABLE;
|
|
||||||
this->bme68x_heatr_conf_.heatr_temp = this->bsec_settings_.heater_temperature;
|
|
||||||
this->bme68x_heatr_conf_.heatr_dur = this->bsec_settings_.heater_duration;
|
|
||||||
|
|
||||||
status = bme68x_set_op_mode(this->bsec_settings_.op_mode, &this->bme68x_);
|
|
||||||
status = bme68x_set_heatr_conf(BME68X_FORCED_MODE, &this->bme68x_heatr_conf_, &this->bme68x_);
|
|
||||||
status = bme68x_set_op_mode(BME68X_FORCED_MODE, &this->bme68x_);
|
|
||||||
this->op_mode_ = BME68X_FORCED_MODE;
|
|
||||||
this->sleep_mode_ = false;
|
|
||||||
ESP_LOGV(TAG, "Using forced mode");
|
|
||||||
|
|
||||||
break;
|
|
||||||
case BME68X_PARALLEL_MODE:
|
|
||||||
if (this->op_mode_ != this->bsec_settings_.op_mode) {
|
|
||||||
this->bme68x_heatr_conf_.enable = BME68X_ENABLE;
|
this->bme68x_heatr_conf_.enable = BME68X_ENABLE;
|
||||||
this->bme68x_heatr_conf_.heatr_temp_prof = this->bsec_settings_.heater_temperature_profile;
|
this->bme68x_heatr_conf_.heatr_temp_prof = this->bsec_settings_.heater_temperature_profile;
|
||||||
this->bme68x_heatr_conf_.heatr_dur_prof = this->bsec_settings_.heater_duration_profile;
|
this->bme68x_heatr_conf_.heatr_dur_prof = this->bsec_settings_.heater_duration_profile;
|
||||||
|
@ -257,19 +260,19 @@ void BME68xBSEC2Component::run_() {
|
||||||
|
|
||||||
status = bme68x_set_op_mode(BME68X_PARALLEL_MODE, &this->bme68x_);
|
status = bme68x_set_op_mode(BME68X_PARALLEL_MODE, &this->bme68x_);
|
||||||
this->op_mode_ = BME68X_PARALLEL_MODE;
|
this->op_mode_ = BME68X_PARALLEL_MODE;
|
||||||
this->sleep_mode_ = false;
|
|
||||||
ESP_LOGV(TAG, "Using parallel mode");
|
ESP_LOGV(TAG, "Using parallel mode");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case BME68X_SLEEP_MODE:
|
case BME68X_SLEEP_MODE:
|
||||||
if (!this->sleep_mode_) {
|
if (this->op_mode_ != this->bsec_settings_.op_mode) {
|
||||||
bme68x_set_op_mode(BME68X_SLEEP_MODE, &this->bme68x_);
|
bme68x_set_op_mode(BME68X_SLEEP_MODE, &this->bme68x_);
|
||||||
this->sleep_mode_ = true;
|
this->op_mode_ = BME68X_SLEEP_MODE;
|
||||||
ESP_LOGV(TAG, "Using sleep mode");
|
ESP_LOGV(TAG, "Using sleep mode");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this->bsec_settings_.trigger_measurement && this->bsec_settings_.op_mode != BME68X_SLEEP_MODE) {
|
||||||
uint32_t meas_dur = 0;
|
uint32_t meas_dur = 0;
|
||||||
meas_dur = bme68x_get_meas_dur(this->op_mode_, &bme68x_conf, &this->bme68x_);
|
meas_dur = bme68x_get_meas_dur(this->op_mode_, &bme68x_conf, &this->bme68x_);
|
||||||
ESP_LOGV(TAG, "Queueing read in %uus", meas_dur);
|
ESP_LOGV(TAG, "Queueing read in %uus", meas_dur);
|
||||||
|
|
|
@ -113,13 +113,11 @@ class BME68xBSEC2Component : public Component {
|
||||||
|
|
||||||
struct bme68x_heatr_conf bme68x_heatr_conf_;
|
struct bme68x_heatr_conf bme68x_heatr_conf_;
|
||||||
uint8_t op_mode_; // operating mode of sensor
|
uint8_t op_mode_; // operating mode of sensor
|
||||||
bool sleep_mode_;
|
|
||||||
bsec_library_return_t bsec_status_{BSEC_OK};
|
bsec_library_return_t bsec_status_{BSEC_OK};
|
||||||
int8_t bme68x_status_{BME68X_OK};
|
int8_t bme68x_status_{BME68X_OK};
|
||||||
|
|
||||||
int64_t last_time_ms_{0};
|
int64_t last_time_ms_{0};
|
||||||
uint32_t millis_overflow_counter_{0};
|
uint32_t millis_overflow_counter_{0};
|
||||||
int64_t next_call_ns_{0};
|
|
||||||
|
|
||||||
std::queue<std::function<void()>> queue_;
|
std::queue<std::function<void()>> queue_;
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,104 @@ namespace dfplayer {
|
||||||
|
|
||||||
static const char *const TAG = "dfplayer";
|
static const char *const TAG = "dfplayer";
|
||||||
|
|
||||||
|
void DFPlayer::next() {
|
||||||
|
this->ack_set_is_playing_ = true;
|
||||||
|
ESP_LOGD(TAG, "Playing next track");
|
||||||
|
this->send_cmd_(0x01);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DFPlayer::previous() {
|
||||||
|
this->ack_set_is_playing_ = true;
|
||||||
|
ESP_LOGD(TAG, "Playing previous track");
|
||||||
|
this->send_cmd_(0x02);
|
||||||
|
}
|
||||||
|
void DFPlayer::play_mp3(uint16_t file) {
|
||||||
|
this->ack_set_is_playing_ = true;
|
||||||
|
ESP_LOGD(TAG, "Playing file %d in mp3 folder", file);
|
||||||
|
this->send_cmd_(0x12, file);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DFPlayer::play_file(uint16_t file) {
|
||||||
|
this->ack_set_is_playing_ = true;
|
||||||
|
ESP_LOGD(TAG, "Playing file %d", file);
|
||||||
|
this->send_cmd_(0x03, file);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DFPlayer::play_file_loop(uint16_t file) {
|
||||||
|
this->ack_set_is_playing_ = true;
|
||||||
|
ESP_LOGD(TAG, "Playing file %d in loop", file);
|
||||||
|
this->send_cmd_(0x08, file);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DFPlayer::play_folder_loop(uint16_t folder) {
|
||||||
|
this->ack_set_is_playing_ = true;
|
||||||
|
ESP_LOGD(TAG, "Playing folder %d in loop", folder);
|
||||||
|
this->send_cmd_(0x17, folder);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DFPlayer::volume_up() {
|
||||||
|
ESP_LOGD(TAG, "Increasing volume");
|
||||||
|
this->send_cmd_(0x04);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DFPlayer::volume_down() {
|
||||||
|
ESP_LOGD(TAG, "Decreasing volume");
|
||||||
|
this->send_cmd_(0x05);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DFPlayer::set_device(Device device) {
|
||||||
|
ESP_LOGD(TAG, "Setting device to %d", device);
|
||||||
|
this->send_cmd_(0x09, device);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DFPlayer::set_volume(uint8_t volume) {
|
||||||
|
ESP_LOGD(TAG, "Setting volume to %d", volume);
|
||||||
|
this->send_cmd_(0x06, volume);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DFPlayer::set_eq(EqPreset preset) {
|
||||||
|
ESP_LOGD(TAG, "Setting EQ to %d", preset);
|
||||||
|
this->send_cmd_(0x07, preset);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DFPlayer::sleep() {
|
||||||
|
this->ack_reset_is_playing_ = true;
|
||||||
|
ESP_LOGD(TAG, "Putting DFPlayer to sleep");
|
||||||
|
this->send_cmd_(0x0A);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DFPlayer::reset() {
|
||||||
|
this->ack_reset_is_playing_ = true;
|
||||||
|
ESP_LOGD(TAG, "Resetting DFPlayer");
|
||||||
|
this->send_cmd_(0x0C);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DFPlayer::start() {
|
||||||
|
this->ack_set_is_playing_ = true;
|
||||||
|
ESP_LOGD(TAG, "Starting playback");
|
||||||
|
this->send_cmd_(0x0D);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DFPlayer::pause() {
|
||||||
|
this->ack_reset_is_playing_ = true;
|
||||||
|
ESP_LOGD(TAG, "Pausing playback");
|
||||||
|
this->send_cmd_(0x0E);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DFPlayer::stop() {
|
||||||
|
this->ack_reset_is_playing_ = true;
|
||||||
|
ESP_LOGD(TAG, "Stopping playback");
|
||||||
|
this->send_cmd_(0x16);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DFPlayer::random() {
|
||||||
|
this->ack_set_is_playing_ = true;
|
||||||
|
ESP_LOGD(TAG, "Playing random file");
|
||||||
|
this->send_cmd_(0x18);
|
||||||
|
}
|
||||||
|
|
||||||
void DFPlayer::play_folder(uint16_t folder, uint16_t file) {
|
void DFPlayer::play_folder(uint16_t folder, uint16_t file) {
|
||||||
|
ESP_LOGD(TAG, "Playing file %d in folder %d", file, folder);
|
||||||
if (folder < 100 && file < 256) {
|
if (folder < 100 && file < 256) {
|
||||||
this->ack_set_is_playing_ = true;
|
this->ack_set_is_playing_ = true;
|
||||||
this->send_cmd_(0x0F, (uint8_t) folder, (uint8_t) file);
|
this->send_cmd_(0x0F, (uint8_t) folder, (uint8_t) file);
|
||||||
|
@ -29,7 +126,7 @@ void DFPlayer::send_cmd_(uint8_t cmd, uint16_t argument) {
|
||||||
|
|
||||||
this->sent_cmd_ = cmd;
|
this->sent_cmd_ = cmd;
|
||||||
|
|
||||||
ESP_LOGD(TAG, "Send Command %#02x arg %#04x", cmd, argument);
|
ESP_LOGV(TAG, "Send Command %#02x arg %#04x", cmd, argument);
|
||||||
this->write_array(buffer, 10);
|
this->write_array(buffer, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,9 +198,37 @@ void DFPlayer::loop() {
|
||||||
ESP_LOGV(TAG, "Nack");
|
ESP_LOGV(TAG, "Nack");
|
||||||
this->ack_set_is_playing_ = false;
|
this->ack_set_is_playing_ = false;
|
||||||
this->ack_reset_is_playing_ = false;
|
this->ack_reset_is_playing_ = false;
|
||||||
if (argument == 6) {
|
switch (argument) {
|
||||||
ESP_LOGV(TAG, "File not found");
|
case 0x01:
|
||||||
|
ESP_LOGE(TAG, "Module is busy or uninitialized");
|
||||||
|
break;
|
||||||
|
case 0x02:
|
||||||
|
ESP_LOGE(TAG, "Module is in sleep mode");
|
||||||
|
break;
|
||||||
|
case 0x03:
|
||||||
|
ESP_LOGE(TAG, "Serial receive error");
|
||||||
|
break;
|
||||||
|
case 0x04:
|
||||||
|
ESP_LOGE(TAG, "Checksum incorrect");
|
||||||
|
break;
|
||||||
|
case 0x05:
|
||||||
|
ESP_LOGE(TAG, "Specified track is out of current track scope");
|
||||||
this->is_playing_ = false;
|
this->is_playing_ = false;
|
||||||
|
break;
|
||||||
|
case 0x06:
|
||||||
|
ESP_LOGE(TAG, "Specified track is not found");
|
||||||
|
this->is_playing_ = false;
|
||||||
|
break;
|
||||||
|
case 0x07:
|
||||||
|
ESP_LOGE(TAG, "Insertion error (an inserting operation only can be done when a track is being played)");
|
||||||
|
break;
|
||||||
|
case 0x08:
|
||||||
|
ESP_LOGE(TAG, "SD card reading failed (SD card pulled out or damaged)");
|
||||||
|
break;
|
||||||
|
case 0x09:
|
||||||
|
ESP_LOGE(TAG, "Entered into sleep mode");
|
||||||
|
this->is_playing_ = false;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x41:
|
case 0x41:
|
||||||
|
@ -113,12 +238,13 @@ void DFPlayer::loop() {
|
||||||
this->ack_set_is_playing_ = false;
|
this->ack_set_is_playing_ = false;
|
||||||
this->ack_reset_is_playing_ = false;
|
this->ack_reset_is_playing_ = false;
|
||||||
break;
|
break;
|
||||||
case 0x3D: // Playback finished
|
case 0x3D:
|
||||||
|
ESP_LOGV(TAG, "Playback finished");
|
||||||
this->is_playing_ = false;
|
this->is_playing_ = false;
|
||||||
this->on_finished_playback_callback_.call();
|
this->on_finished_playback_callback_.call();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ESP_LOGD(TAG, "Command %#02x arg %#04x", cmd, argument);
|
ESP_LOGV(TAG, "Received unknown cmd %#02x arg %#04x", cmd, argument);
|
||||||
}
|
}
|
||||||
this->sent_cmd_ = 0;
|
this->sent_cmd_ = 0;
|
||||||
this->read_pos_ = 0;
|
this->read_pos_ = 0;
|
||||||
|
|
|
@ -23,64 +23,30 @@ enum Device {
|
||||||
TF_CARD = 2,
|
TF_CARD = 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// See the datasheet here:
|
||||||
|
// https://github.com/DFRobot/DFRobotDFPlayerMini/blob/master/doc/FN-M16P%2BEmbedded%2BMP3%2BAudio%2BModule%2BDatasheet.pdf
|
||||||
class DFPlayer : public uart::UARTDevice, public Component {
|
class DFPlayer : public uart::UARTDevice, public Component {
|
||||||
public:
|
public:
|
||||||
void loop() override;
|
void loop() override;
|
||||||
|
|
||||||
void next() {
|
void next();
|
||||||
this->ack_set_is_playing_ = true;
|
void previous();
|
||||||
this->send_cmd_(0x01);
|
void play_mp3(uint16_t file);
|
||||||
}
|
void play_file(uint16_t file);
|
||||||
void previous() {
|
void play_file_loop(uint16_t file);
|
||||||
this->ack_set_is_playing_ = true;
|
|
||||||
this->send_cmd_(0x02);
|
|
||||||
}
|
|
||||||
void play_mp3(uint16_t file) {
|
|
||||||
this->ack_set_is_playing_ = true;
|
|
||||||
this->send_cmd_(0x12, file);
|
|
||||||
}
|
|
||||||
void play_file(uint16_t file) {
|
|
||||||
this->ack_set_is_playing_ = true;
|
|
||||||
this->send_cmd_(0x03, file);
|
|
||||||
}
|
|
||||||
void play_file_loop(uint16_t file) {
|
|
||||||
this->ack_set_is_playing_ = true;
|
|
||||||
this->send_cmd_(0x08, file);
|
|
||||||
}
|
|
||||||
void play_folder(uint16_t folder, uint16_t file);
|
void play_folder(uint16_t folder, uint16_t file);
|
||||||
void play_folder_loop(uint16_t folder) {
|
void play_folder_loop(uint16_t folder);
|
||||||
this->ack_set_is_playing_ = true;
|
void volume_up();
|
||||||
this->send_cmd_(0x17, folder);
|
void volume_down();
|
||||||
}
|
void set_device(Device device);
|
||||||
void volume_up() { this->send_cmd_(0x04); }
|
void set_volume(uint8_t volume);
|
||||||
void volume_down() { this->send_cmd_(0x05); }
|
void set_eq(EqPreset preset);
|
||||||
void set_device(Device device) { this->send_cmd_(0x09, device); }
|
void sleep();
|
||||||
void set_volume(uint8_t volume) { this->send_cmd_(0x06, volume); }
|
void reset();
|
||||||
void set_eq(EqPreset preset) { this->send_cmd_(0x07, preset); }
|
void start();
|
||||||
void sleep() {
|
void pause();
|
||||||
this->ack_reset_is_playing_ = true;
|
void stop();
|
||||||
this->send_cmd_(0x0A);
|
void random();
|
||||||
}
|
|
||||||
void reset() {
|
|
||||||
this->ack_reset_is_playing_ = true;
|
|
||||||
this->send_cmd_(0x0C);
|
|
||||||
}
|
|
||||||
void start() {
|
|
||||||
this->ack_set_is_playing_ = true;
|
|
||||||
this->send_cmd_(0x0D);
|
|
||||||
}
|
|
||||||
void pause() {
|
|
||||||
this->ack_reset_is_playing_ = true;
|
|
||||||
this->send_cmd_(0x0E);
|
|
||||||
}
|
|
||||||
void stop() {
|
|
||||||
this->ack_reset_is_playing_ = true;
|
|
||||||
this->send_cmd_(0x16);
|
|
||||||
}
|
|
||||||
void random() {
|
|
||||||
this->ack_set_is_playing_ = true;
|
|
||||||
this->send_cmd_(0x18);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool is_playing() { return is_playing_; }
|
bool is_playing() { return is_playing_; }
|
||||||
void dump_config() override;
|
void dump_config() override;
|
||||||
|
|
|
@ -65,6 +65,9 @@ void ESP32BLETracker::setup() {
|
||||||
[this](ota::OTAState state, float progress, uint8_t error, ota::OTAComponent *comp) {
|
[this](ota::OTAState state, float progress, uint8_t error, ota::OTAComponent *comp) {
|
||||||
if (state == ota::OTA_STARTED) {
|
if (state == ota::OTA_STARTED) {
|
||||||
this->stop_scan();
|
this->stop_scan();
|
||||||
|
for (auto *client : this->clients_) {
|
||||||
|
client->disconnect();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -99,14 +99,6 @@ void I2SAudioSpeaker::setup() {
|
||||||
this->mark_failed();
|
this->mark_failed();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this->i2s_event_queue_ = xQueueCreate(I2S_EVENT_QUEUE_COUNT, sizeof(i2s_event_t));
|
|
||||||
|
|
||||||
if (this->i2s_event_queue_ == nullptr) {
|
|
||||||
ESP_LOGE(TAG, "Failed to create I2S event queue");
|
|
||||||
this->mark_failed();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void I2SAudioSpeaker::loop() {
|
void I2SAudioSpeaker::loop() {
|
||||||
|
@ -339,7 +331,7 @@ void I2SAudioSpeaker::speaker_task(void *params) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void I2SAudioSpeaker::start() {
|
void I2SAudioSpeaker::start() {
|
||||||
if (this->is_failed() || this->status_has_error())
|
if (!this->is_ready() || this->is_failed() || this->status_has_error())
|
||||||
return;
|
return;
|
||||||
if ((this->state_ == speaker::STATE_STARTING) || (this->state_ == speaker::STATE_RUNNING))
|
if ((this->state_ == speaker::STATE_STARTING) || (this->state_ == speaker::STATE_RUNNING))
|
||||||
return;
|
return;
|
||||||
|
@ -519,7 +511,6 @@ void I2SAudioSpeaker::delete_task_(size_t buffer_size) {
|
||||||
}
|
}
|
||||||
|
|
||||||
xEventGroupSetBits(this->event_group_, SpeakerEventGroupBits::STATE_STOPPED);
|
xEventGroupSetBits(this->event_group_, SpeakerEventGroupBits::STATE_STOPPED);
|
||||||
xQueueReset(this->i2s_event_queue_);
|
|
||||||
|
|
||||||
this->task_created_ = false;
|
this->task_created_ = false;
|
||||||
vTaskDelete(nullptr);
|
vTaskDelete(nullptr);
|
||||||
|
|
|
@ -23,7 +23,7 @@ namespace i2s_audio {
|
||||||
|
|
||||||
class I2SAudioSpeaker : public I2SAudioOut, public speaker::Speaker, public Component {
|
class I2SAudioSpeaker : public I2SAudioOut, public speaker::Speaker, public Component {
|
||||||
public:
|
public:
|
||||||
float get_setup_priority() const override { return esphome::setup_priority::LATE; }
|
float get_setup_priority() const override { return esphome::setup_priority::PROCESSOR; }
|
||||||
|
|
||||||
void setup() override;
|
void setup() override;
|
||||||
void loop() override;
|
void loop() override;
|
||||||
|
|
|
@ -180,7 +180,7 @@ void LD2420Component::apply_config_action() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void LD2420Component::factory_reset_action() {
|
void LD2420Component::factory_reset_action() {
|
||||||
ESP_LOGCONFIG(TAG, "Setiing factory defaults...");
|
ESP_LOGCONFIG(TAG, "Setting factory defaults...");
|
||||||
if (this->set_config_mode(true) == LD2420_ERROR_TIMEOUT) {
|
if (this->set_config_mode(true) == LD2420_ERROR_TIMEOUT) {
|
||||||
ESP_LOGE(TAG, "LD2420 module has failed to respond, check baud rate and serial connections.");
|
ESP_LOGE(TAG, "LD2420 module has failed to respond, check baud rate and serial connections.");
|
||||||
this->mark_failed();
|
this->mark_failed();
|
||||||
|
|
|
@ -38,7 +38,7 @@ void SDMMeter::on_modbus_data(const std::vector<uint8_t> &data) {
|
||||||
|
|
||||||
ESP_LOGD(
|
ESP_LOGD(
|
||||||
TAG,
|
TAG,
|
||||||
"SDMMeter Phase %c: V=%.3f V, I=%.3f A, Active P=%.3f W, Apparent P=%.3f VA, Reactive P=%.3f VAR, PF=%.3f, "
|
"SDMMeter Phase %c: V=%.3f V, I=%.3f A, Active P=%.3f W, Apparent P=%.3f VA, Reactive P=%.3f var, PF=%.3f, "
|
||||||
"PA=%.3f °",
|
"PA=%.3f °",
|
||||||
i + 'A', voltage, current, active_power, apparent_power, reactive_power, power_factor, phase_angle);
|
i + 'A', voltage, current, active_power, apparent_power, reactive_power, power_factor, phase_angle);
|
||||||
if (phase.voltage_sensor_ != nullptr)
|
if (phase.voltage_sensor_ != nullptr)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"""Constants used by esphome."""
|
"""Constants used by esphome."""
|
||||||
|
|
||||||
__version__ = "2024.11.0-dev"
|
__version__ = "2024.12.0-dev"
|
||||||
|
|
||||||
ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
|
ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
|
||||||
VALID_SUBSTITUTIONS_CHARACTERS = (
|
VALID_SUBSTITUTIONS_CHARACTERS = (
|
||||||
|
@ -1095,7 +1095,7 @@ UNIT_STEPS = "steps"
|
||||||
UNIT_VOLT = "V"
|
UNIT_VOLT = "V"
|
||||||
UNIT_VOLT_AMPS = "VA"
|
UNIT_VOLT_AMPS = "VA"
|
||||||
UNIT_VOLT_AMPS_HOURS = "VAh"
|
UNIT_VOLT_AMPS_HOURS = "VAh"
|
||||||
UNIT_VOLT_AMPS_REACTIVE = "VAR"
|
UNIT_VOLT_AMPS_REACTIVE = "var"
|
||||||
UNIT_VOLT_AMPS_REACTIVE_HOURS = "VARh"
|
UNIT_VOLT_AMPS_REACTIVE_HOURS = "VARh"
|
||||||
UNIT_WATT = "W"
|
UNIT_WATT = "W"
|
||||||
UNIT_WATT_HOURS = "Wh"
|
UNIT_WATT_HOURS = "Wh"
|
||||||
|
|
|
@ -39,3 +39,10 @@ esp32_ble_tracker:
|
||||||
- then:
|
- then:
|
||||||
- lambda: |-
|
- lambda: |-
|
||||||
ESP_LOGD("ble_auto", "The scan has ended!");
|
ESP_LOGD("ble_auto", "The scan has ended!");
|
||||||
|
|
||||||
|
wifi:
|
||||||
|
ssid: MySSID
|
||||||
|
password: password1
|
||||||
|
|
||||||
|
ota:
|
||||||
|
- platform: esphome
|
||||||
|
|
Loading…
Reference in a new issue