Skip to main content

将 XIAO ESP32C3 应用 Home Assistant 实现屋内环境监测

本wiki将逐步介绍如何连接Seeed Studio XIAO ESP32C3与运行在Home Assistant上的ESPHome,并在连接Grove模块到XIAO ESP32C3后发送传感器数据/控制设备。我在这里应用了各种端口 包括数字、模拟、IIC、 SPI和UART. 现在让我们开始吧!

什么是ESPHome和家庭助理?

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

硬件准备

我使用XIAO ESP32C3作为控制板,这里使用reRouter作为硬件,以及多个Grove传感器。

Seeed Studio XIAO ESP32C3Seeed Studio 扩展板家庭助理设备

Grove 传感器

软件准备

安装家庭助理

确保你已经有家庭助理启动和运行。这里有多个wiki介绍如何将家庭助理flash到产品中。我使用的是由树莓派CM4驱动的reRouter,所以我可以直接使用官方版本将操作系统flash到reRouter

在家庭助理上安装ESPHome

ESPHome是一个家庭助理附加组件 可以简单地通过附加组件商店安装。

  • 步骤 1. 在家庭助理上快速设置ESPHome,请单击下面的按钮
  • 步骤 2. 看到以下弹出窗口后,单击 OPEN LINK
  • 步骤 3. 点击 INSTALL
  • 步骤 4. 启用所有选项,然后单击 START
  • 步骤 5. 点击OPEN WEB UI 或者 ESPHOME from the side-panel

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

开始

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

1. 添加Seeed Studio XIAO ESP32C3到ESPHome

  • 步骤 1. 点击 + NEW DEVICE
  • 步骤 2. 点击 CONTINUE
  • 步骤 3. 输入设备的 名称 并输入WiFi凭证 如 网络名称 and 密码。然后单击 NEXT
  • 步骤 4. 选中 ESP32-C3 并且点击
  • 步骤 5. 点击SKIP 因为我们将手动配置这块开发板
  • 步骤 6. 点击 EDIT 在新成立的开发板下
  • 步骤 7. 这将打开一个 YAML 文件该文件将用于设置所有的板配置。编辑esp32下的内容,如下所示
esphome:
name: xiao-esp32c3
platformio_options:
board_build.flash_mode: dio

esp32:
board: seeed_xiao_esp32c3
variant: esp32c3
framework:
type: arduino
platform_version: 5.4.0

# Enable logging
logger:
hardware_uart: UART0

# Enable Home Assistant API
api:

ota:

wifi:
ssid: "WiFi_SSID"
password: "Your Password"

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

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

  • 步骤 8. 点击 SAVE 然后点击 INSTALL
  • 步骤 9. 将USB Type-C电缆的一端连接到Seeed Studio XIAO ESP32C3,另一端连接到reRouter CM4 1432上的一个USB端口
  • 步骤 10. 点击插入运行ESPHome Dashboard的计算机
  • 步骤 11. 选择连接的端口。它很可能是 /dev/ttyACM1 because /dev/ttyACM0 连接到reRouter CM4 1432

现在它将下载所有必要的板包并将ESPHome固件flash到XIAO ESP32C3中。如果闪烁成功,您将看到以下输出。如果您看到一些错误,请尝试重新启动您的XIAO ESP32C3。或通过按住BOOT BUTTON进入引导加载程序模式并连接XIAO ESP32C3。

  • 步骤 12. 以上窗口显示的是所连接单板的实时日志。点击 STOP关闭它
  • 步骤 13. 如果单板状态显示为 ONLINE ,则表示单板WiFi连接成功

现在您可以从reRouter CM4 1432断开XIAO ESP32C3,并通过USB数据线为其供电。这是因为从现在开始,如果您想要将固件闪存到XIAO ESP32C3,您可以简单地通过OTA进行,而无需通过USB电缆连接到X86板。

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

2. 连接Grove模块并发送数据

现在我们将Grove模块连接到Seeed Studio XIAO ESP32C3,这样我们就可以显示传感器数据或使用家庭助理控制设备!

开发知识

XIAO 扩展板

为了将Grove模块与Seeed Studio XIAO ESP32C3一起使用,我们将使用Seeed Studio扩展基地用于XIAO并将XIAO ESP32C3连接在其上。

之后,可以使用板上的Grove连接器连接Grove模块。这里是引脚定义。

引脚定义

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

