180 lines
3.6 KiB
Markdown
180 lines
3.6 KiB
Markdown
# ESP32
|
||
|
||
- [ESP32](#esp32)
|
||
- [Install](#install)
|
||
- [Devices](#devices)
|
||
- [Lilygo tdongle](#lilygo-tdongle)
|
||
- [Local Flashing](#local-flashing)
|
||
- [Adding a New Device](#adding-a-new-device)
|
||
- [Controlling Home Assistant](#controlling-home-assistant)
|
||
- [Configuration Sections](#configuration-sections)
|
||
- [esphome](#esphome)
|
||
- [esp32](#esp32-1)
|
||
- [logger](#logger)
|
||
- [api](#api)
|
||
- [wifi](#wifi)
|
||
- [ota](#ota)
|
||
- [captive portal](#captive-portal)
|
||
- [button](#button)
|
||
- [i2s audio](#i2s-audio)
|
||
- [microphone](#microphone)
|
||
- [speaker](#speaker)
|
||
- [media player](#media-player)
|
||
- [voice assistant](#voice-assistant)
|
||
- [micro wake word](#micro-wake-word)
|
||
- [light](#light)
|
||
- [binary sensor](#binary-sensor)
|
||
- [lambda](#lambda)
|
||
|
||
## Install
|
||
|
||
```bash
|
||
# 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
|
||
|
||
```bash
|
||
sudo usermod -a -G dialout ducoterra
|
||
```
|
||
|
||
Then "run" your config file
|
||
|
||
```bash
|
||
cd active/device_esp32
|
||
uv venv
|
||
uv pip install esphome
|
||
source .venv/bin/activate
|
||
|
||
esphome run m5stack-atom-echo.yaml
|
||
```
|
||
|
||
## Adding a New Device
|
||
|
||
1. 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.
|
||
|
||
```bash
|
||
ffmpeg -i input.flac output.wav
|
||
```
|
||
|
||
To play media on other devices from home assistant, put the
|
||
|
||
```yaml
|
||
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:
|
||
|
||
```bash
|
||
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.
|