4.9 KiB
ESP32
Install
# Check that you have python 3.11 installed
uv python list --only-installed
# Create the venv (python 3.11 is recommended in the docs)
uv venv --python 3.11
# Install esphome
uv pip install esphome wheel pip
source .venv/bin/activate
Devices
Lilygo tdongle
Display: 80 X 160
Local Flashing
Make sure your permissions are set correctly
sudo usermod -a -G dialout ducoterra
Then "run" your config file
cd active/device_esp32
uv venv
uv pip install esphome
source .venv/bin/activate
esphome run m5stack-atom-echo.yaml
Adding a New Device
- Create a new yaml configuration file called "my-device-device-type.yaml"
Controlling Home Assistant
https://esphome.io/components/api/#api-actions
Configuration Sections
https://esphome.io/components/
esphome
esp32
https://esphome.io/components/esp32/#configuration-variables
logger
https://esphome.io/components/logger/
api
https://esphome.io/components/api/
wifi
https://esphome.io/components/wifi/
ota
https://esphome.io/components/ota/
https://esphome.io/components/ota/esphome/
captive portal
https://esphome.io/components/captive_portal/
button
https://esphome.io/components/button/
i2s audio
https://esphome.io/components/i2s_audio/
microphone
https://esphome.io/components/microphone/
https://esphome.io/components/microphone/i2s_audio/
speaker
https://esphome.io/components/speaker/i2s_audio/
media player
https://esphome.io/components/media_player/speaker/
Sometimes you'll need to convert media files to supported encoders.
ffmpeg -i input.flac output.wav
To play media on other devices from home assistant, put the
action: media_player.play_media
target:
entity_id: media_player.kitchen_google_home
data:
media_content_type: "audio/wav"
media_content_id: "media-source://media_source/local/wake_word_triggered.wav"
voice assistant
https://esphome.io/components/voice_assistant/
In Home Assistant's configuration.yaml, add the following to listen to audio recordings of your voice request:
assist_pipeline:
debug_recording_dir: /share/assist_pipeline
micro wake word
https://esphome.io/components/micro_wake_word/
light
https://esphome.io/components/light/#light-effects
binary sensor
https://esphome.io/components/binary_sensor/
lambda
https://esphome.io/automations/templates/#config-lambda
id(...) is a helper function that makes ESPHome fetch an object with the supplied ID (which you defined somewhere else, like top_end_stop ) and lets you call any of ESPHome’s many APIs directly. For example, here we’re retrieving the current state of the end stop using .state and using it to construct our cover state.
Display
Display pages
display:
- platform: st7735
spi_id: spi_lcd
model: "INITR_MINI160X80"
reset_pin: GPIO1
cs_pin: GPIO4
dc_pin: GPIO2
rotation: 270
device_width: 82
device_height: 161
col_start: 0
row_start: 0
eight_bit_color: true
invert_colors: true
use_bgr: true
auto_clear_enabled: true
id: my_display
pages:
- id: page1
lambda: |-
it.print(0, 10, id(font_roboto), "Connecting to");
it.print(0, 30, id(font_roboto), "Home Assistant...");
- id: page2
lambda: |-
it.print(0, 10, id(font_roboto), "Configuring");
it.print(0, 30, id(font_roboto), "sensors...");
- id: page3
lambda: |-
it.print(0, 10, id(font_roboto), "Loading");
it.print(0, 30, id(font_roboto), "important");
it.print(0, 50, id(font_roboto), "update...");
- id: page4
lambda: |-
it.image(0, 0, id(my_image), COLOR_OFF, COLOR_ON);
Switch pages
interval:
- interval: 5s
then:
- display.page.show_next: my_display
- component.update: my_display
Show an image
image:
- file: "test_tdongle_image.png"
type: RGB
id: my_image
Specify a font
font:
- file: "gfonts://Roboto"
id: font_roboto
size: 20