引脚编号端口
2D0
3D1
4D2
5D3
6D4
7D5
21D6
20D7
8D8
9D9
10D10
6SDA
7SCL

例如,如果要将Grove模块连接到D0端口,则需要将ESPHome上的引脚定义为2

Grove兼容性列表与ESPHome

目前ESPHome支持以下Grove模块

点击这里查看

3. 每个Grove连接和数据传输

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

Grove -温湿度传感器(BME680)

Grove -温度、湿度、压力和气体传感器(BME680)是一种多功能传感器,可以同时测量温度、压力、湿度和气体。它基于BME680模块,您可以在GPS,物联网设备或其他需要这四个参数的设备中使用该传感器。点击这里购买。

设置配置
esphome:
name: xiao-esp32c3
platformio_options:
board_build.flash_mode: dio

esp32:
board: seeed_xiao_esp32c3
variant: esp32c3
framework:
type: arduino
platform_version: 5.4.0

# Enable logging
logger:
hardware_uart: UART0

# Enable Home Assistant API
api:

ota:

wifi:
ssid: "UMASS fried chicken"
password: "Zacharyloveschicken"

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

captive_portal:

i2c:
sda: GPIO6
scl: GPIO7

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的传感器。这里我们添加I2C总线组件,因为AHT20使用IIC协议进行通信。

仪表板上可视化
  • 步骤 1. 在概述页的家庭助理, 单击3个点,并单击 Edit Dashboard
  • 步骤 2. + ADD CARD
  • 步骤 3. 选择 By ENTITY, 输入 temperature 并选择 check box 旁边 Temperature
  • 步骤 4.HumidityGas ResitancePressure重复相同的操作

  • 步骤 5. 点击 CONTINUE

  • 步骤 6. 点击 ADD TO DASHBOARD

现在,您的家庭助理仪表盘将如下所示

  • 步骤 7. 您还可以将传感器数据可视化为仪表。点击 Gauge 下面 BY CARD
  • 步骤 8. 选择下拉菜单中的 Temperature
  • 步骤 9. 点击SAVE

  • 步骤 10. 重复同样的步骤 Humidity, Gas ResitancePressure

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

Grove -Smart空气质量传感器(SGP41)

SGP41数字气体传感器采用盛思锐的CMOSens®技术,该技术在单芯片上提供了一个完整且易于使用的传感器系统。它可以测量室内空气中挥发性有机化合物(VOCs)和氮氧化物(NOx)的浓度,并提供数字输出信号。此外,该传感器具有出色的长期稳定性和使用寿命。点击这里购买。

设置配置
  • 步骤 2.xiao-esp32c3.yaml 文件我们之前创建的文件,更改文件并将其OTA推到XIAO ESP32C3
esphome:
name: xiao-esp32c3
platformio_options:
board_build.flash_mode: dio

esp32:
board: seeed_xiao_esp32c3
variant: esp32c3
framework:
type: arduino
platform_version: 5.4.0

# Enable logging
logger:
hardware_uart: UART0

# Enable Home Assistant API
api:

ota:

wifi:
ssid: "UMASS fried chicken"
password: "Zacharyloveschicken"

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

captive_portal:

spi:
clk_pin: GPIO8
mosi_pin: GPIO10
miso_pin: GPIO9

i2c:
sda: GPIO6
scl: GPIO7
scan: True
id: bus_a
frequency: 1MHz

sensor:
- platform: sgp4x
voc:
id: sgp41_voc
name: "VOC Index"
nox:
id: sgp41_nox
name: "NOx Index"

  • 步骤 3. (可选):包含用于补偿的传感器的块。如果没有设置,将使用默认值。我们将使用温湿度传感器(BME680)来补偿智能空气质量传感器(SGP41)。 这是更新后的 xiao-esp32c3.yaml 文件:
esphome:
name: xiao-esp32c3
platformio_options:
board_build.flash_mode: dio

esp32:
board: seeed_xiao_esp32c3
variant: esp32c3
framework:
type: arduino
platform_version: 5.4.0

# Enable logging
logger:
hardware_uart: UART0

# Enable Home Assistant API
api:

ota:

wifi:
ssid: "UMASS fried chicken"
password: "Zacharyloveschicken"

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

captive_portal:

spi:
clk_pin: GPIO8
mosi_pin: GPIO10
miso_pin: GPIO9

i2c:
sda: GPIO6
scl: GPIO7
scan: True
id: bus_a
frequency: 1MHz
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

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

注: 该传感器采集足够的数据样本需要90圈,目前无法避免警告。

仪表板上可视化

看到之前

Grove -模拟麦克风

Grove模拟麦克风是一种基于高性能SiSonic MEMS技术的麦克风,为开源硬件行业提供了极低噪声、低电流、可靠的小麦克风,在恶劣条件下提高了性能。点击这里购买。

设置配置

步骤1将Grove-模拟麦克风连接到seed Studio扩展底座上的A0连接器,用于XIAO

  • 步骤 2.xiao-esp32c3. yaml我们之前创建的文件中, 更改文件并将其通过OTA推送到XIAO ESP32C3
esphome:
name: xiao-esp32c3
platformio_options:
board_build.flash_mode: dio

esp32:
board: seeed_xiao_esp32c3
variant: esp32c3
framework:
type: arduino
platform_version: 5.4.0

# Enable logging
logger:
hardware_uart: UART0

# Enable Home Assistant API
api:

ota:

wifi:
ssid: "UMASS fried chicken"
password: "Zacharyloveschicken"

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

captive_portal:

spi:
clk_pin: GPIO8
mosi_pin: GPIO10
miso_pin: GPIO9

i2c:
sda: GPIO6
scl: GPIO7
scan: True
id: bus_a
frequency: 1MHz

binary_sensor:
- platform: gpio
pin: GPIO2
name: "Sound level"
device_class: sound

您可以查看有关二进制传感器组件的更多信息。

仪表板上可视化

查看之前

Grove -数字PIR传感器

PIR传感器是一种检测人体运动的红外传感器。该Grove数字PIR传感器是PIR系列中最便宜的PIR传感器,然而,它能够给出快速响应并从“sig”引脚产生高电平。点击这里购买。

设置配置
  • 步骤 2.xiao-esp32c3.yaml我们之前创建的文件里,更改文件并将其OTA推到XIAO ESP32C3
esphome:
name: xiao-esp32c3
platformio_options:
board_build.flash_mode: dio

esp32:
board: seeed_xiao_esp32c3
variant: esp32c3
framework:
type: arduino
platform_version: 5.4.0

# Enable logging
logger:
hardware_uart: UART0

# Enable Home Assistant API
api:

ota:

wifi:
ssid: "UMASS fried chicken"
password: "Zacharyloveschicken"

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

captive_portal:

spi:
clk_pin: GPIO8
mosi_pin: GPIO10
miso_pin: GPIO9

i2c:
sda: GPIO6
scl: GPIO7
scan: True
id: bus_a
frequency: 1MHz

binary_sensor:
- platform: gpio
pin: GPIO20
name: "PIR Sensor"
device_class: motion
仪表板上可视化

查看之前

显示(SSD1306) 在 XIAO 扩展板

设置配置
  • 步骤 1. 下载喜欢的文件显示,点击这里参考

  • 步骤 2. 通过 Setting >>> Add-ons >>> File editor 来安装"File editor"

  • 步骤 3. 点击File editor >>> 输入路径: config/esphome >>> uoload 你喜欢的文件
  • 步骤 4.xiao-esp32c3.yaml 我们之前创建的文件中, 更改文件并将其OTA推到XIAO ESP32C3
esphome:
name: xiao-esp32c3
platformio_options:
board_build.flash_mode: dio

esp32:
board: seeed_xiao_esp32c3
variant: esp32c3
framework:
type: arduino
platform_version: 5.4.0

# Enable logging
logger:
hardware_uart: UART0

# Enable Home Assistant API
api:

ota:

wifi:
ssid: "UMASS fried chicken"
password: "Zacharyloveschicken"

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

captive_portal:

spi:
clk_pin: GPIO8
mosi_pin: GPIO10
miso_pin: GPIO9

i2c:
sda: GPIO6
scl: GPIO7
scan: True
id: bus_a
frequency: 1MHz

display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
address: 0x3C
lambda: |-
it.print(0, 0, id(font), "Wi-fi Connected");

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

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

binary_sensor:
- platform: gpio
pin: GPIO20
name: "PIR Sensor"
device_class: motion

- platform: gpio
pin: GPIO2
name: "Sound level"
device_class: sound

您可以更多地了解ESPHome强大的渲染和显示引擎所在的显示组件点击这里

✨ 项目贡献者

这个项目是由Seeed Studio贡献者项目支持的。

-感谢李新平的努力,您的作品将被展出

技术支持和产品讨论

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

Loading Comments...