mirror of
https://github.com/esphome/esphome.git
synced 2024-11-10 09:17:46 +01:00
commit
4e9606d2e0
8 changed files with 54 additions and 3 deletions
|
@ -12,6 +12,9 @@ FROM debian:bullseye-20221024-slim AS base-docker
|
||||||
|
|
||||||
FROM base-${BASEIMGTYPE} AS base
|
FROM base-${BASEIMGTYPE} AS base
|
||||||
|
|
||||||
|
ARG TARGETARCH
|
||||||
|
ARG TARGETVARIANT
|
||||||
|
|
||||||
RUN \
|
RUN \
|
||||||
apt-get update \
|
apt-get update \
|
||||||
# Use pinned versions so that we get updates with build caching
|
# Use pinned versions so that we get updates with build caching
|
||||||
|
@ -36,6 +39,14 @@ ENV \
|
||||||
# Store globally installed pio libs in /piolibs
|
# Store globally installed pio libs in /piolibs
|
||||||
PLATFORMIO_GLOBALLIB_DIR=/piolibs
|
PLATFORMIO_GLOBALLIB_DIR=/piolibs
|
||||||
|
|
||||||
|
# Support legacy binaries on Debian multiarch system. There is no "correct" way
|
||||||
|
# to do this, other than using properly built toolchains...
|
||||||
|
# See: https://unix.stackexchange.com/questions/553743/correct-way-to-add-lib-ld-linux-so-3-in-debian
|
||||||
|
RUN \
|
||||||
|
if [ "$TARGETARCH$TARGETVARIANT" = "armv7" ]; then \
|
||||||
|
ln -s /lib/arm-linux-gnueabihf/ld-linux.so.3 /lib/ld-linux.so.3; \
|
||||||
|
fi
|
||||||
|
|
||||||
RUN \
|
RUN \
|
||||||
# Ubuntu python3-pip is missing wheel
|
# Ubuntu python3-pip is missing wheel
|
||||||
pip3 install --no-cache-dir \
|
pip3 install --no-cache-dir \
|
||||||
|
|
|
@ -2,12 +2,14 @@ import esphome.codegen as cg
|
||||||
import esphome.config_validation as cv
|
import esphome.config_validation as cv
|
||||||
from esphome.const import CONF_ID
|
from esphome.const import CONF_ID
|
||||||
from esphome.core import CORE
|
from esphome.core import CORE
|
||||||
from esphome.components.esp32 import add_idf_sdkconfig_option
|
from esphome.components.esp32 import add_idf_sdkconfig_option, get_esp32_variant, const
|
||||||
|
|
||||||
DEPENDENCIES = ["esp32"]
|
DEPENDENCIES = ["esp32"]
|
||||||
CODEOWNERS = ["@jesserockz"]
|
CODEOWNERS = ["@jesserockz"]
|
||||||
CONFLICTS_WITH = ["esp32_ble_tracker", "esp32_ble_beacon"]
|
CONFLICTS_WITH = ["esp32_ble_tracker", "esp32_ble_beacon"]
|
||||||
|
|
||||||
|
NO_BLUTOOTH_VARIANTS = [const.VARIANT_ESP32S2]
|
||||||
|
|
||||||
esp32_ble_ns = cg.esphome_ns.namespace("esp32_ble")
|
esp32_ble_ns = cg.esphome_ns.namespace("esp32_ble")
|
||||||
ESP32BLE = esp32_ble_ns.class_("ESP32BLE", cg.Component)
|
ESP32BLE = esp32_ble_ns.class_("ESP32BLE", cg.Component)
|
||||||
|
|
||||||
|
@ -19,6 +21,15 @@ CONFIG_SCHEMA = cv.Schema(
|
||||||
).extend(cv.COMPONENT_SCHEMA)
|
).extend(cv.COMPONENT_SCHEMA)
|
||||||
|
|
||||||
|
|
||||||
|
def validate_variant(_):
|
||||||
|
variant = get_esp32_variant()
|
||||||
|
if variant in NO_BLUTOOTH_VARIANTS:
|
||||||
|
raise cv.Invalid(f"{variant} does not support Bluetooth")
|
||||||
|
|
||||||
|
|
||||||
|
FINAL_VALIDATE_SCHEMA = validate_variant
|
||||||
|
|
||||||
|
|
||||||
async def to_code(config):
|
async def to_code(config):
|
||||||
var = cg.new_Pvariable(config[CONF_ID])
|
var = cg.new_Pvariable(config[CONF_ID])
|
||||||
await cg.register_component(var, config)
|
await cg.register_component(var, config)
|
||||||
|
|
|
@ -3,6 +3,7 @@ import esphome.config_validation as cv
|
||||||
from esphome.const import CONF_ID, CONF_TYPE, CONF_UUID, CONF_TX_POWER
|
from esphome.const import CONF_ID, CONF_TYPE, CONF_UUID, CONF_TX_POWER
|
||||||
from esphome.core import CORE, TimePeriod
|
from esphome.core import CORE, TimePeriod
|
||||||
from esphome.components.esp32 import add_idf_sdkconfig_option
|
from esphome.components.esp32 import add_idf_sdkconfig_option
|
||||||
|
from esphome.components import esp32_ble
|
||||||
|
|
||||||
DEPENDENCIES = ["esp32"]
|
DEPENDENCIES = ["esp32"]
|
||||||
CONFLICTS_WITH = ["esp32_ble_tracker"]
|
CONFLICTS_WITH = ["esp32_ble_tracker"]
|
||||||
|
@ -54,6 +55,8 @@ CONFIG_SCHEMA = cv.All(
|
||||||
validate_config,
|
validate_config,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
FINAL_VALIDATE_SCHEMA = esp32_ble.validate_variant
|
||||||
|
|
||||||
|
|
||||||
async def to_code(config):
|
async def to_code(config):
|
||||||
uuid = config[CONF_UUID].hex
|
uuid = config[CONF_UUID].hex
|
||||||
|
|
|
@ -17,6 +17,7 @@ from esphome.const import (
|
||||||
)
|
)
|
||||||
from esphome.core import CORE
|
from esphome.core import CORE
|
||||||
from esphome.components.esp32 import add_idf_sdkconfig_option
|
from esphome.components.esp32 import add_idf_sdkconfig_option
|
||||||
|
from esphome.components import esp32_ble
|
||||||
|
|
||||||
DEPENDENCIES = ["esp32"]
|
DEPENDENCIES = ["esp32"]
|
||||||
|
|
||||||
|
@ -187,6 +188,8 @@ CONFIG_SCHEMA = cv.Schema(
|
||||||
}
|
}
|
||||||
).extend(cv.COMPONENT_SCHEMA)
|
).extend(cv.COMPONENT_SCHEMA)
|
||||||
|
|
||||||
|
FINAL_VALIDATE_SCHEMA = esp32_ble.validate_variant
|
||||||
|
|
||||||
ESP_BLE_DEVICE_SCHEMA = cv.Schema(
|
ESP_BLE_DEVICE_SCHEMA = cv.Schema(
|
||||||
{
|
{
|
||||||
cv.GenerateID(CONF_ESP32_BLE_ID): cv.use_id(ESP32BLETracker),
|
cv.GenerateID(CONF_ESP32_BLE_ID): cv.use_id(ESP32BLETracker),
|
||||||
|
|
|
@ -103,9 +103,11 @@ void I2SAudioMediaPlayer::stop_() {
|
||||||
|
|
||||||
void I2SAudioMediaPlayer::setup() {
|
void I2SAudioMediaPlayer::setup() {
|
||||||
ESP_LOGCONFIG(TAG, "Setting up Audio...");
|
ESP_LOGCONFIG(TAG, "Setting up Audio...");
|
||||||
|
#if SOC_I2S_SUPPORTS_DAC
|
||||||
if (this->internal_dac_mode_ != I2S_DAC_CHANNEL_DISABLE) {
|
if (this->internal_dac_mode_ != I2S_DAC_CHANNEL_DISABLE) {
|
||||||
this->audio_ = make_unique<Audio>(true, this->internal_dac_mode_);
|
this->audio_ = make_unique<Audio>(true, this->internal_dac_mode_);
|
||||||
} else {
|
} else {
|
||||||
|
#endif
|
||||||
this->audio_ = make_unique<Audio>(false);
|
this->audio_ = make_unique<Audio>(false);
|
||||||
this->audio_->setPinout(this->bclk_pin_, this->lrclk_pin_, this->dout_pin_);
|
this->audio_->setPinout(this->bclk_pin_, this->lrclk_pin_, this->dout_pin_);
|
||||||
this->audio_->forceMono(this->external_dac_channels_ == 1);
|
this->audio_->forceMono(this->external_dac_channels_ == 1);
|
||||||
|
@ -113,7 +115,9 @@ void I2SAudioMediaPlayer::setup() {
|
||||||
this->mute_pin_->setup();
|
this->mute_pin_->setup();
|
||||||
this->mute_pin_->digital_write(false);
|
this->mute_pin_->digital_write(false);
|
||||||
}
|
}
|
||||||
|
#if SOC_I2S_SUPPORTS_DAC
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
this->state = media_player::MEDIA_PLAYER_STATE_IDLE;
|
this->state = media_player::MEDIA_PLAYER_STATE_IDLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -137,6 +141,7 @@ void I2SAudioMediaPlayer::dump_config() {
|
||||||
ESP_LOGCONFIG(TAG, "Audio failed to initialize!");
|
ESP_LOGCONFIG(TAG, "Audio failed to initialize!");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#if SOC_I2S_SUPPORTS_DAC
|
||||||
if (this->internal_dac_mode_ != I2S_DAC_CHANNEL_DISABLE) {
|
if (this->internal_dac_mode_ != I2S_DAC_CHANNEL_DISABLE) {
|
||||||
switch (this->internal_dac_mode_) {
|
switch (this->internal_dac_mode_) {
|
||||||
case I2S_DAC_CHANNEL_LEFT_EN:
|
case I2S_DAC_CHANNEL_LEFT_EN:
|
||||||
|
@ -152,6 +157,7 @@ void I2SAudioMediaPlayer::dump_config() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace i2s_audio
|
} // namespace i2s_audio
|
||||||
|
|
|
@ -25,7 +25,9 @@ class I2SAudioMediaPlayer : public Component, public media_player::MediaPlayer {
|
||||||
void set_bclk_pin(uint8_t pin) { this->bclk_pin_ = pin; }
|
void set_bclk_pin(uint8_t pin) { this->bclk_pin_ = pin; }
|
||||||
void set_lrclk_pin(uint8_t pin) { this->lrclk_pin_ = pin; }
|
void set_lrclk_pin(uint8_t pin) { this->lrclk_pin_ = pin; }
|
||||||
void set_mute_pin(GPIOPin *mute_pin) { this->mute_pin_ = mute_pin; }
|
void set_mute_pin(GPIOPin *mute_pin) { this->mute_pin_ = mute_pin; }
|
||||||
|
#if SOC_I2S_SUPPORTS_DAC
|
||||||
void set_internal_dac_mode(i2s_dac_mode_t mode) { this->internal_dac_mode_ = mode; }
|
void set_internal_dac_mode(i2s_dac_mode_t mode) { this->internal_dac_mode_ = mode; }
|
||||||
|
#endif
|
||||||
void set_external_dac_channels(uint8_t channels) { this->external_dac_channels_ = channels; }
|
void set_external_dac_channels(uint8_t channels) { this->external_dac_channels_ = channels; }
|
||||||
|
|
||||||
media_player::MediaPlayerTraits get_traits() override;
|
media_player::MediaPlayerTraits get_traits() override;
|
||||||
|
@ -51,7 +53,9 @@ class I2SAudioMediaPlayer : public Component, public media_player::MediaPlayer {
|
||||||
bool muted_{false};
|
bool muted_{false};
|
||||||
float unmuted_volume_{0};
|
float unmuted_volume_{0};
|
||||||
|
|
||||||
|
#if SOC_I2S_SUPPORTS_DAC
|
||||||
i2s_dac_mode_t internal_dac_mode_{I2S_DAC_CHANNEL_DISABLE};
|
i2s_dac_mode_t internal_dac_mode_{I2S_DAC_CHANNEL_DISABLE};
|
||||||
|
#endif
|
||||||
uint8_t external_dac_channels_;
|
uint8_t external_dac_channels_;
|
||||||
|
|
||||||
HighFrequencyLoopRequester high_freq_;
|
HighFrequencyLoopRequester high_freq_;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import esphome.codegen as cg
|
import esphome.codegen as cg
|
||||||
from esphome.components import media_player
|
from esphome.components import media_player, esp32
|
||||||
import esphome.config_validation as cv
|
import esphome.config_validation as cv
|
||||||
|
|
||||||
from esphome import pins
|
from esphome import pins
|
||||||
|
@ -33,6 +33,18 @@ INTERNAL_DAC_OPTIONS = {
|
||||||
|
|
||||||
EXTERNAL_DAC_OPTIONS = ["mono", "stereo"]
|
EXTERNAL_DAC_OPTIONS = ["mono", "stereo"]
|
||||||
|
|
||||||
|
NO_INTERNAL_DAC_VARIANTS = [esp32.const.VARIANT_ESP32S2]
|
||||||
|
|
||||||
|
|
||||||
|
def validate_esp32_variant(config):
|
||||||
|
if config[CONF_DAC_TYPE] != "internal":
|
||||||
|
return config
|
||||||
|
variant = esp32.get_esp32_variant()
|
||||||
|
if variant in NO_INTERNAL_DAC_VARIANTS:
|
||||||
|
raise cv.Invalid(f"{variant} does not have an internal DAC")
|
||||||
|
return config
|
||||||
|
|
||||||
|
|
||||||
CONFIG_SCHEMA = cv.All(
|
CONFIG_SCHEMA = cv.All(
|
||||||
cv.typed_schema(
|
cv.typed_schema(
|
||||||
{
|
{
|
||||||
|
@ -68,6 +80,7 @@ CONFIG_SCHEMA = cv.All(
|
||||||
key=CONF_DAC_TYPE,
|
key=CONF_DAC_TYPE,
|
||||||
),
|
),
|
||||||
cv.only_with_arduino,
|
cv.only_with_arduino,
|
||||||
|
validate_esp32_variant,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"""Constants used by esphome."""
|
"""Constants used by esphome."""
|
||||||
|
|
||||||
__version__ = "2022.12.0"
|
__version__ = "2022.12.1"
|
||||||
|
|
||||||
ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
|
ALLOWED_NAME_CHARS = "abcdefghijklmnopqrstuvwxyz0123456789-_"
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue