Skip to main content

XIAO ESP32S3 sense 通过 ESPHome 连接 Home Assistant(支持所有端口)

本教程将逐步介绍如何将 Seeed Studio XIAO ESP32S3 与运行在 Home Assistant 上的 ESPHome 连接,并在将 Grove 模块连接到 XIAO ESP32S3 后发送传感器数据/控制设备。让我们开始吧!

什么是 ESPHome 和 Home Assistant?​


ESPHome 是一个旨在让管理 ESP 开发板尽可能简单的工具。它读取 YAML 配置文件并创建自定义固件,然后将其安装到您的 ESP 设备上。在 ESPHome 配置中添加的设备或传感器将自动显示在 Home Assistant 的用户界面中。ESPHome 可以帮助您连接设备并将数据发送到 Home Assistant 设备。

硬件准备​

如果您想完整地跟随本教程,您需要准备以下物品。

Seeed Studio XIAO ESP32S3 SenseSeeed Studio 扩展板Home Assistant 设备

使用的传感器​

软件准备​

安装 Home Assistant​

确保您已经安装并运行了 Home Assistant。您可以按照此 wiki 获取在 ODYSSEY-X86 单板计算机上安装 Home Assistant 的分步指南,或者按照此链接获取在 Seeed 迷你路由器上使用 Home Assistant 的详细说明。

在 Home Assistant 上安装 ESPHome​

ESPHome 作为 Home Assistant 插件提供,可以通过插件商店简单安装。

  • 步骤 1. 点击 INSTALL
  • 步骤 2. 启用所有选项并点击 START

如果 ESPHome 成功加载,您将看到以下窗口

入门指南​

一旦所有软件和硬件都准备就绪,我们现在就可以开始了。

1. 将 Seeed Studio XIAO ESP32S3 (Sense) 添加到 ESPHome​

  • 步骤 1. 点击 + NEW DEVICE
  • 步骤 2. 点击 CONTINUE
  • 步骤 3. 为设备输入一个名称,并输入 WiFi 凭据,如网络名称和密码。然后点击 NEXT
  • 步骤 4. 选择 ESP32-S3 并点击
  • 步骤 5. 点击 SKIP,因为我们将手动配置此板
  • 步骤 6. 点击新创建的板下方的 EDIT
  • 步骤 7. 这将打开一个 YAML 文件,该文件将用于设置所有板配置。按如下方式编辑 esp32 下的内容
esphome:
name: esp32s3
platformio_options:
build_flags: -DBOARD_HAS_PSRAM
board_build.arduino.memory_type: qio_opi
board_build.f_flash: 80000000L
board_build.flash_mode: qio

esp32:
board: esp32-s3-devkitc-1
framework:
type: arduino


# Enable logging
logger:

# Enable Home Assistant API
api:

ota:

wifi:
ssid: "your wifi name"
password: "your password"

# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Xiao-Esp32s3 Fallback Hotspot"
password: "MoLTqZUvHwWI"

注意: 这里我们使用最新版本的 Arduino core for ESP32 和 ESP32 support for PlatformIO

  • 步骤 8. 点击 SAVE,然后点击 INSTALL
  • 步骤 9. 将 USB Type-C 数据线的一端连接到 Seeed Studio XIAO ESP32S3,另一端连接到 reRouter CM4 1432 的其中一个 USB 端口
  • 步骤 10. 点击 Plug into the computer running ESPHome Dashboard
  • 步骤 11. 选择已连接的端口。很可能是 /dev/ttyACM1,因为 /dev/ttyACM0 已连接到 reRouter CM4 1432
tip

最好使用 2.4GHz Wi-Fi

现在它将下载所有必要的开发板包并将 ESPHome 固件刷入 XIAO ESP32S3。如果刷写成功,您将看到以下输出。如果您看到错误,请尝试重启您的 xiao esp32S3 或通过按住 BOOT 按钮进入引导加载程序模式并连接 XIAO ESP32S3。

  • 步骤 12. 上面的窗口显示来自已连接开发板的实时日志。点击 STOP 关闭它
  • 步骤 13. 如果您看到开发板状态为 ONLINE,这意味着开发板已成功连接到 WiFi
tip

现在您可以将 XIAO ESP32S3 从 reRouter CM4 1432 断开连接,只需通过 USB 数据线为其供电即可。这是因为从现在开始,如果您想要向 XIAO ESP32S3 刷写固件,您可以简单地通过 OTA 方式进行,无需通过 USB 数据线连接到 X86 开发板。

    1. 点击 三个点 并点击 Install
    1. 选择 Wirelessly,它将无线推送更改到开发板
  • 步骤 14. 转到 Settings 并选择 Devices & Services
  • 步骤 15. 您将看到 ESPHome 作为已发现的集成。点击 CONFIGURE
  • 步骤 16. 点击 SUBMIT
  • 步骤 17. 点击 FINISH

2. 使用 ESPHome 和 Home Assistant 连接 Grove 模块​

现在我们将 Grove 模块连接到 Seeed Studio XIAO ESP32S3 (sense),这样我们就可以使用 Home Assistant 显示传感器数据或控制设备!

开发知识​

XIAO 扩展板​

为了将 Grove 模块与 Seeed Studio XIAO ESP32S3 一起使用,我们将使用 Seeed Studio Expansion Base for XIAO 并将 XIAO ESP32S3 连接到上面。

之后,板上的 Grove 连接器就可以用来连接 Grove 模块

引脚定义​

当将 Grove 模块连接到 Seeed Studio XIAO 的 Grove Shield 上的 Grove 连接器时,您需要按照下图使用适当的内部引脚编号。


例如,如果您想将 Grove 模块连接到 D0 端口,您需要在 ESPHome 上将引脚定义为 GPIO1。您可以通过点击这里找到更多详细信息。

Grove 与 ESPHome 兼容性列表​

目前 ESPHome 支持以下 Grove 模块

查看这里

现在我们将从上表中选择 6 个 Grove 模块,并解释它们如何与 ESPHome 和 Home Assistant 连接。

3. Grove 连接和数据传输​

现在我们将选择几个 Grove 模块,并解释它们如何与 ESPHome 和 Home Assistant 连接。

Grove - 温湿度传感器 (BME680)​

设置配置​
  • 步骤 1. 将 Grove - 温度、湿度、压力和气体传感器 (BME680) 连接到 Seeed Studio Expansion Base for XIAO 上的其中一个 I2C 连接器

  • 步骤 2. 在我们之前创建的 xiao-esp32s3-bme680.yaml 文件中,修改文件并通过 OTA 推送到 XIAO ESP32S3

# Configuration for ESPHome
esphome:
# Name of the ESP32-S3 device
name: esp32s3

# PlatformIO build options
platformio_options:
build_flags: -DBOARD_HAS_PSRAM
board_build.arduino.memory_type: qio_opi
board_build.f_flash: 80000000L
board_build.flash_mode: qio

# Configuration for ESP32
esp32:
board: esp32-s3-devkitc-1
framework:
type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:

# Over-the-Air update configuration
ota:

# Wi-Fi configuration
wifi:
ssid: "your wifi name"
password: "your password"

# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Xiao-Esp32s3 Fallback Hotspot"
password: "MoLTqZUvHwWI"

# Captive portal configuration
captive_portal:

# I2C configuration for BME680 sensor
i2c:
sda: GPIO5
scl: GPIO6

# BME680 sensor configuration
sensor:
- platform: bme680
temperature:
name: "BME680 Temperature"
oversampling: 16x
pressure:
name: "BME680 Pressure"
humidity:
name: "BME680 Humidity"
gas_resistance:
name: "BME680 Gas Resistance"
address: 0x76
update_interval: 60s

您可以在BME680组件这里了解更多信息。它允许您使用基于BME280、BME680、BMP085、BMP280、AHT10、AHT20和AHT21的传感器。这里我们添加I²C总线组件,因为AHT20使用I2C协议进行通信。

在仪表板上可视化​
  • 步骤1. 在Home Assistant的概览页面上,点击3个点并点击编辑仪表板
  • 步骤2. 点击**+ 添加卡片**
  • 步骤3. 选择按实体,输入temperature并选择Temperature旁边的复选框
  • 步骤4. 对Humidity、Gas Resitance和Pressure重复相同操作

  • 步骤5. 点击继续

  • 步骤6. 点击添加到仪表板

现在您的Home Assistant仪表板将如下所示

  • 步骤7. 您也可以将传感器数据可视化为仪表。在按卡片下点击仪表
  • 步骤8. 从下拉菜单中选择Temperature
  • 步骤9. 点击保存

  • 步骤10. 对Humidity、Gas Resitance和Pressure重复相同操作

  • 现在您的仪表板将如下所示


Grove -智能空气质量传感器 (SGP41)​

  • 步骤2. 在我们之前创建的xiao-esp32S3.yaml文件中,修改文件并通过OTA推送到XIAO ESP32S3 sense
# Configuration for ESPHome
esphome:
# Name of the ESP32-S3 device
name: esp32s3

# PlatformIO build options
platformio_options:
build_flags: -DBOARD_HAS_PSRAM
board_build.arduino.memory_type: qio_opi
board_build.f_flash: 80000000L
board_build.flash_mode: qio

# Configuration for ESP32
esp32:
board: esp32-s3-devkitc-1
framework:
type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:

# Over-the-Air update configuration
ota:

# Wi-Fi configuration
wifi:
ssid: "your wifi name"
password: "your password"

# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Xiao-Esp32s3 Fallback Hotspot"
password: "MoLTqZUvHwWI"

# Captive portal configuration
captive_portal:

# SPI configuration
spi:
clk_pin: GPIO8
mosi_pin: GPIO10
miso_pin: GPIO9

# I2C configuration for BME680 sensor
i2c:
sda: GPIO5
scl: GPIO6
scan: True
id: bus_a
frequency: 1MHz

# Sensor configuration for SGP4X
sensor:
- platform: sgp4x
voc:
id: sgp41_voc
name: "VOC Index"
nox:
id: sgp41_nox
name: "NOx Index"
  • 步骤 3. 补偿示例 compensation(可选):包含用于补偿的传感器的块。如果未设置,将使用默认值。 我们将使用温湿度传感器(BME680)来补偿智能空气质量传感器(SGP41)。 以下是更新后的 xiao-esp32S3.yaml 文件:
# Configuration for ESPHome
esphome:
# Name of the ESP32-S3 device
name: esp32s3

# PlatformIO build options
platformio_options:
build_flags: -DBOARD_HAS_PSRAM
board_build.arduino.memory_type: qio_opi
board_build.f_flash: 80000000L
board_build.flash_mode: qio

# Configuration for ESP32
esp32:
board: esp32-s3-devkitc-1
framework:
type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:

# Over-the-Air update configuration
ota:

# Wi-Fi configuration
wifi:
ssid: "your wifi name"
password: "your password"

# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Xiao-Esp32s3 Fallback Hotspot"
password: "MoLTqZUvHwWI"

# Captive portal configuration
captive_portal:

# SPI configuration
spi:
clk_pin: GPIO8
mosi_pin: GPIO10
miso_pin: GPIO9

# I2C configuration for BME680 sensor
i2c:
sda: GPIO5
scl: GPIO6
scan: True
id: bus_a
frequency: 1MHz

# BME680 sensor configuration
sensor:
- platform: bme680
temperature:
id: bme680_temp
name: "BME680 Temperature"
oversampling: 16x
pressure:
name: "BME680 Pressure"
humidity:
id: bme680_hum
name: "BME680 Humidity"
gas_resistance:
name: "BME680 Gas Resistance"
address: 0x76

# SGP4X sensor configuration
- platform: sgp4x
voc:
name: "VOC Index"
nox:
name: "NOx Index"
compensation:
humidity_source: bme680_hum
temperature_source: bme680_temp

注意: 此传感器需要90个周期来收集足够的数据样本,目前无法避免警告。

在仪表板上可视化​

与之前相同。


OV2640/OV3660 摄像头 (XIAO ESP32S3 Sense)​

设置配置​
  • 步骤 1. 将 OV2640 或 OV660 摄像头外部板连接到 xiao esp32s3 sense

  • 步骤 2. 在我们之前创建的 xiao-esp32s3-camera.yaml 文件中,修改文件并通过 OTA 推送到 XIAO ESP32S3 sense

# Configuration for ESPHome
esphome:
# Name of the ESP32-S3 device
name: esp32s3

# PlatformIO build options
platformio_options:
build_flags: -DBOARD_HAS_PSRAM
board_build.arduino.memory_type: qio_opi
board_build.f_flash: 80000000L
board_build.flash_mode: qio

# Configuration for ESP32
esp32:
board: esp32-s3-devkitc-1
framework:
type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:

# Over-the-Air update configuration
ota:

# Wi-Fi configuration
wifi:
ssid: "your wifi name"
password: "your password"

# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Xiao-Esp32s3 Fallback Hotspot"
password: "MoLTqZUvHwWI"

# Captive portal configuration
captive_portal:

# Configuration for the ESP32 Camera
esp32_camera:
id: espcam
name: My Camera
external_clock:
pin: GPIO10
frequency: 20MHz
i2c_pins:
sda: GPIO40
scl: GPIO39
data_pins: [GPIO15, GPIO17, GPIO18, GPIO16, GPIO14, GPIO12, GPIO11, GPIO48]
vsync_pin: GPIO38
href_pin: GPIO47
pixel_clock_pin: GPIO13
resolution: 800x600

# Configuration for the ESP32 Camera Web Server
esp32_camera_web_server:
- port: 8080
mode: stream
- port: 8081
mode: snapshot

注意:更多信息,请阅读这里。

在仪表板上可视化​
  • 步骤 1. 在 Home Assistant 的概览页面上,点击 3 个点并点击 Edit Dashboard
  • 步骤 2. 点击 + ADD CARD
  • 步骤 3. 选择 By ENTITY,输入 Camera 并选择 My Camera
  • 步骤 4. 点击 Add to Dashboard
  • 步骤 5. 在仪表板上查看网络流时,它处于空闲模式,每分钟只刷新几帧。当我们点击卡片时,它会转换为活动模式,通常刷新率在每秒一到十帧之间。在本教程中,刷新率大约为每秒四帧。

PDM 麦克风用于语音助手​

设置配置​
  • 步骤 1. 在我们之前创建的 xiao-esp32s3-microphone.yaml 文件中,更改文件并通过 OTA 推送到 XIAO ESP32S3 sense
# Configuration for ESPHome
esphome:
name: esp32s3
platformio_options:
build_flags: -DBOARD_HAS_PSRAM
board_build.arduino.memory_type: qio_opi
board_build.f_flash: 80000000L
board_build.flash_mode: qio

# Configuration for ESP32
esp32:
board: esp32-s3-devkitc-1
framework:
type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:

# Over-the-Air update configuration
ota:

# Wi-Fi configuration
wifi:
ssid: "your wifi name"
password: "your password"

# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Xiao-Esp32s3 Fallback Hotspot"
password: "MoLTqZUvHwWI"

# Captive portal configuration
captive_portal:

# Configuration for the status LED light
light:
- platform: status_led
id: light0
name: "Voice Assistant State"
pin:
number: GPIO21
inverted: true

# Configuration for I2S audio
i2s_audio:
i2s_lrclk_pin: GPIO46 # Note: labeled as "useless"
i2s_bclk_pin: GPIO42

# Configuration for the microphone using I2S audio
microphone:
- platform: i2s_audio
id: echo_microphone
i2s_din_pin: GPIO41
adc_type: external
pdm: true

# Configuration for the Voice Assistant
voice_assistant:
microphone: echo_microphone

# Configuration for the binary sensor (Boot Switch)
binary_sensor:
- platform: gpio
pin:
number: GPIO2
mode:
input: true
pullup: true
name: Boot Switch
internal: true
on_press:
- voice_assistant.start:
- light.turn_off: light0
on_release:
- voice_assistant.stop:
- light.turn_on: light0

注意:更多信息请阅读这里。

在仪表板上可视化​
  • 步骤 1. 在Home Assistant的概览页面上,点击3个点,然后点击编辑仪表板
  • 步骤 2. 点击**+ 添加卡片**
  • 步骤 3. 选择按实体,然后选择Esp32S3 Assist in progress、Esp32S3 Assist in progress、Esp32S3 Finished speaking detection、Status和voice assistant state
  • 步骤 4. 点击添加到仪表板
  • 步骤 5. 当您按下Seeed Studio XIAO扩展底板上的按钮(D1)时,esp32s3上的用户定义LED(GPIO2)将点亮,您可以通过语音助手与esphome对话。

注意: 更多信息请阅读这里。

XIAO 6x10 RGB矩阵​

设置配置​
  • 步骤 1. 首先您需要将6x10 RGB矩阵连接到XIAO,详细信息请参见此Wiki。

  • 步骤 2. 复制下面的.yaml信息并通过OTA推送到XIAO ESP32S3。

esphome:
name: sixtyled
friendly_name: sixtyled

esp32:
board: seeed_xiao_esp32s3
variant: esp32s3
framework:
type: arduino
version: latest
platform_version: 6.4.0

# Enable logging
logger:

# Enable Home Assistant API
api:

ota:

wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password

# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Sixtyled Fallback Hotspot"
password: "MoLTqZUvHwWI"

captive_portal:

light:
- platform: esp32_rmt_led_strip
rgb_order: GRB
pin: GPIO1
num_leds: 60
rmt_channel: 0
chipset: ws2812
name: "XIAO LEDS"

在仪表板上可视化​
  • 步骤 1. 打开路径 Setting - Devices&services - ESPHome - sixtyled(你设置的名称) 将卡片添加到仪表板中。
  • 步骤 2. 在 Home Assistant 的概览页面上,点击 3 个点并点击 Edit Dashboard
  • 步骤 3. 点击 + ADD CARD
  • 步骤 4. 选择 By ENTITY,输入 xiao 并选择 sixtyled XIAO LEDS 旁边的 复选框
  • 步骤 5. 点击 CONTINUE 和 Add to Dashboard
  • 步骤 6. 随后,你可以在"概览"部分找到一个卡片,在那里你可以控制 XIAO 的 6x10 RGB 矩阵。在这里,你可以切换其开/关状态并自定义其颜色和亮度。

✨ 贡献者项目​

  • 此项目由 Seeed Studio 贡献者项目支持。
  • 感谢 Zachary 的努力,你的工作将被展示。
  • 感谢 python 的努力,项目源码在这里分享。

技术支持与产品讨论​

感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...