esphome 2025.7.5__py3-none-any.whl → 2025.8.0b1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- esphome/__main__.py +189 -82
- esphome/automation.py +2 -4
- esphome/build_gen/__init__.py +0 -0
- esphome/build_gen/platformio.py +102 -0
- esphome/components/a4988/a4988.cpp +0 -1
- esphome/components/absolute_humidity/absolute_humidity.cpp +0 -2
- esphome/components/absolute_humidity/sensor.py +2 -2
- esphome/components/adc/__init__.py +123 -85
- esphome/components/adc/adc_sensor.h +98 -35
- esphome/components/adc/adc_sensor_common.cpp +10 -4
- esphome/components/adc/adc_sensor_esp32.cpp +291 -123
- esphome/components/adc/adc_sensor_esp8266.cpp +1 -4
- esphome/components/adc/adc_sensor_libretiny.cpp +1 -2
- esphome/components/adc/adc_sensor_rp2040.cpp +1 -2
- esphome/components/adc/adc_sensor_zephyr.cpp +207 -0
- esphome/components/adc/sensor.py +61 -27
- esphome/components/adc128s102/adc128s102.cpp +1 -4
- esphome/components/ade7880/sensor.py +75 -49
- esphome/components/ads1115/ads1115.cpp +0 -1
- esphome/components/ads1118/ads1118.cpp +0 -1
- esphome/components/ags10/ags10.cpp +0 -4
- esphome/components/aht10/aht10.cpp +0 -4
- esphome/components/aic3204/aic3204.cpp +0 -2
- esphome/components/airthings_wave_plus/__init__.py +1 -1
- esphome/components/airthings_wave_plus/airthings_wave_plus.cpp +22 -4
- esphome/components/airthings_wave_plus/airthings_wave_plus.h +10 -1
- esphome/components/airthings_wave_plus/sensor.py +55 -28
- esphome/components/alarm_control_panel/__init__.py +4 -9
- esphome/components/am2315c/am2315c.cpp +0 -2
- esphome/components/am2320/am2320.cpp +0 -1
- esphome/components/animation/__init__.py +14 -11
- esphome/components/apds9306/apds9306.cpp +0 -4
- esphome/components/apds9960/apds9960.cpp +0 -1
- esphome/components/api/__init__.py +29 -4
- esphome/components/api/api_connection.cpp +378 -401
- esphome/components/api/api_connection.h +102 -52
- esphome/components/api/api_frame_helper.cpp +69 -896
- esphome/components/api/api_frame_helper.h +31 -126
- esphome/components/api/api_frame_helper_noise.cpp +583 -0
- esphome/components/api/api_frame_helper_noise.h +68 -0
- esphome/components/api/api_frame_helper_plaintext.cpp +290 -0
- esphome/components/api/api_frame_helper_plaintext.h +53 -0
- esphome/components/api/api_noise_context.h +2 -4
- esphome/components/api/api_pb2.cpp +1601 -1808
- esphome/components/api/api_pb2.h +367 -323
- esphome/components/api/api_pb2_dump.cpp +1137 -3466
- esphome/components/api/api_pb2_includes.h +34 -0
- esphome/components/api/api_pb2_service.cpp +94 -105
- esphome/components/api/api_pb2_service.h +27 -16
- esphome/components/api/api_server.cpp +18 -17
- esphome/components/api/api_server.h +8 -5
- esphome/components/api/client.py +16 -8
- esphome/components/api/custom_api_device.h +68 -14
- esphome/components/api/homeassistant_service.h +24 -19
- esphome/components/api/list_entities.cpp +3 -5
- esphome/components/api/list_entities.h +2 -4
- esphome/components/api/proto.cpp +3 -5
- esphome/components/api/proto.h +239 -274
- esphome/components/api/subscribe_state.cpp +2 -4
- esphome/components/api/subscribe_state.h +2 -4
- esphome/components/api/user_services.cpp +2 -4
- esphome/components/api/user_services.h +8 -8
- esphome/components/as3935/as3935.cpp +0 -2
- esphome/components/as3935_spi/as3935_spi.cpp +0 -2
- esphome/components/as5600/__init__.py +1 -1
- esphome/components/as5600/as5600.cpp +0 -2
- esphome/components/as5600/sensor/__init__.py +0 -1
- esphome/components/as7341/as7341.cpp +0 -1
- esphome/components/async_tcp/__init__.py +1 -1
- esphome/components/at581x/at581x.cpp +1 -1
- esphome/components/atm90e26/atm90e26.cpp +0 -1
- esphome/components/atm90e32/atm90e32.cpp +488 -118
- esphome/components/atm90e32/atm90e32.h +44 -5
- esphome/components/audio/audio.h +2 -2
- esphome/components/axs15231/touchscreen/axs15231_touchscreen.cpp +0 -2
- esphome/components/beken_spi_led_strip/led_strip.cpp +0 -2
- esphome/components/bh1750/bh1750.cpp +0 -1
- esphome/components/binary_sensor/__init__.py +14 -12
- esphome/components/ble_client/__init__.py +4 -7
- esphome/components/bluetooth_proxy/__init__.py +40 -3
- esphome/components/bluetooth_proxy/bluetooth_connection.cpp +387 -82
- esphome/components/bluetooth_proxy/bluetooth_connection.h +16 -5
- esphome/components/bluetooth_proxy/bluetooth_proxy.cpp +102 -311
- esphome/components/bluetooth_proxy/bluetooth_proxy.h +30 -14
- esphome/components/bme280_base/bme280_base.cpp +15 -16
- esphome/components/bme680/bme680.cpp +2 -3
- esphome/components/bme680_bsec/bme680_bsec.cpp +0 -2
- esphome/components/bme68x_bsec2/bme68x_bsec2.cpp +0 -2
- esphome/components/bmi160/bmi160.cpp +0 -1
- esphome/components/bmp085/bmp085.cpp +0 -1
- esphome/components/bmp280_base/bmp280_base.cpp +13 -14
- esphome/components/bmp3xx_base/bmp3xx_base.cpp +0 -1
- esphome/components/bmp581/bmp581.cpp +0 -2
- esphome/components/bp1658cj/bp1658cj.cpp +0 -1
- esphome/components/bp5758d/bp5758d.cpp +0 -1
- esphome/components/button/__init__.py +0 -1
- esphome/components/canbus/__init__.py +2 -3
- esphome/components/canbus/canbus.cpp +0 -1
- esphome/components/cap1188/cap1188.cpp +0 -2
- esphome/components/captive_portal/__init__.py +1 -1
- esphome/components/cd74hc4067/cd74hc4067.cpp +0 -2
- esphome/components/ch422g/ch422g.cpp +0 -1
- esphome/components/chsc6x/chsc6x_touchscreen.cpp +0 -3
- esphome/components/climate/__init__.py +0 -1
- esphome/components/climate/climate_traits.h +24 -0
- esphome/components/cm1106/cm1106.cpp +0 -1
- esphome/components/const/__init__.py +6 -0
- esphome/components/cover/__init__.py +0 -1
- esphome/components/cover/cover.cpp +9 -13
- esphome/components/cs5460a/cs5460a.cpp +0 -2
- esphome/components/cse7761/cse7761.cpp +0 -1
- esphome/components/cst226/touchscreen/cst226_touchscreen.cpp +0 -2
- esphome/components/cst816/touchscreen/cst816_touchscreen.cpp +0 -2
- esphome/components/dac7678/dac7678_output.cpp +0 -2
- esphome/components/dallas_temp/dallas_temp.cpp +0 -1
- esphome/components/datetime/__init__.py +0 -2
- esphome/components/debug/__init__.py +15 -1
- esphome/components/debug/debug_zephyr.cpp +281 -0
- esphome/components/debug/sensor.py +2 -1
- esphome/components/deep_sleep/deep_sleep_component.cpp +0 -1
- esphome/components/deep_sleep/deep_sleep_esp32.cpp +20 -1
- esphome/components/dfrobot_sen0395/__init__.py +1 -2
- esphome/components/dht/dht.cpp +0 -1
- esphome/components/dht12/dht12.cpp +0 -1
- esphome/components/display/__init__.py +16 -3
- esphome/components/display_menu_base/__init__.py +1 -1
- esphome/components/dps310/dps310.cpp +0 -2
- esphome/components/ds1307/ds1307.cpp +0 -1
- esphome/components/ds2484/ds2484.cpp +0 -1
- esphome/components/duty_cycle/duty_cycle_sensor.cpp +0 -1
- esphome/components/ee895/ee895.cpp +0 -1
- esphome/components/ektf2232/touchscreen/ektf2232.cpp +0 -1
- esphome/components/emc2101/emc2101.cpp +0 -2
- esphome/components/ens160_base/ens160_base.cpp +0 -2
- esphome/components/ens210/ens210.cpp +0 -1
- esphome/components/es7210/es7210.cpp +0 -2
- esphome/components/es7243e/es7243e.cpp +0 -2
- esphome/components/es8156/es8156.cpp +0 -2
- esphome/components/es8311/es8311.cpp +0 -2
- esphome/components/es8388/es8388.cpp +0 -2
- esphome/components/esp32/__init__.py +199 -58
- esphome/components/esp32/boards.py +17 -0
- esphome/components/esp32/gpio.cpp +0 -1
- esphome/components/esp32/gpio.py +1 -2
- esphome/components/esp32/gpio_esp32_h2.py +2 -7
- esphome/components/esp32/gpio_esp32_p4.py +2 -7
- esphome/components/esp32/post_build.py.script +112 -61
- esphome/components/esp32_ble/__init__.py +40 -2
- esphome/components/esp32_ble/ble.cpp +12 -8
- esphome/components/esp32_ble/ble.h +18 -18
- esphome/components/esp32_ble/ble_advertising.cpp +5 -5
- esphome/components/esp32_ble/ble_advertising.h +7 -5
- esphome/components/esp32_ble/ble_event.h +2 -4
- esphome/components/esp32_ble/ble_scan_result.h +2 -4
- esphome/components/esp32_ble/ble_uuid.cpp +5 -5
- esphome/components/esp32_ble/ble_uuid.h +6 -5
- esphome/components/esp32_ble_beacon/__init__.py +4 -0
- esphome/components/esp32_ble_client/__init__.py +1 -1
- esphome/components/esp32_ble_client/ble_characteristic.cpp +4 -4
- esphome/components/esp32_ble_client/ble_characteristic.h +6 -4
- esphome/components/esp32_ble_client/ble_client_base.cpp +155 -104
- esphome/components/esp32_ble_client/ble_client_base.h +17 -6
- esphome/components/esp32_ble_client/ble_descriptor.h +6 -4
- esphome/components/esp32_ble_client/ble_service.cpp +4 -4
- esphome/components/esp32_ble_client/ble_service.h +6 -4
- esphome/components/esp32_ble_server/__init__.py +15 -12
- esphome/components/esp32_ble_tracker/__init__.py +79 -11
- esphome/components/esp32_ble_tracker/automation.h +4 -4
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.cpp +264 -261
- esphome/components/esp32_ble_tracker/esp32_ble_tracker.h +103 -37
- esphome/components/esp32_camera/__init__.py +13 -1
- esphome/components/esp32_camera/esp32_camera.cpp +7 -2
- esphome/components/esp32_camera/esp32_camera.h +1 -0
- esphome/components/esp32_dac/esp32_dac.cpp +3 -19
- esphome/components/esp32_dac/esp32_dac.h +4 -8
- esphome/components/esp32_rmt_led_strip/led_strip.cpp +1 -6
- esphome/components/esp32_rmt_led_strip/light.py +1 -1
- esphome/components/esp32_touch/__init__.py +2 -3
- esphome/components/esp32_touch/esp32_touch.h +9 -6
- esphome/components/esp32_touch/esp32_touch_common.cpp +2 -0
- esphome/components/esp32_touch/esp32_touch_v1.cpp +7 -9
- esphome/components/esp32_touch/esp32_touch_v2.cpp +10 -6
- esphome/components/esp8266/__init__.py +3 -1
- esphome/components/esp8266_pwm/esp8266_pwm.cpp +0 -1
- esphome/components/esphome/ota/__init__.py +1 -2
- esphome/components/esphome/ota/ota_esphome.cpp +150 -77
- esphome/components/esphome/ota/ota_esphome.h +8 -1
- esphome/components/espnow/__init__.py +309 -0
- esphome/components/espnow/automation.h +175 -0
- esphome/components/espnow/espnow_component.cpp +468 -0
- esphome/components/espnow/espnow_component.h +183 -0
- esphome/components/espnow/espnow_err.h +19 -0
- esphome/components/espnow/espnow_packet.h +166 -0
- esphome/components/ethernet/__init__.py +7 -1
- esphome/components/ethernet/esp_eth_phy_jl1101.c +5 -0
- esphome/components/ethernet/ethernet_component.cpp +0 -1
- esphome/components/ethernet/ethernet_component.h +4 -0
- esphome/components/ethernet_info/ethernet_info_text_sensor.h +0 -3
- esphome/components/event/__init__.py +0 -1
- esphome/components/factory_reset/__init__.py +92 -0
- esphome/components/factory_reset/factory_reset.cpp +76 -0
- esphome/components/factory_reset/factory_reset.h +43 -0
- esphome/components/fan/__init__.py +0 -1
- esphome/components/fan/fan_traits.h +16 -0
- esphome/components/fastled_base/fastled_light.cpp +0 -1
- esphome/components/fastled_spi/light.py +1 -3
- esphome/components/fingerprint_grow/fingerprint_grow.cpp +0 -2
- esphome/components/fs3000/fs3000.cpp +0 -2
- esphome/components/ft5x06/touchscreen/ft5x06_touchscreen.cpp +0 -2
- esphome/components/ft63x6/ft63x6.cpp +0 -1
- esphome/components/gdk101/gdk101.cpp +0 -1
- esphome/components/gl_r01_i2c/gl_r01_i2c.cpp +0 -1
- esphome/components/gl_r01_i2c/sensor.py +1 -1
- esphome/components/gpio/one_wire/gpio_one_wire.cpp +0 -1
- esphome/components/gpio/switch/gpio_switch.cpp +0 -2
- esphome/components/gpio_expander/cached_gpio.h +24 -15
- esphome/components/gps/__init__.py +6 -2
- esphome/components/gps/gps.cpp +50 -49
- esphome/components/gps/gps.h +4 -8
- esphome/components/gps/time/gps_time.cpp +3 -9
- esphome/components/gps/time/gps_time.h +4 -7
- esphome/components/graph/__init__.py +1 -1
- esphome/components/grove_gas_mc_v2/grove_gas_mc_v2.cpp +0 -1
- esphome/components/grove_tb6612fng/grove_tb6612fng.cpp +0 -1
- esphome/components/gt911/touchscreen/gt911_touchscreen.cpp +21 -12
- esphome/components/gt911/touchscreen/gt911_touchscreen.h +26 -2
- esphome/components/haier/climate.py +5 -10
- esphome/components/haier/haier_base.cpp +0 -1
- esphome/components/hbridge/switch/hbridge_switch.cpp +0 -2
- esphome/components/hdc1080/hdc1080.cpp +0 -2
- esphome/components/heatpumpir/climate.py +2 -2
- esphome/components/hlw8012/hlw8012.cpp +0 -1
- esphome/components/hm3301/hm3301.cpp +0 -1
- esphome/components/hmc5883l/hmc5883l.cpp +0 -1
- esphome/components/homeassistant/__init__.py +1 -0
- esphome/components/homeassistant/number/__init__.py +1 -0
- esphome/components/homeassistant/number/homeassistant_number.cpp +11 -7
- esphome/components/homeassistant/switch/__init__.py +1 -0
- esphome/components/homeassistant/switch/homeassistant_switch.cpp +9 -5
- esphome/components/honeywellabp/honeywellabp.cpp +1 -4
- esphome/components/host/__init__.py +2 -0
- esphome/components/hte501/hte501.cpp +0 -1
- esphome/components/http_request/__init__.py +2 -3
- esphome/components/http_request/http_request_idf.cpp +2 -2
- esphome/components/htu21d/htu21d.cpp +0 -2
- esphome/components/htu31d/htu31d.cpp +0 -2
- esphome/components/hx711/hx711.cpp +0 -1
- esphome/components/hydreon_rgxx/hydreon_rgxx.cpp +0 -1
- esphome/components/hydreon_rgxx/sensor.py +4 -5
- esphome/components/i2c/i2c_bus.h +1 -1
- esphome/components/i2c/i2c_bus_arduino.cpp +1 -2
- esphome/components/i2c/i2c_bus_esp_idf.cpp +192 -17
- esphome/components/i2c/i2c_bus_esp_idf.h +11 -1
- esphome/components/i2s_audio/__init__.py +6 -5
- esphome/components/i2s_audio/i2s_audio.cpp +0 -2
- esphome/components/i2s_audio/media_player/i2s_audio_media_player.cpp +1 -4
- esphome/components/i2s_audio/microphone/__init__.py +4 -6
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.cpp +0 -1
- esphome/components/i2s_audio/microphone/i2s_audio_microphone.h +2 -2
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.cpp +273 -269
- esphome/components/i2s_audio/speaker/i2s_audio_speaker.h +19 -34
- esphome/components/ili9xxx/display.py +4 -3
- esphome/components/ili9xxx/ili9xxx_display.cpp +0 -2
- esphome/components/image/__init__.py +123 -92
- esphome/components/improv_serial/__init__.py +7 -8
- esphome/components/ina219/ina219.cpp +0 -1
- esphome/components/ina226/ina226.cpp +0 -2
- esphome/components/ina260/ina260.cpp +0 -2
- esphome/components/ina2xx_base/__init__.py +2 -5
- esphome/components/ina2xx_base/ina2xx_base.cpp +0 -2
- esphome/components/ina3221/ina3221.cpp +0 -1
- esphome/components/internal_temperature/internal_temperature.cpp +0 -2
- esphome/components/interval/interval.h +5 -9
- esphome/components/json/__init__.py +1 -1
- esphome/components/kmeteriso/kmeteriso.cpp +0 -2
- esphome/components/lc709203f/lc709203f.cpp +0 -2
- esphome/components/lcd_gpio/display.py +1 -3
- esphome/components/lcd_gpio/gpio_lcd_display.cpp +0 -1
- esphome/components/lcd_pcf8574/pcf8574_display.cpp +0 -1
- esphome/components/ld2410/__init__.py +4 -6
- esphome/components/ld2410/binary_sensor.py +4 -0
- esphome/components/ld2410/ld2410.cpp +56 -100
- esphome/components/ld2410/ld2410.h +17 -15
- esphome/components/ld2410/sensor.py +24 -10
- esphome/components/ld2412/__init__.py +46 -0
- esphome/components/ld2412/binary_sensor.py +70 -0
- esphome/components/ld2412/button/__init__.py +74 -0
- esphome/components/ld2412/button/factory_reset_button.cpp +9 -0
- esphome/components/ld2412/button/factory_reset_button.h +18 -0
- esphome/components/ld2412/button/query_button.cpp +9 -0
- esphome/components/ld2412/button/query_button.h +18 -0
- esphome/components/ld2412/button/restart_button.cpp +9 -0
- esphome/components/ld2412/button/restart_button.h +18 -0
- esphome/components/ld2412/button/start_dynamic_background_correction_button.cpp +11 -0
- esphome/components/ld2412/button/start_dynamic_background_correction_button.h +18 -0
- esphome/components/ld2412/ld2412.cpp +861 -0
- esphome/components/ld2412/ld2412.h +141 -0
- esphome/components/ld2412/number/__init__.py +126 -0
- esphome/components/ld2412/number/gate_threshold_number.cpp +14 -0
- esphome/components/ld2412/number/gate_threshold_number.h +19 -0
- esphome/components/ld2412/number/light_threshold_number.cpp +12 -0
- esphome/components/ld2412/number/light_threshold_number.h +18 -0
- esphome/components/ld2412/number/max_distance_timeout_number.cpp +12 -0
- esphome/components/ld2412/number/max_distance_timeout_number.h +18 -0
- esphome/components/ld2412/select/__init__.py +82 -0
- esphome/components/ld2412/select/baud_rate_select.cpp +12 -0
- esphome/components/ld2412/select/baud_rate_select.h +18 -0
- esphome/components/ld2412/select/distance_resolution_select.cpp +12 -0
- esphome/components/ld2412/select/distance_resolution_select.h +18 -0
- esphome/components/ld2412/select/light_out_control_select.cpp +12 -0
- esphome/components/ld2412/select/light_out_control_select.h +18 -0
- esphome/components/ld2412/sensor.py +124 -0
- esphome/components/ld2412/switch/__init__.py +45 -0
- esphome/components/ld2412/switch/bluetooth_switch.cpp +12 -0
- esphome/components/ld2412/switch/bluetooth_switch.h +18 -0
- esphome/components/ld2412/switch/engineering_mode_switch.cpp +12 -0
- esphome/components/ld2412/switch/engineering_mode_switch.h +18 -0
- esphome/components/ld2412/text_sensor.py +34 -0
- esphome/components/ld2420/ld2420.cpp +0 -1
- esphome/components/ld2450/__init__.py +3 -4
- esphome/components/ld2450/binary_sensor.py +3 -0
- esphome/components/ld2450/ld2450.cpp +77 -165
- esphome/components/ld2450/ld2450.h +26 -54
- esphome/components/ld2450/sensor.py +120 -6
- esphome/components/ld2450/text_sensor.py +5 -4
- esphome/components/ld24xx/__init__.py +1 -0
- esphome/components/ld24xx/ld24xx.h +65 -0
- esphome/components/ledc/ledc_output.cpp +0 -1
- esphome/components/libretiny/__init__.py +2 -0
- esphome/components/light/__init__.py +0 -1
- esphome/components/light/effects.py +70 -45
- esphome/components/light/light_call.cpp +101 -66
- esphome/components/light/light_color_values.h +16 -11
- esphome/components/light/light_json_schema.cpp +46 -44
- esphome/components/light/light_state.cpp +8 -11
- esphome/components/light/light_traits.h +17 -0
- esphome/components/lightwaverf/lightwaverf.cpp +0 -2
- esphome/components/lilygo_t5_47/touchscreen/lilygo_t5_47_touchscreen.cpp +0 -1
- esphome/components/lock/__init__.py +0 -1
- esphome/components/logger/__init__.py +31 -9
- esphome/components/logger/logger.cpp +12 -7
- esphome/components/logger/logger.h +25 -14
- esphome/components/logger/logger_esp32.cpp +2 -7
- esphome/components/logger/logger_esp8266.cpp +2 -4
- esphome/components/logger/logger_host.cpp +2 -4
- esphome/components/logger/logger_libretiny.cpp +2 -4
- esphome/components/logger/logger_rp2040.cpp +2 -4
- esphome/components/logger/logger_zephyr.cpp +86 -0
- esphome/components/logger/select/logger_level_select.cpp +2 -4
- esphome/components/logger/select/logger_level_select.h +2 -4
- esphome/components/logger/task_log_buffer.cpp +2 -4
- esphome/components/logger/task_log_buffer.h +2 -4
- esphome/components/lps22/sensor.py +5 -5
- esphome/components/ltr390/ltr390.cpp +0 -2
- esphome/components/ltr501/ltr501.cpp +0 -1
- esphome/components/ltr_als_ps/ltr_als_ps.cpp +0 -1
- esphome/components/lvgl/__init__.py +14 -13
- esphome/components/lvgl/automation.py +2 -4
- esphome/components/lvgl/defines.py +0 -2
- esphome/components/lvgl/helpers.py +1 -1
- esphome/components/lvgl/lv_validation.py +7 -4
- esphome/components/lvgl/lvgl_esphome.cpp +2 -3
- esphome/components/lvgl/styles.py +2 -2
- esphome/components/lvgl/types.py +1 -1
- esphome/components/lvgl/widgets/__init__.py +2 -2
- esphome/components/lvgl/widgets/arc.py +14 -11
- esphome/components/lvgl/widgets/buttonmatrix.py +1 -1
- esphome/components/lvgl/widgets/qrcode.py +7 -7
- esphome/components/lvgl/widgets/spinner.py +6 -6
- esphome/components/lvgl/widgets/switch.py +2 -2
- esphome/components/lvgl/widgets/tabview.py +3 -3
- esphome/components/m5stack_8angle/m5stack_8angle.cpp +0 -1
- esphome/components/matrix_keypad/__init__.py +4 -3
- esphome/components/max17043/max17043.cpp +0 -2
- esphome/components/max31855/max31855.cpp +1 -4
- esphome/components/max31856/max31856.cpp +0 -4
- esphome/components/max31865/max31865.cpp +0 -1
- esphome/components/max44009/max44009.cpp +0 -1
- esphome/components/max6675/max6675.cpp +1 -4
- esphome/components/max6956/max6956.cpp +0 -1
- esphome/components/max7219/max7219.cpp +0 -1
- esphome/components/max7219digit/display.py +1 -1
- esphome/components/max7219digit/max7219digit.cpp +0 -1
- esphome/components/max9611/max9611.cpp +0 -1
- esphome/components/mcp23008/__init__.py +1 -1
- esphome/components/mcp23008/mcp23008.cpp +0 -1
- esphome/components/mcp23016/mcp23016.cpp +0 -1
- esphome/components/mcp23017/__init__.py +1 -1
- esphome/components/mcp23017/mcp23017.cpp +0 -1
- esphome/components/mcp23s08/__init__.py +1 -1
- esphome/components/mcp23s08/mcp23s08.cpp +0 -1
- esphome/components/mcp23s17/__init__.py +1 -1
- esphome/components/mcp23s17/mcp23s17.cpp +0 -1
- esphome/components/mcp23x08_base/__init__.py +2 -0
- esphome/components/mcp23x08_base/mcp23x08_base.cpp +9 -7
- esphome/components/mcp23x08_base/mcp23x08_base.h +9 -4
- esphome/components/mcp23x17_base/__init__.py +2 -0
- esphome/components/mcp23x17_base/mcp23x17_base.cpp +20 -7
- esphome/components/mcp23x17_base/mcp23x17_base.h +9 -4
- esphome/components/mcp23xxx_base/__init__.py +11 -5
- esphome/components/mcp23xxx_base/mcp23xxx_base.cpp +15 -12
- esphome/components/mcp23xxx_base/mcp23xxx_base.h +8 -7
- esphome/components/mcp3008/mcp3008.cpp +1 -4
- esphome/components/mcp3204/mcp3204.cpp +1 -4
- esphome/components/mcp4461/mcp4461.cpp +0 -1
- esphome/components/mcp4725/mcp4725.cpp +0 -1
- esphome/components/mcp4728/mcp4728.cpp +0 -1
- esphome/components/mcp9600/mcp9600.cpp +0 -2
- esphome/components/mcp9808/mcp9808.cpp +0 -2
- esphome/components/mdns/__init__.py +3 -0
- esphome/components/mdns/mdns_component.cpp +2 -0
- esphome/components/mdns/mdns_component.h +4 -0
- esphome/components/media_player/__init__.py +40 -0
- esphome/components/media_player/automation.h +16 -0
- esphome/components/media_player/media_player.cpp +13 -0
- esphome/components/media_player/media_player.h +50 -3
- esphome/components/micro_wake_word/micro_wake_word.cpp +0 -3
- esphome/components/mics_4514/mics_4514.cpp +1 -6
- esphome/components/midea/ir_transmitter.h +4 -4
- esphome/components/mipi/__init__.py +416 -0
- esphome/components/mipi_dsi/__init__.py +5 -0
- esphome/components/mipi_dsi/display.py +233 -0
- esphome/components/mipi_dsi/mipi_dsi.cpp +379 -0
- esphome/components/mipi_dsi/mipi_dsi.h +123 -0
- esphome/components/mipi_dsi/models/__init__.py +0 -0
- esphome/components/mipi_dsi/models/guition.py +38 -0
- esphome/components/mipi_dsi/models/m5stack.py +57 -0
- esphome/components/mipi_dsi/models/waveshare.py +105 -0
- esphome/components/mipi_rgb/models/lilygo.py +0 -0
- esphome/components/mipi_spi/__init__.py +0 -9
- esphome/components/mipi_spi/display.py +220 -256
- esphome/components/mipi_spi/mipi_spi.cpp +1 -485
- esphome/components/mipi_spi/mipi_spi.h +556 -108
- esphome/components/mipi_spi/models/__init__.py +0 -65
- esphome/components/mipi_spi/models/adafruit.py +30 -0
- esphome/components/mipi_spi/models/amoled.py +41 -5
- esphome/components/mipi_spi/models/ili.py +5 -5
- esphome/components/mipi_spi/models/jc.py +1 -3
- esphome/components/mipi_spi/models/lilygo.py +1 -1
- esphome/components/mipi_spi/models/waveshare.py +16 -1
- esphome/components/mixer/speaker/__init__.py +4 -5
- esphome/components/mlx90393/sensor.py +7 -5
- esphome/components/mlx90393/sensor_mlx90393.cpp +0 -1
- esphome/components/mlx90614/mlx90614.cpp +0 -1
- esphome/components/mmc5603/mmc5603.cpp +0 -1
- esphome/components/mmc5983/mmc5983.cpp +0 -2
- esphome/components/mpl3115a2/mpl3115a2.cpp +0 -2
- esphome/components/mpr121/__init__.py +7 -6
- esphome/components/mpr121/mpr121.cpp +0 -1
- esphome/components/mpu6050/mpu6050.cpp +0 -1
- esphome/components/mpu6886/mpu6886.cpp +0 -1
- esphome/components/mqtt/__init__.py +1 -2
- esphome/components/mqtt/mqtt_button.cpp +1 -1
- esphome/components/mqtt/mqtt_client.cpp +0 -1
- esphome/components/mqtt/mqtt_component.cpp +8 -14
- esphome/components/mqtt/mqtt_component.h +0 -7
- esphome/components/mqtt/mqtt_sensor.cpp +0 -1
- esphome/components/mqtt/mqtt_sensor.h +0 -1
- esphome/components/mqtt/mqtt_text_sensor.cpp +0 -1
- esphome/components/mqtt/mqtt_text_sensor.h +0 -1
- esphome/components/ms5611/ms5611.cpp +0 -1
- esphome/components/ms8607/ms8607.cpp +0 -1
- esphome/components/msa3xx/msa3xx.cpp +0 -2
- esphome/components/my9231/my9231.cpp +0 -2
- esphome/components/nau7802/nau7802.cpp +0 -1
- esphome/components/neopixelbus/light.py +3 -0
- esphome/components/network/util.cpp +29 -0
- esphome/components/nextion/nextion.cpp +0 -1
- esphome/components/nfc/binary_sensor/{binary_sensor.cpp → nfc_binary_sensor.cpp} +1 -1
- esphome/components/npi19/npi19.cpp +0 -2
- esphome/components/nrf52/__init__.py +223 -0
- esphome/components/nrf52/boards.py +34 -0
- esphome/components/nrf52/const.py +18 -0
- esphome/components/nrf52/gpio.py +79 -0
- esphome/components/number/__init__.py +2 -1
- esphome/components/one_wire/__init__.py +1 -2
- esphome/components/one_wire/one_wire.cpp +0 -2
- esphome/components/one_wire/one_wire.h +0 -2
- esphome/components/opentherm/hub.cpp +0 -1
- esphome/components/opentherm/number/__init__.py +2 -2
- esphome/components/openthread/__init__.py +2 -3
- esphome/components/openthread/openthread.cpp +30 -13
- esphome/components/openthread/openthread.h +3 -0
- esphome/components/openthread/openthread_esp.cpp +3 -1
- esphome/components/opt3001/sensor.py +2 -6
- esphome/components/output/__init__.py +38 -0
- esphome/components/output/automation.h +24 -0
- esphome/components/output/switch/output_switch.cpp +0 -2
- esphome/components/packages/__init__.py +1 -2
- esphome/components/packet_transport/__init__.py +4 -3
- esphome/components/pca6416a/pca6416a.cpp +0 -1
- esphome/components/pca9554/pca9554.cpp +0 -1
- esphome/components/pca9685/pca9685_output.cpp +0 -2
- esphome/components/pcf85063/pcf85063.cpp +0 -1
- esphome/components/pcf8563/pcf8563.cpp +0 -1
- esphome/components/pcf8574/pcf8574.cpp +0 -1
- esphome/components/pi4ioe5v6408/pi4ioe5v6408.cpp +0 -1
- esphome/components/pipsolar/sensor/__init__.py +1 -1
- esphome/components/pm2005/pm2005.cpp +0 -1
- esphome/components/pmsa003i/pmsa003i.cpp +0 -2
- esphome/components/pmwcs3/sensor.py +1 -2
- esphome/components/pn532/pn532.cpp +0 -2
- esphome/components/pn532_spi/pn532_spi.cpp +0 -2
- esphome/components/power_supply/power_supply.cpp +7 -10
- esphome/components/power_supply/power_supply.h +1 -1
- esphome/components/psram/__init__.py +2 -1
- esphome/components/pulse_counter/pulse_counter_sensor.cpp +0 -1
- esphome/components/pulse_counter/sensor.py +9 -6
- esphome/components/pylontech/pylontech.cpp +0 -1
- esphome/components/qmc5883l/qmc5883l.cpp +0 -1
- esphome/components/qmp6988/qmp6988.cpp +0 -2
- esphome/components/qspi_dbi/display.py +2 -3
- esphome/components/qspi_dbi/qspi_dbi.cpp +0 -2
- esphome/components/qwiic_pir/binary_sensor.py +2 -3
- esphome/components/qwiic_pir/qwiic_pir.cpp +0 -2
- esphome/components/rc522/rc522.cpp +9 -31
- esphome/components/rc522_spi/rc522_spi.cpp +0 -1
- esphome/components/remote_base/__init__.py +5 -6
- esphome/components/remote_receiver/remote_receiver_esp32.cpp +0 -1
- esphome/components/remote_receiver/remote_receiver_esp8266.cpp +0 -1
- esphome/components/remote_receiver/remote_receiver_libretiny.cpp +0 -1
- esphome/components/remote_transmitter/__init__.py +26 -0
- esphome/components/remote_transmitter/automation.h +18 -0
- esphome/components/remote_transmitter/remote_transmitter.h +2 -1
- esphome/components/remote_transmitter/remote_transmitter_esp32.cpp +0 -1
- esphome/components/remote_transmitter/remote_transmitter_esp8266.cpp +2 -0
- esphome/components/remote_transmitter/remote_transmitter_libretiny.cpp +2 -0
- esphome/components/resampler/speaker/__init__.py +4 -5
- esphome/components/rf_bridge/__init__.py +4 -8
- esphome/components/rotary_encoder/rotary_encoder.cpp +0 -2
- esphome/components/rp2040/__init__.py +3 -1
- esphome/components/rp2040_pio_led_strip/led_strip.cpp +0 -2
- esphome/components/rp2040_pio_led_strip/light.py +1 -2
- esphome/components/rp2040_pwm/rp2040_pwm.cpp +1 -5
- esphome/components/rpi_dpi_rgb/display.py +13 -15
- esphome/components/rpi_dpi_rgb/rpi_dpi_rgb.cpp +0 -3
- esphome/components/runtime_stats/__init__.py +34 -0
- esphome/components/runtime_stats/runtime_stats.cpp +102 -0
- esphome/components/runtime_stats/runtime_stats.h +132 -0
- esphome/components/scd30/scd30.cpp +0 -2
- esphome/components/scd30/sensor.py +1 -2
- esphome/components/scd4x/scd4x.cpp +0 -1
- esphome/components/scd4x/sensor.py +1 -3
- esphome/components/sdl/display.py +3 -1
- esphome/components/sdl/sdl_esphome.cpp +0 -2
- esphome/components/sdp3x/sdp3x.cpp +0 -2
- esphome/components/seeed_mr24hpc1/seeed_mr24hpc1.cpp +0 -2
- esphome/components/seeed_mr60fda2/seeed_mr60fda2.cpp +0 -3
- esphome/components/select/__init__.py +2 -3
- esphome/components/select/select_traits.cpp +1 -1
- esphome/components/select/select_traits.h +1 -1
- esphome/components/sen0321/sen0321.cpp +0 -1
- esphome/components/sen5x/sen5x.cpp +0 -2
- esphome/components/sensor/__init__.py +36 -4
- esphome/components/sensor/filter.cpp +49 -10
- esphome/components/sensor/filter.h +22 -7
- esphome/components/sensor/sensor.cpp +0 -1
- esphome/components/sensor/sensor.h +0 -9
- esphome/components/sfa30/sfa30.cpp +0 -4
- esphome/components/sgp30/sgp30.cpp +0 -2
- esphome/components/sgp4x/sensor.py +1 -1
- esphome/components/sgp4x/sgp4x.cpp +0 -2
- esphome/components/shelly_dimmer/shelly_dimmer.cpp +0 -2
- esphome/components/sht3xd/sht3xd.cpp +0 -2
- esphome/components/sht4x/sht4x.cpp +0 -2
- esphome/components/shtcx/shtcx.cpp +0 -1
- esphome/components/sim800l/__init__.py +2 -4
- esphome/components/sm16716/sm16716.cpp +0 -1
- esphome/components/sm2135/sm2135.cpp +0 -1
- esphome/components/sm2235/sm2235.cpp +0 -1
- esphome/components/sm2335/sm2335.cpp +0 -1
- esphome/components/sn74hc165/sn74hc165.cpp +0 -1
- esphome/components/sn74hc595/sn74hc595.cpp +0 -1
- esphome/components/sntp/sntp_component.cpp +0 -1
- esphome/components/sound_level/sensor.py +1 -1
- esphome/components/speaker/media_player/__init__.py +21 -33
- esphome/components/speaker/media_player/audio_pipeline.cpp +4 -7
- esphome/components/spi/__init__.py +29 -13
- esphome/components/spi/spi.cpp +0 -2
- esphome/components/spi_device/spi_device.cpp +1 -4
- esphome/components/sprinkler/__init__.py +4 -4
- esphome/components/sps30/sps30.cpp +0 -1
- esphome/components/ssd1306_base/__init__.py +11 -11
- esphome/components/ssd1306_base/ssd1306_base.cpp +1 -1
- esphome/components/ssd1306_i2c/ssd1306_i2c.cpp +0 -1
- esphome/components/ssd1306_spi/ssd1306_spi.cpp +0 -1
- esphome/components/ssd1322_spi/ssd1322_spi.cpp +0 -1
- esphome/components/ssd1325_spi/ssd1325_spi.cpp +0 -1
- esphome/components/ssd1327_i2c/ssd1327_i2c.cpp +0 -1
- esphome/components/ssd1327_spi/ssd1327_spi.cpp +0 -1
- esphome/components/ssd1331_spi/ssd1331_spi.cpp +0 -1
- esphome/components/ssd1351_spi/ssd1351_spi.cpp +0 -1
- esphome/components/st7567_i2c/st7567_i2c.cpp +0 -1
- esphome/components/st7567_spi/st7567_spi.cpp +0 -1
- esphome/components/st7701s/display.py +10 -14
- esphome/components/st7701s/st7701s.cpp +0 -3
- esphome/components/st7735/st7735.cpp +0 -1
- esphome/components/st7789v/st7789v.cpp +0 -1
- esphome/components/st7920/st7920.cpp +0 -1
- esphome/components/status_led/light/status_led_light.cpp +0 -2
- esphome/components/status_led/status_led.cpp +0 -1
- esphome/components/stepper/__init__.py +2 -4
- esphome/components/sts3x/sts3x.cpp +0 -1
- esphome/components/substitutions/__init__.py +10 -16
- esphome/components/substitutions/jinja.py +24 -1
- esphome/components/sun/__init__.py +2 -3
- esphome/components/switch/__init__.py +31 -1
- esphome/components/switch/automation.h +24 -0
- esphome/components/switch/switch.cpp +8 -0
- esphome/components/switch/switch.h +8 -0
- esphome/components/sx126x/sx126x.cpp +0 -2
- esphome/components/sx127x/sx127x.cpp +0 -2
- esphome/components/sx1509/__init__.py +7 -5
- esphome/components/sx1509/output/sx1509_float_output.cpp +1 -1
- esphome/components/sx1509/sx1509.cpp +0 -2
- esphome/components/syslog/esphome_syslog.cpp +1 -1
- esphome/components/tc74/tc74.cpp +0 -1
- esphome/components/tca9548a/tca9548a.cpp +0 -1
- esphome/components/tca9555/tca9555.cpp +0 -1
- esphome/components/tcs34725/tcs34725.cpp +0 -1
- esphome/components/tee501/tee501.cpp +0 -1
- esphome/components/tem3200/tem3200.cpp +0 -2
- esphome/components/template/alarm_control_panel/template_alarm_control_panel.cpp +0 -1
- esphome/components/template/cover/template_cover.cpp +0 -1
- esphome/components/template/select/template_select.cpp +0 -1
- esphome/components/template/text/template_text.cpp +0 -2
- esphome/components/template/valve/template_valve.cpp +0 -1
- esphome/components/text/__init__.py +0 -1
- esphome/components/text/text_traits.h +2 -0
- esphome/components/text_sensor/__init__.py +2 -1
- esphome/components/text_sensor/text_sensor.cpp +0 -2
- esphome/components/text_sensor/text_sensor.h +0 -8
- esphome/components/thermostat/climate.py +4 -4
- esphome/components/time/__init__.py +7 -4
- esphome/components/time/real_time_clock.cpp +16 -3
- esphome/components/tlc59208f/tlc59208f_output.cpp +0 -2
- esphome/components/tlc5947/tlc5947.cpp +0 -2
- esphome/components/tlc5971/tlc5971.cpp +0 -2
- esphome/components/tm1621/tm1621.cpp +0 -2
- esphome/components/tm1637/tm1637.cpp +0 -2
- esphome/components/tm1638/tm1638.cpp +0 -2
- esphome/components/tm1651/__init__.py +45 -48
- esphome/components/tm1651/tm1651.cpp +213 -47
- esphome/components/tm1651/tm1651.h +37 -32
- esphome/components/tmp117/tmp117.cpp +0 -2
- esphome/components/tsl2561/tsl2561.cpp +0 -1
- esphome/components/tsl2591/tsl2591.cpp +0 -1
- esphome/components/tt21100/touchscreen/tt21100.cpp +0 -2
- esphome/components/ttp229_bsf/ttp229_bsf.cpp +0 -1
- esphome/components/ttp229_lsf/ttp229_lsf.cpp +0 -1
- esphome/components/tuya/climate/__init__.py +9 -10
- esphome/components/tuya/number/__init__.py +8 -6
- esphome/components/tx20/tx20.cpp +0 -1
- esphome/components/uart/uart_component_esp32_arduino.cpp +0 -1
- esphome/components/uart/uart_component_esp8266.cpp +0 -1
- esphome/components/uart/uart_component_esp_idf.cpp +0 -2
- esphome/components/uart/uart_component_libretiny.cpp +0 -2
- esphome/components/uart/uart_component_rp2040.cpp +0 -2
- esphome/components/udp/__init__.py +1 -1
- esphome/components/ufire_ec/sensor.py +1 -2
- esphome/components/ufire_ec/ufire_ec.cpp +0 -2
- esphome/components/ufire_ise/sensor.py +1 -2
- esphome/components/ufire_ise/ufire_ise.cpp +0 -2
- esphome/components/ultrasonic/ultrasonic_sensor.cpp +0 -1
- esphome/components/update/__init__.py +0 -1
- esphome/components/uptime/sensor/uptime_seconds_sensor.cpp +0 -1
- esphome/components/uptime/sensor/uptime_seconds_sensor.h +0 -2
- esphome/components/usb_host/usb_host_client.cpp +0 -1
- esphome/components/usb_host/usb_host_component.cpp +0 -1
- esphome/components/valve/__init__.py +0 -1
- esphome/components/veml3235/veml3235.cpp +0 -3
- esphome/components/veml7700/veml7700.cpp +0 -2
- esphome/components/version/version_text_sensor.cpp +0 -1
- esphome/components/version/version_text_sensor.h +0 -1
- esphome/components/vl53l0x/vl53l0x_sensor.cpp +0 -4
- esphome/components/voice_assistant/voice_assistant.cpp +9 -8
- esphome/components/web_server/__init__.py +13 -0
- esphome/components/web_server/web_server.cpp +187 -352
- esphome/components/web_server/web_server.h +61 -1
- esphome/components/web_server_base/__init__.py +1 -1
- esphome/components/web_server_base/web_server_base.cpp +2 -0
- esphome/components/web_server_base/web_server_base.h +6 -0
- esphome/components/web_server_idf/web_server_idf.cpp +10 -8
- esphome/components/web_server_idf/web_server_idf.h +2 -0
- esphome/components/weikai_i2c/weikai_i2c.cpp +1 -2
- esphome/components/weikai_spi/weikai_spi.cpp +1 -1
- esphome/components/wifi/__init__.py +8 -43
- esphome/components/wifi/wifi_component.cpp +100 -36
- esphome/components/wifi/wifi_component.h +5 -1
- esphome/components/wifi/wifi_component_esp32_arduino.cpp +30 -0
- esphome/components/wifi/wifi_component_esp_idf.cpp +30 -0
- esphome/components/wifi_info/wifi_info_text_sensor.h +0 -6
- esphome/components/wifi_signal/wifi_signal_sensor.h +0 -1
- esphome/components/wireguard/wireguard.cpp +0 -2
- esphome/components/x9c/x9c.cpp +0 -2
- esphome/components/xgzp68xx/xgzp68xx.cpp +0 -1
- esphome/components/xl9535/xl9535.cpp +0 -2
- esphome/components/zephyr/__init__.py +252 -0
- esphome/components/zephyr/const.py +16 -0
- esphome/components/zephyr/core.cpp +90 -0
- esphome/components/zephyr/gpio.cpp +120 -0
- esphome/components/zephyr/gpio.h +38 -0
- esphome/components/zephyr/pre_build.py.script +4 -0
- esphome/components/zephyr/preferences.cpp +156 -0
- esphome/components/zephyr/preferences.h +13 -0
- esphome/config.py +38 -16
- esphome/config_helpers.py +1 -2
- esphome/config_validation.py +8 -15
- esphome/const.py +26 -1
- esphome/core/__init__.py +88 -51
- esphome/core/application.cpp +75 -21
- esphome/core/application.h +106 -171
- esphome/core/color.h +10 -0
- esphome/core/component.cpp +41 -25
- esphome/core/component.h +9 -6
- esphome/core/component_iterator.cpp +61 -261
- esphome/core/component_iterator.h +15 -0
- esphome/core/config.py +26 -11
- esphome/core/defines.h +40 -2
- esphome/core/entity_base.h +18 -0
- esphome/core/entity_helpers.py +41 -6
- esphome/core/helpers.cpp +8 -15
- esphome/core/helpers.h +60 -6
- esphome/core/lock_free_queue.h +1 -1
- esphome/core/scheduler.cpp +277 -74
- esphome/core/scheduler.h +89 -27
- esphome/cpp_generator.py +2 -6
- esphome/cpp_helpers.py +1 -1
- esphome/dashboard/dashboard.py +2 -3
- esphome/dashboard/dns.py +2 -8
- esphome/dashboard/web_server.py +34 -19
- esphome/espota2.py +1 -4
- esphome/git.py +3 -1
- esphome/helpers.py +23 -4
- esphome/log.py +3 -1
- esphome/mqtt.py +3 -5
- esphome/platformio_api.py +7 -4
- esphome/types.py +12 -0
- esphome/util.py +20 -8
- esphome/voluptuous_schema.py +4 -3
- esphome/vscode.py +1 -2
- esphome/wizard.py +1 -4
- esphome/writer.py +5 -107
- esphome/yaml_util.py +7 -5
- {esphome-2025.7.5.dist-info → esphome-2025.8.0b1.dist-info}/METADATA +12 -13
- {esphome-2025.7.5.dist-info → esphome-2025.8.0b1.dist-info}/RECORD +751 -671
- esphome/components/mipi_spi/models/commands.py +0 -82
- /esphome/components/nfc/binary_sensor/{binary_sensor.h → nfc_binary_sensor.h} +0 -0
- {esphome-2025.7.5.dist-info → esphome-2025.8.0b1.dist-info}/WHEEL +0 -0
- {esphome-2025.7.5.dist-info → esphome-2025.8.0b1.dist-info}/entry_points.txt +0 -0
- {esphome-2025.7.5.dist-info → esphome-2025.8.0b1.dist-info}/licenses/LICENSE +0 -0
- {esphome-2025.7.5.dist-info → esphome-2025.8.0b1.dist-info}/top_level.txt +0 -0
|
@@ -17,8 +17,6 @@ static const char *const TAG = "es8156";
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
void ES8156::setup() {
|
|
20
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
21
|
-
|
|
22
20
|
ES8156_ERROR_FAILED(this->write_byte(ES8156_REG02_SCLK_MODE, 0x04));
|
|
23
21
|
ES8156_ERROR_FAILED(this->write_byte(ES8156_REG20_ANALOG_SYS1, 0x2A));
|
|
24
22
|
ES8156_ERROR_FAILED(this->write_byte(ES8156_REG21_ANALOG_SYS2, 0x3C));
|
|
@@ -22,8 +22,6 @@ static const char *const TAG = "es8311";
|
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
void ES8311::setup() {
|
|
25
|
-
ESP_LOGCONFIG(TAG, "Running setup");
|
|
26
|
-
|
|
27
25
|
// Reset
|
|
28
26
|
ES8311_ERROR_FAILED(this->write_byte(ES8311_REG00_RESET, 0x1F));
|
|
29
27
|
ES8311_ERROR_FAILED(this->write_byte(ES8311_REG00_RESET, 0x00));
|
|
@@ -15,6 +15,7 @@ from esphome.const import (
|
|
|
15
15
|
CONF_FRAMEWORK,
|
|
16
16
|
CONF_IGNORE_EFUSE_CUSTOM_MAC,
|
|
17
17
|
CONF_IGNORE_EFUSE_MAC_CRC,
|
|
18
|
+
CONF_LOG_LEVEL,
|
|
18
19
|
CONF_NAME,
|
|
19
20
|
CONF_PATH,
|
|
20
21
|
CONF_PLATFORM_VERSION,
|
|
@@ -31,6 +32,7 @@ from esphome.const import (
|
|
|
31
32
|
KEY_TARGET_FRAMEWORK,
|
|
32
33
|
KEY_TARGET_PLATFORM,
|
|
33
34
|
PLATFORM_ESP32,
|
|
35
|
+
ThreadModel,
|
|
34
36
|
__version__,
|
|
35
37
|
)
|
|
36
38
|
from esphome.core import CORE, HexInt, TimePeriod
|
|
@@ -39,7 +41,7 @@ import esphome.final_validate as fv
|
|
|
39
41
|
from esphome.helpers import copy_file_if_changed, mkdir_p, write_file_if_changed
|
|
40
42
|
from esphome.types import ConfigType
|
|
41
43
|
|
|
42
|
-
from .boards import BOARDS
|
|
44
|
+
from .boards import BOARDS, STANDARD_BOARDS
|
|
43
45
|
from .const import ( # noqa
|
|
44
46
|
KEY_BOARD,
|
|
45
47
|
KEY_COMPONENTS,
|
|
@@ -75,8 +77,18 @@ CONF_ASSERTION_LEVEL = "assertion_level"
|
|
|
75
77
|
CONF_COMPILER_OPTIMIZATION = "compiler_optimization"
|
|
76
78
|
CONF_ENABLE_IDF_EXPERIMENTAL_FEATURES = "enable_idf_experimental_features"
|
|
77
79
|
CONF_ENABLE_LWIP_ASSERT = "enable_lwip_assert"
|
|
80
|
+
CONF_EXECUTE_FROM_PSRAM = "execute_from_psram"
|
|
78
81
|
CONF_RELEASE = "release"
|
|
79
82
|
|
|
83
|
+
LOG_LEVELS_IDF = [
|
|
84
|
+
"NONE",
|
|
85
|
+
"ERROR",
|
|
86
|
+
"WARN",
|
|
87
|
+
"INFO",
|
|
88
|
+
"DEBUG",
|
|
89
|
+
"VERBOSE",
|
|
90
|
+
]
|
|
91
|
+
|
|
80
92
|
ASSERTION_LEVELS = {
|
|
81
93
|
"DISABLE": "CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_DISABLE",
|
|
82
94
|
"ENABLE": "CONFIG_COMPILER_OPTIMIZATION_ASSERTIONS_ENABLE",
|
|
@@ -309,19 +321,19 @@ def _format_framework_espidf_version(
|
|
|
309
321
|
|
|
310
322
|
# The default/recommended arduino framework version
|
|
311
323
|
# - https://github.com/espressif/arduino-esp32/releases
|
|
312
|
-
RECOMMENDED_ARDUINO_FRAMEWORK_VERSION = cv.Version(3,
|
|
324
|
+
RECOMMENDED_ARDUINO_FRAMEWORK_VERSION = cv.Version(3, 2, 1)
|
|
313
325
|
# The platform-espressif32 version to use for arduino frameworks
|
|
314
326
|
# - https://github.com/pioarduino/platform-espressif32/releases
|
|
315
|
-
ARDUINO_PLATFORM_VERSION = cv.Version(
|
|
327
|
+
ARDUINO_PLATFORM_VERSION = cv.Version(54, 3, 21, "2")
|
|
316
328
|
|
|
317
329
|
# The default/recommended esp-idf framework version
|
|
318
330
|
# - https://github.com/espressif/esp-idf/releases
|
|
319
331
|
# - https://api.registry.platformio.org/v3/packages/platformio/tool/framework-espidf
|
|
320
|
-
RECOMMENDED_ESP_IDF_FRAMEWORK_VERSION = cv.Version(5,
|
|
332
|
+
RECOMMENDED_ESP_IDF_FRAMEWORK_VERSION = cv.Version(5, 4, 2)
|
|
321
333
|
# The platformio/espressif32 version to use for esp-idf frameworks
|
|
322
334
|
# - https://github.com/platformio/platform-espressif32/releases
|
|
323
335
|
# - https://api.registry.platformio.org/v3/packages/platformio/platform/espressif32
|
|
324
|
-
ESP_IDF_PLATFORM_VERSION = cv.Version(
|
|
336
|
+
ESP_IDF_PLATFORM_VERSION = cv.Version(54, 3, 21, "2")
|
|
325
337
|
|
|
326
338
|
# List based on https://registry.platformio.org/tools/platformio/framework-espidf/versions
|
|
327
339
|
SUPPORTED_PLATFORMIO_ESP_IDF_5X = [
|
|
@@ -356,8 +368,8 @@ SUPPORTED_PIOARDUINO_ESP_IDF_5X = [
|
|
|
356
368
|
def _arduino_check_versions(value):
|
|
357
369
|
value = value.copy()
|
|
358
370
|
lookups = {
|
|
359
|
-
"dev": (cv.Version(3,
|
|
360
|
-
"latest": (cv.Version(3,
|
|
371
|
+
"dev": (cv.Version(3, 2, 1), "https://github.com/espressif/arduino-esp32.git"),
|
|
372
|
+
"latest": (cv.Version(3, 2, 1), None),
|
|
361
373
|
"recommended": (RECOMMENDED_ARDUINO_FRAMEWORK_VERSION, None),
|
|
362
374
|
}
|
|
363
375
|
|
|
@@ -395,8 +407,8 @@ def _arduino_check_versions(value):
|
|
|
395
407
|
def _esp_idf_check_versions(value):
|
|
396
408
|
value = value.copy()
|
|
397
409
|
lookups = {
|
|
398
|
-
"dev": (cv.Version(5,
|
|
399
|
-
"latest": (cv.Version(5,
|
|
410
|
+
"dev": (cv.Version(5, 4, 2), "https://github.com/espressif/esp-idf.git"),
|
|
411
|
+
"latest": (cv.Version(5, 2, 2), None),
|
|
400
412
|
"recommended": (RECOMMENDED_ESP_IDF_FRAMEWORK_VERSION, None),
|
|
401
413
|
}
|
|
402
414
|
|
|
@@ -467,10 +479,10 @@ def _parse_platform_version(value):
|
|
|
467
479
|
try:
|
|
468
480
|
ver = cv.Version.parse(cv.version_number(value))
|
|
469
481
|
if ver.major >= 50: # a pioarduino version
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
return f"https://github.com/pioarduino/platform-espressif32/releases/download/{
|
|
482
|
+
release = f"{ver.major}.{ver.minor:02d}.{ver.patch:02d}"
|
|
483
|
+
if ver.extra:
|
|
484
|
+
release += f"-{ver.extra}"
|
|
485
|
+
return f"https://github.com/pioarduino/platform-espressif32/releases/download/{release}/platform-espressif32.zip"
|
|
474
486
|
# if platform version is a valid version constraint, prefix the default package
|
|
475
487
|
cv.platformio_version_constraint(value)
|
|
476
488
|
return f"platformio/espressif32@{value}"
|
|
@@ -487,56 +499,90 @@ def _platform_is_platformio(value):
|
|
|
487
499
|
|
|
488
500
|
|
|
489
501
|
def _detect_variant(value):
|
|
490
|
-
board = value
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
502
|
+
board = value.get(CONF_BOARD)
|
|
503
|
+
variant = value.get(CONF_VARIANT)
|
|
504
|
+
if variant and board is None:
|
|
505
|
+
# If variant is set, we can derive the board from it
|
|
506
|
+
# variant has already been validated against the known set
|
|
507
|
+
value = value.copy()
|
|
508
|
+
value[CONF_BOARD] = STANDARD_BOARDS[variant]
|
|
509
|
+
elif board in BOARDS:
|
|
510
|
+
variant = variant or BOARDS[board][KEY_VARIANT]
|
|
511
|
+
if variant != BOARDS[board][KEY_VARIANT]:
|
|
494
512
|
raise cv.Invalid(
|
|
495
513
|
f"Option '{CONF_VARIANT}' does not match selected board.",
|
|
496
514
|
path=[CONF_VARIANT],
|
|
497
515
|
)
|
|
498
516
|
value = value.copy()
|
|
499
517
|
value[CONF_VARIANT] = variant
|
|
518
|
+
elif not variant:
|
|
519
|
+
raise cv.Invalid(
|
|
520
|
+
"This board is unknown, if you are sure you want to compile with this board selection, "
|
|
521
|
+
f"override with option '{CONF_VARIANT}'",
|
|
522
|
+
path=[CONF_BOARD],
|
|
523
|
+
)
|
|
500
524
|
else:
|
|
501
|
-
if CONF_VARIANT not in value:
|
|
502
|
-
raise cv.Invalid(
|
|
503
|
-
"This board is unknown, if you are sure you want to compile with this board selection, "
|
|
504
|
-
f"override with option '{CONF_VARIANT}'",
|
|
505
|
-
path=[CONF_BOARD],
|
|
506
|
-
)
|
|
507
525
|
_LOGGER.warning(
|
|
508
|
-
"This board is unknown
|
|
526
|
+
"This board is unknown; the specified variant '%s' will be used but this may not work as expected.",
|
|
527
|
+
variant,
|
|
509
528
|
)
|
|
510
529
|
return value
|
|
511
530
|
|
|
512
531
|
|
|
513
532
|
def final_validate(config):
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
533
|
+
# Imported locally to avoid circular import issues
|
|
534
|
+
from esphome.components.psram import DOMAIN as PSRAM_DOMAIN
|
|
535
|
+
|
|
536
|
+
errs = []
|
|
537
|
+
full_config = fv.full_config.get()
|
|
538
|
+
if pio_options := full_config[CONF_ESPHOME].get(CONF_PLATFORMIO_OPTIONS):
|
|
539
|
+
pio_flash_size_key = "board_upload.flash_size"
|
|
540
|
+
pio_partitions_key = "board_build.partitions"
|
|
541
|
+
if CONF_PARTITIONS in config and pio_partitions_key in pio_options:
|
|
542
|
+
errs.append(
|
|
543
|
+
cv.Invalid(
|
|
544
|
+
f"Do not specify '{pio_partitions_key}' in '{CONF_PLATFORMIO_OPTIONS}' with '{CONF_PARTITIONS}' in esp32"
|
|
545
|
+
)
|
|
546
|
+
)
|
|
547
|
+
if pio_flash_size_key in pio_options:
|
|
548
|
+
errs.append(
|
|
549
|
+
cv.Invalid(
|
|
550
|
+
f"Please specify {CONF_FLASH_SIZE} within esp32 configuration only"
|
|
551
|
+
)
|
|
552
|
+
)
|
|
532
553
|
if (
|
|
533
554
|
config[CONF_VARIANT] != VARIANT_ESP32
|
|
534
555
|
and CONF_ADVANCED in (conf_fw := config[CONF_FRAMEWORK])
|
|
535
556
|
and CONF_IGNORE_EFUSE_MAC_CRC in conf_fw[CONF_ADVANCED]
|
|
536
557
|
):
|
|
537
|
-
|
|
538
|
-
|
|
558
|
+
errs.append(
|
|
559
|
+
cv.Invalid(
|
|
560
|
+
f"'{CONF_IGNORE_EFUSE_MAC_CRC}' is not supported on {config[CONF_VARIANT]}",
|
|
561
|
+
path=[CONF_FRAMEWORK, CONF_ADVANCED, CONF_IGNORE_EFUSE_MAC_CRC],
|
|
562
|
+
)
|
|
539
563
|
)
|
|
564
|
+
if (
|
|
565
|
+
config.get(CONF_FRAMEWORK, {})
|
|
566
|
+
.get(CONF_ADVANCED, {})
|
|
567
|
+
.get(CONF_EXECUTE_FROM_PSRAM)
|
|
568
|
+
):
|
|
569
|
+
if config[CONF_VARIANT] != VARIANT_ESP32S3:
|
|
570
|
+
errs.append(
|
|
571
|
+
cv.Invalid(
|
|
572
|
+
f"'{CONF_EXECUTE_FROM_PSRAM}' is only supported on {VARIANT_ESP32S3} variant",
|
|
573
|
+
path=[CONF_FRAMEWORK, CONF_ADVANCED, CONF_EXECUTE_FROM_PSRAM],
|
|
574
|
+
)
|
|
575
|
+
)
|
|
576
|
+
if PSRAM_DOMAIN not in full_config:
|
|
577
|
+
errs.append(
|
|
578
|
+
cv.Invalid(
|
|
579
|
+
f"'{CONF_EXECUTE_FROM_PSRAM}' requires PSRAM to be configured",
|
|
580
|
+
path=[CONF_FRAMEWORK, CONF_ADVANCED, CONF_EXECUTE_FROM_PSRAM],
|
|
581
|
+
)
|
|
582
|
+
)
|
|
583
|
+
|
|
584
|
+
if errs:
|
|
585
|
+
raise cv.MultipleInvalid(errs)
|
|
540
586
|
|
|
541
587
|
return config
|
|
542
588
|
|
|
@@ -563,6 +609,8 @@ CONF_SDKCONFIG_OPTIONS = "sdkconfig_options"
|
|
|
563
609
|
CONF_ENABLE_LWIP_DHCP_SERVER = "enable_lwip_dhcp_server"
|
|
564
610
|
CONF_ENABLE_LWIP_MDNS_QUERIES = "enable_lwip_mdns_queries"
|
|
565
611
|
CONF_ENABLE_LWIP_BRIDGE_INTERFACE = "enable_lwip_bridge_interface"
|
|
612
|
+
CONF_ENABLE_LWIP_TCPIP_CORE_LOCKING = "enable_lwip_tcpip_core_locking"
|
|
613
|
+
CONF_ENABLE_LWIP_CHECK_THREAD_SAFETY = "enable_lwip_check_thread_safety"
|
|
566
614
|
|
|
567
615
|
|
|
568
616
|
def _validate_idf_component(config: ConfigType) -> ConfigType:
|
|
@@ -585,6 +633,9 @@ ESP_IDF_FRAMEWORK_SCHEMA = cv.All(
|
|
|
585
633
|
cv.Optional(CONF_SDKCONFIG_OPTIONS, default={}): {
|
|
586
634
|
cv.string_strict: cv.string_strict
|
|
587
635
|
},
|
|
636
|
+
cv.Optional(CONF_LOG_LEVEL, default="ERROR"): cv.one_of(
|
|
637
|
+
*LOG_LEVELS_IDF, upper=True
|
|
638
|
+
),
|
|
588
639
|
cv.Optional(CONF_ADVANCED, default={}): cv.Schema(
|
|
589
640
|
{
|
|
590
641
|
cv.Optional(CONF_ASSERTION_LEVEL): cv.one_of(
|
|
@@ -611,6 +662,13 @@ ESP_IDF_FRAMEWORK_SCHEMA = cv.All(
|
|
|
611
662
|
cv.Optional(
|
|
612
663
|
CONF_ENABLE_LWIP_BRIDGE_INTERFACE, default=False
|
|
613
664
|
): cv.boolean,
|
|
665
|
+
cv.Optional(
|
|
666
|
+
CONF_ENABLE_LWIP_TCPIP_CORE_LOCKING, default=True
|
|
667
|
+
): cv.boolean,
|
|
668
|
+
cv.Optional(
|
|
669
|
+
CONF_ENABLE_LWIP_CHECK_THREAD_SAFETY, default=True
|
|
670
|
+
): cv.boolean,
|
|
671
|
+
cv.Optional(CONF_EXECUTE_FROM_PSRAM): cv.boolean,
|
|
614
672
|
}
|
|
615
673
|
),
|
|
616
674
|
cv.Optional(CONF_COMPONENTS, default=[]): cv.ensure_list(
|
|
@@ -635,6 +693,64 @@ ESP_IDF_FRAMEWORK_SCHEMA = cv.All(
|
|
|
635
693
|
)
|
|
636
694
|
|
|
637
695
|
|
|
696
|
+
class _FrameworkMigrationWarning:
|
|
697
|
+
shown = False
|
|
698
|
+
|
|
699
|
+
|
|
700
|
+
def _show_framework_migration_message(name: str, variant: str) -> None:
|
|
701
|
+
"""Show a friendly message about framework migration when defaulting to Arduino."""
|
|
702
|
+
if _FrameworkMigrationWarning.shown:
|
|
703
|
+
return
|
|
704
|
+
_FrameworkMigrationWarning.shown = True
|
|
705
|
+
|
|
706
|
+
from esphome.log import AnsiFore, color
|
|
707
|
+
|
|
708
|
+
message = (
|
|
709
|
+
color(
|
|
710
|
+
AnsiFore.BOLD_CYAN,
|
|
711
|
+
f"💡 IMPORTANT: {name} doesn't have a framework specified!",
|
|
712
|
+
)
|
|
713
|
+
+ "\n\n"
|
|
714
|
+
+ f"Currently, {variant} defaults to the Arduino framework.\n"
|
|
715
|
+
+ color(AnsiFore.YELLOW, "This will change to ESP-IDF in ESPHome 2026.1.0.\n")
|
|
716
|
+
+ "\n"
|
|
717
|
+
+ "Note: Newer ESP32 variants (C6, H2, P4, etc.) already use ESP-IDF by default.\n"
|
|
718
|
+
+ "\n"
|
|
719
|
+
+ "Why change? ESP-IDF offers:\n"
|
|
720
|
+
+ color(AnsiFore.GREEN, " ✨ Up to 40% smaller binaries\n")
|
|
721
|
+
+ color(AnsiFore.GREEN, " 🚀 Better performance and optimization\n")
|
|
722
|
+
+ color(AnsiFore.GREEN, " 📦 Custom-built firmware for your exact needs\n")
|
|
723
|
+
+ color(
|
|
724
|
+
AnsiFore.GREEN,
|
|
725
|
+
" 🔧 Active development and testing by ESPHome developers\n",
|
|
726
|
+
)
|
|
727
|
+
+ "\n"
|
|
728
|
+
+ "Trade-offs:\n"
|
|
729
|
+
+ color(AnsiFore.YELLOW, " ⏱️ Compile times are ~25% longer\n")
|
|
730
|
+
+ color(AnsiFore.YELLOW, " 🔄 Some components need migration\n")
|
|
731
|
+
+ "\n"
|
|
732
|
+
+ "What should I do?\n"
|
|
733
|
+
+ color(AnsiFore.CYAN, " Option 1")
|
|
734
|
+
+ ": Migrate to ESP-IDF (recommended)\n"
|
|
735
|
+
+ " Add this to your YAML under 'esp32:':\n"
|
|
736
|
+
+ color(AnsiFore.WHITE, " framework:\n")
|
|
737
|
+
+ color(AnsiFore.WHITE, " type: esp-idf\n")
|
|
738
|
+
+ "\n"
|
|
739
|
+
+ color(AnsiFore.CYAN, " Option 2")
|
|
740
|
+
+ ": Keep using Arduino (still supported)\n"
|
|
741
|
+
+ " Add this to your YAML under 'esp32:':\n"
|
|
742
|
+
+ color(AnsiFore.WHITE, " framework:\n")
|
|
743
|
+
+ color(AnsiFore.WHITE, " type: arduino\n")
|
|
744
|
+
+ "\n"
|
|
745
|
+
+ "Need help? Check out the migration guide:\n"
|
|
746
|
+
+ color(
|
|
747
|
+
AnsiFore.BLUE,
|
|
748
|
+
"https://esphome.io/guides/esp32_arduino_to_idf.html",
|
|
749
|
+
)
|
|
750
|
+
)
|
|
751
|
+
_LOGGER.warning(message)
|
|
752
|
+
|
|
753
|
+
|
|
638
754
|
def _set_default_framework(config):
|
|
639
755
|
if CONF_FRAMEWORK not in config:
|
|
640
756
|
config = config.copy()
|
|
@@ -643,6 +759,10 @@ def _set_default_framework(config):
|
|
|
643
759
|
if variant in ARDUINO_ALLOWED_VARIANTS:
|
|
644
760
|
config[CONF_FRAMEWORK] = ARDUINO_FRAMEWORK_SCHEMA({})
|
|
645
761
|
config[CONF_FRAMEWORK][CONF_TYPE] = FRAMEWORK_ARDUINO
|
|
762
|
+
# Show the migration message
|
|
763
|
+
_show_framework_migration_message(
|
|
764
|
+
config.get(CONF_NAME, "This device"), variant
|
|
765
|
+
)
|
|
646
766
|
else:
|
|
647
767
|
config[CONF_FRAMEWORK] = ESP_IDF_FRAMEWORK_SCHEMA({})
|
|
648
768
|
config[CONF_FRAMEWORK][CONF_TYPE] = FRAMEWORK_ESP_IDF
|
|
@@ -676,7 +796,7 @@ CONF_PARTITIONS = "partitions"
|
|
|
676
796
|
CONFIG_SCHEMA = cv.All(
|
|
677
797
|
cv.Schema(
|
|
678
798
|
{
|
|
679
|
-
cv.
|
|
799
|
+
cv.Optional(CONF_BOARD): cv.string_strict,
|
|
680
800
|
cv.Optional(CONF_CPU_FREQUENCY): cv.one_of(
|
|
681
801
|
*FULL_CPU_FREQUENCIES, upper=True
|
|
682
802
|
),
|
|
@@ -691,6 +811,7 @@ CONFIG_SCHEMA = cv.All(
|
|
|
691
811
|
_detect_variant,
|
|
692
812
|
_set_default_framework,
|
|
693
813
|
set_core_data,
|
|
814
|
+
cv.has_at_least_one_key(CONF_BOARD, CONF_VARIANT),
|
|
694
815
|
)
|
|
695
816
|
|
|
696
817
|
|
|
@@ -705,6 +826,7 @@ async def to_code(config):
|
|
|
705
826
|
cg.add_define("ESPHOME_BOARD", config[CONF_BOARD])
|
|
706
827
|
cg.add_build_flag(f"-DUSE_ESP32_VARIANT_{config[CONF_VARIANT]}")
|
|
707
828
|
cg.add_define("ESPHOME_VARIANT", VARIANT_FRIENDLY[config[CONF_VARIANT]])
|
|
829
|
+
cg.add_define(ThreadModel.MULTI_ATOMICS)
|
|
708
830
|
|
|
709
831
|
cg.add_platformio_option("lib_ldf_mode", "off")
|
|
710
832
|
cg.add_platformio_option("lib_compat_mode", "strict")
|
|
@@ -774,6 +896,21 @@ async def to_code(config):
|
|
|
774
896
|
add_idf_sdkconfig_option("CONFIG_LWIP_DNS_SUPPORT_MDNS_QUERIES", False)
|
|
775
897
|
if not advanced.get(CONF_ENABLE_LWIP_BRIDGE_INTERFACE, False):
|
|
776
898
|
add_idf_sdkconfig_option("CONFIG_LWIP_BRIDGEIF_MAX_PORTS", 0)
|
|
899
|
+
if advanced.get(CONF_EXECUTE_FROM_PSRAM, False):
|
|
900
|
+
add_idf_sdkconfig_option("CONFIG_SPIRAM_FETCH_INSTRUCTIONS", True)
|
|
901
|
+
add_idf_sdkconfig_option("CONFIG_SPIRAM_RODATA", True)
|
|
902
|
+
|
|
903
|
+
# Apply LWIP core locking for better socket performance
|
|
904
|
+
# This is already enabled by default in Arduino framework, where it provides
|
|
905
|
+
# significant performance benefits. Our benchmarks show socket operations are
|
|
906
|
+
# 24-200% faster with core locking enabled:
|
|
907
|
+
# - select() on 4 sockets: ~190μs (Arduino/core locking) vs ~235μs (ESP-IDF default)
|
|
908
|
+
# - Up to 200% slower under load when all operations queue through tcpip_thread
|
|
909
|
+
# Enabling this makes ESP-IDF socket performance match Arduino framework.
|
|
910
|
+
if advanced.get(CONF_ENABLE_LWIP_TCPIP_CORE_LOCKING, True):
|
|
911
|
+
add_idf_sdkconfig_option("CONFIG_LWIP_TCPIP_CORE_LOCKING", True)
|
|
912
|
+
if advanced.get(CONF_ENABLE_LWIP_CHECK_THREAD_SAFETY, True):
|
|
913
|
+
add_idf_sdkconfig_option("CONFIG_LWIP_CHECK_THREAD_SAFETY", True)
|
|
777
914
|
|
|
778
915
|
cg.add_platformio_option("board_build.partitions", "partitions.csv")
|
|
779
916
|
if CONF_PARTITIONS in config:
|
|
@@ -813,6 +950,10 @@ async def to_code(config):
|
|
|
813
950
|
),
|
|
814
951
|
)
|
|
815
952
|
|
|
953
|
+
add_idf_sdkconfig_option(
|
|
954
|
+
f"CONFIG_LOG_DEFAULT_LEVEL_{conf[CONF_LOG_LEVEL]}", True
|
|
955
|
+
)
|
|
956
|
+
|
|
816
957
|
for name, value in conf[CONF_SDKCONFIG_OPTIONS].items():
|
|
817
958
|
add_idf_sdkconfig_option(name, RawSdkconfigValue(value))
|
|
818
959
|
|
|
@@ -862,7 +1003,7 @@ def get_arduino_partition_csv(flash_size):
|
|
|
862
1003
|
eeprom_partition_start = app1_partition_start + app_partition_size
|
|
863
1004
|
spiffs_partition_start = eeprom_partition_start + eeprom_partition_size
|
|
864
1005
|
|
|
865
|
-
|
|
1006
|
+
return f"""\
|
|
866
1007
|
nvs, data, nvs, 0x9000, 0x5000,
|
|
867
1008
|
otadata, data, ota, 0xE000, 0x2000,
|
|
868
1009
|
app0, app, ota_0, 0x{app0_partition_start:X}, 0x{app_partition_size:X},
|
|
@@ -870,20 +1011,18 @@ app1, app, ota_1, 0x{app1_partition_start:X}, 0x{app_partition_size:X},
|
|
|
870
1011
|
eeprom, data, 0x99, 0x{eeprom_partition_start:X}, 0x{eeprom_partition_size:X},
|
|
871
1012
|
spiffs, data, spiffs, 0x{spiffs_partition_start:X}, 0x{spiffs_partition_size:X}
|
|
872
1013
|
"""
|
|
873
|
-
return partition_csv
|
|
874
1014
|
|
|
875
1015
|
|
|
876
1016
|
def get_idf_partition_csv(flash_size):
|
|
877
1017
|
app_partition_size = APP_PARTITION_SIZES[flash_size]
|
|
878
1018
|
|
|
879
|
-
|
|
1019
|
+
return f"""\
|
|
880
1020
|
otadata, data, ota, , 0x2000,
|
|
881
1021
|
phy_init, data, phy, , 0x1000,
|
|
882
1022
|
app0, app, ota_0, , 0x{app_partition_size:X},
|
|
883
1023
|
app1, app, ota_1, , 0x{app_partition_size:X},
|
|
884
1024
|
nvs, data, nvs, , 0x6D000,
|
|
885
1025
|
"""
|
|
886
|
-
return partition_csv
|
|
887
1026
|
|
|
888
1027
|
|
|
889
1028
|
def _format_sdkconfig_val(value: SdkconfigValueType) -> str:
|
|
@@ -943,14 +1082,16 @@ def _write_idf_component_yml():
|
|
|
943
1082
|
|
|
944
1083
|
# Called by writer.py
|
|
945
1084
|
def copy_files():
|
|
946
|
-
if
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
1085
|
+
if (
|
|
1086
|
+
CORE.using_arduino
|
|
1087
|
+
and "partitions.csv" not in CORE.data[KEY_ESP32][KEY_EXTRA_BUILD_FILES]
|
|
1088
|
+
):
|
|
1089
|
+
write_file_if_changed(
|
|
1090
|
+
CORE.relative_build_path("partitions.csv"),
|
|
1091
|
+
get_arduino_partition_csv(
|
|
1092
|
+
CORE.platformio_options.get("board_upload.flash_size")
|
|
1093
|
+
),
|
|
1094
|
+
)
|
|
954
1095
|
if CORE.using_esp_idf:
|
|
955
1096
|
_write_sdkconfig()
|
|
956
1097
|
_write_idf_component_yml()
|
|
@@ -970,7 +1111,7 @@ def copy_files():
|
|
|
970
1111
|
__version__,
|
|
971
1112
|
)
|
|
972
1113
|
|
|
973
|
-
for
|
|
1114
|
+
for file in CORE.data[KEY_ESP32][KEY_EXTRA_BUILD_FILES].values():
|
|
974
1115
|
if file[KEY_PATH].startswith("http"):
|
|
975
1116
|
import requests
|
|
976
1117
|
|
|
@@ -2,13 +2,30 @@ from .const import (
|
|
|
2
2
|
VARIANT_ESP32,
|
|
3
3
|
VARIANT_ESP32C2,
|
|
4
4
|
VARIANT_ESP32C3,
|
|
5
|
+
VARIANT_ESP32C5,
|
|
5
6
|
VARIANT_ESP32C6,
|
|
6
7
|
VARIANT_ESP32H2,
|
|
7
8
|
VARIANT_ESP32P4,
|
|
8
9
|
VARIANT_ESP32S2,
|
|
9
10
|
VARIANT_ESP32S3,
|
|
11
|
+
VARIANTS,
|
|
10
12
|
)
|
|
11
13
|
|
|
14
|
+
STANDARD_BOARDS = {
|
|
15
|
+
VARIANT_ESP32: "esp32dev",
|
|
16
|
+
VARIANT_ESP32C2: "esp32-c2-devkitm-1",
|
|
17
|
+
VARIANT_ESP32C3: "esp32-c3-devkitm-1",
|
|
18
|
+
VARIANT_ESP32C5: "esp32-c5-devkitc-1",
|
|
19
|
+
VARIANT_ESP32C6: "esp32-c6-devkitm-1",
|
|
20
|
+
VARIANT_ESP32H2: "esp32-h2-devkitm-1",
|
|
21
|
+
VARIANT_ESP32P4: "esp32-p4-evboard",
|
|
22
|
+
VARIANT_ESP32S2: "esp32-s2-kaluga-1",
|
|
23
|
+
VARIANT_ESP32S3: "esp32-s3-devkitc-1",
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
# Make sure not missed here if a new variant added.
|
|
27
|
+
assert all(v in STANDARD_BOARDS for v in VARIANTS)
|
|
28
|
+
|
|
12
29
|
ESP32_BASE_PINS = {
|
|
13
30
|
"TX": 1,
|
|
14
31
|
"RX": 3,
|
|
@@ -114,7 +114,6 @@ void ESP32InternalGPIOPin::setup() {
|
|
|
114
114
|
if (flags_ & gpio::FLAG_OUTPUT) {
|
|
115
115
|
gpio_set_drive_capability(pin_, drive_strength_);
|
|
116
116
|
}
|
|
117
|
-
ESP_LOGD(TAG, "rtc: %d", SOC_GPIO_SUPPORT_RTC_INDEPENDENT);
|
|
118
117
|
}
|
|
119
118
|
|
|
120
119
|
void ESP32InternalGPIOPin::pin_mode(gpio::Flags flags) {
|
esphome/components/esp32/gpio.py
CHANGED
|
@@ -187,8 +187,7 @@ def validate_supports(value):
|
|
|
187
187
|
"Open-drain only works with output mode", [CONF_MODE, CONF_OPEN_DRAIN]
|
|
188
188
|
)
|
|
189
189
|
|
|
190
|
-
|
|
191
|
-
return value
|
|
190
|
+
return _esp32_validations[variant].usage_validation(value)
|
|
192
191
|
|
|
193
192
|
|
|
194
193
|
# https://docs.espressif.com/projects/esp-idf/en/v3.3.5/api-reference/peripherals/gpio.html#_CPPv416gpio_drive_cap_t
|
|
@@ -2,6 +2,7 @@ import logging
|
|
|
2
2
|
|
|
3
3
|
import esphome.config_validation as cv
|
|
4
4
|
from esphome.const import CONF_INPUT, CONF_MODE, CONF_NUMBER
|
|
5
|
+
from esphome.pins import check_strapping_pin
|
|
5
6
|
|
|
6
7
|
_ESP32H2_SPI_FLASH_PINS = {6, 7, 15, 16, 17, 18, 19, 20, 21}
|
|
7
8
|
|
|
@@ -15,13 +16,6 @@ _LOGGER = logging.getLogger(__name__)
|
|
|
15
16
|
def esp32_h2_validate_gpio_pin(value):
|
|
16
17
|
if value < 0 or value > 27:
|
|
17
18
|
raise cv.Invalid(f"Invalid pin number: {value} (must be 0-27)")
|
|
18
|
-
if value in _ESP32H2_STRAPPING_PINS:
|
|
19
|
-
_LOGGER.warning(
|
|
20
|
-
"GPIO%d is a Strapping PIN and should be avoided.\n"
|
|
21
|
-
"Attaching external pullup/down resistors to strapping pins can cause unexpected failures.\n"
|
|
22
|
-
"See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins",
|
|
23
|
-
value,
|
|
24
|
-
)
|
|
25
19
|
if value in _ESP32H2_SPI_FLASH_PINS:
|
|
26
20
|
_LOGGER.warning(
|
|
27
21
|
"GPIO%d is reserved for SPI Flash communication on some ESP32-H2 chip variants.\n"
|
|
@@ -49,4 +43,5 @@ def esp32_h2_validate_supports(value):
|
|
|
49
43
|
if is_input:
|
|
50
44
|
# All ESP32 pins support input mode
|
|
51
45
|
pass
|
|
46
|
+
check_strapping_pin(value, _ESP32H2_STRAPPING_PINS, _LOGGER)
|
|
52
47
|
return value
|
|
@@ -2,6 +2,7 @@ import logging
|
|
|
2
2
|
|
|
3
3
|
import esphome.config_validation as cv
|
|
4
4
|
from esphome.const import CONF_INPUT, CONF_MODE, CONF_NUMBER
|
|
5
|
+
from esphome.pins import check_strapping_pin
|
|
5
6
|
|
|
6
7
|
_ESP32P4_USB_JTAG_PINS = {24, 25}
|
|
7
8
|
|
|
@@ -13,13 +14,6 @@ _LOGGER = logging.getLogger(__name__)
|
|
|
13
14
|
def esp32_p4_validate_gpio_pin(value):
|
|
14
15
|
if value < 0 or value > 54:
|
|
15
16
|
raise cv.Invalid(f"Invalid pin number: {value} (must be 0-54)")
|
|
16
|
-
if value in _ESP32P4_STRAPPING_PINS:
|
|
17
|
-
_LOGGER.warning(
|
|
18
|
-
"GPIO%d is a Strapping PIN and should be avoided.\n"
|
|
19
|
-
"Attaching external pullup/down resistors to strapping pins can cause unexpected failures.\n"
|
|
20
|
-
"See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins",
|
|
21
|
-
value,
|
|
22
|
-
)
|
|
23
17
|
if value in _ESP32P4_USB_JTAG_PINS:
|
|
24
18
|
_LOGGER.warning(
|
|
25
19
|
"GPIO%d is reserved for the USB-Serial-JTAG interface.\n"
|
|
@@ -40,4 +34,5 @@ def esp32_p4_validate_supports(value):
|
|
|
40
34
|
if is_input:
|
|
41
35
|
# All ESP32 pins support input mode
|
|
42
36
|
pass
|
|
37
|
+
check_strapping_pin(value, _ESP32P4_STRAPPING_PINS, _LOGGER)
|
|
43
38
|
return value
|