从零搭建一个Home Assistant信息屏
目标:把正点原子的ESP32S3-BOX3变成HomeAssistant的一个温湿度显示节点
1. 正点原子ESPS32S3-BOX3
ESP32S3-BOX3是一块基于ESP32 S3、带2.4寸 SPI接口LCD的开发板,还带摄像头、扬声器、麦克风、三轴加速度计等等扩展功能,当然少不了ESP32看家的BT+2.4G WIFI。可以用一根USB线连接电脑,实现供电+烧录固件。拿来练手挺合适,只是屏幕太小,显示不了太多东西。
详细配置及开发文档请见:
[https://wiki.alientek.com/docs/category/dnesp32s3-box3开发板]
2. ESPHome和HomeAssistant
ESPHome 是一个专为智能家居打造的开源固件框架和配置系统。它的核心使命是简化开发流程,让用户无需编写复杂的 C++ 代码,仅通过简单的 YAML 配置文件,就能将常见的微控制器(如 ESP32、ESP8266 等)转化为功能强大的智能家居设备。
关于如何在HomeAssistant中安装ESPHome插件,问问AI便知。实际上,这个插件(Device Builder)是个开发编译环境,用它来生成可执行代码并烧录到ESP32的板子中。
安装完成后HomeAssistant的web页面左侧边栏会出现ESPHome Builder。

当通过插件成功编译并烧录了第一个 ESPHome 设备,且设备连接到与 Home Assistant 相同的局域网后,Home Assistant 会自动发现该设备,并提示添加“ESPHome 集成”。只需点击确认,输入 YAML 配置中的 API 加密密钥(API Key)即可完成无缝接入。如果没有提示,也可手动添加这个集成。
3. 在ESPHome中创建设备
3.1 创建空设备
点击右下角的“创建设备”,在弹出窗口中点“高级设备选项”->“空配置”。如果确切知道自己手里的硬件配置和目标,可以利用wizard等工具加速创建新设备。在这里为了避免过多无关因素的干扰,我们从“空设备”开始创建这个能显示温湿度的信息面板。

在“创建空配置”窗口中填入设备名称和主机名

一个空设备“box3-info-panel”键好了。左侧是配置的快速导航,中间是配置的具体内容,右侧显示的是设备配置yaml文件,会随着中间部分的改变自动同步,也可以直接编辑。

根据开发板的主控芯片修改“核心配置”,完成之后yaml看起来是这样的
esphome:
name: box3-info-panel
friendly_name: BOX3信息面板
# Replace this with your actual platform if you aren't using ESP32.
esp32:
board: esp32-s3-devkitc-1
variant: ESP32S3
cpu_frequency: 240MHZ
flash_frequency: 80MHZ
flash_mode: qio
flash_size: 16MB
framework:
type: esp-idf
api:
encryption:
key: "***********************************"
ota:
- platform: esphome
allow_partition_access: true
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: BOX3信息面板 Fallback Hotspot
password: "*********"
captive_portal:
3.2 添加IO扩展芯片
接下来根据开发板的外设添加组件
为了通过I2C扩展IO,板子上用了一颗AW9523B。但组件列表里搜不到AW9523B,可以通过添加“External Components”的方式加入外部驱动代码。
借助AI找到AW9523B的驱动代码:
| 文件 | 说明 |
|---|---|
__init__.py |
Python 配置解析器,定义组件 schema 和引脚注册 |
aw9523b.h |
C++ 头文件,定义类结构和寄存器地址 |
aw9523b.cpp |
C++ 实现,包含 I2C 读写、GPIO 控制、ESPHome 2026.x 兼容性修复 |
利用SSH工具,上传这几个文件到如下ESPHome目录结构中(与YAML配置文件同级),如果有更多第三方的驱动代码,可以用同样的方式放到“components”下面
当前配置目录/
├── box3-info-panel.yaml
└── components/
└── aw9523b/
├── __init__.py
├── aw9523b.h
└── aw9523b.cpp
在“核心配置”里点“添加配置”,选择"External Components",选择Type “local”,Path “components”,点击“添加”。

YAML文件会出现这几行:
external_components:
source:
type: local
path: components
关于External Components的更多信息,请参考文档
添加I2C组件。点击左侧导航栏里的“添加组件”,在弹出窗口中搜索“i2c”,点击“I2C Bus”添加这个组件。

根据开发板的硬件调整i2c的管脚设置。yaml会加入这样几行。
i2c:
- id: bus_a
scl: GPIO2
sda: GPIO3
再添加“Generic I2C device component”,并修改YAML中的组件名称、id及地址为:
aw9523b:
- id: aw9523_hub
address: "0x59"
3.3 添加LCD背光开关
LCD背光的开启/关闭由AW9523B的P1_0脚控制。添加“GPIO Switch”组件,并修改YAML为:
switch:
- platform: gpio
name: LCD EN
id: lcd_en
pin:
aw9523b: aw9523b_hub
number: 8
mode: output
inverted: true
restore_mode: ALWAYS_ON
3.4 添加温湿度传感器
从 Home Assistant 导入一个小米温湿度传感器的数据。先在HA中找到温湿度计的温度实体,复制“实体标识符”。回到ESPHome,在“添加组件”窗口搜索“homeassistant”,点击列表中的“Home Assistant Sensor”,粘贴到entity_id,点击添加。用同样的方法添加湿度传感器。调整这两个sensor的各项设置,最后得到如下的YAML代码:
sensor:
- platform: homeassistant
name: Room Temperature
id: ha_temp
entity_id: sensor.miaomiaoc_cn_blt_3_xxxxxxxxxx_t9_temperature_p_3_1001
unit_of_measurement: °C
device_class: temperature
icon: "mdi:thermometer"
- platform: homeassistant
name: Room Humidity
id: ha_hum
entity_id: sensor.miaomiaoc_cn_blt_3_xxxxxxxxxx_t9_relative_humidity_p_3_1002
icon: "mdi:water-percent"
device_class: humidity
unit_of_measurement: "%"
3.5 添加显示字体
有多种添加显示字体集的方式,可以是本地字体文件、在线字体拉取等等。中文字符集太大,可以使用 glyphs 字段,只保留实际需要用到的字符。ESPHome 编译时会自动裁剪,能把字体体积从几 MB 压到几十 KB,既节省 Flash 空间,又能大幅缩短编译时间。这里设置使用在线拉取“Noto Sans SC@400”,剪裁到特定的一些中英文字符。
font:
- id: my_font
file: "gfonts://Noto Sans SC@400"
size: 32
glyphs:
- "0123456789℃%.:°ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 室内温湿度时间年月日分秒天气晴雨风星期一二三四五六"
如果想使用本地字体文件,可以把字体文件放在与本设备yaml配置文件同级的目录fonts里,比如微软的等线体 Deng.ttf。
font:
- id: my_font
file: "fonts/Deng.ttf"
size: 32
glyphs:
- "0123456789℃%.:°ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 室内温湿度时间年月日分秒天气晴雨风星期一二三四五六"
3.6 添加颜色
添加组件“Color”三次。
color:
- id: color_white
hex: FFFFFF
- id: color_green
hex: 1ADD1A
- id: color_blue
hex: 4E79A7
3.7 添加LCD控制器的驱动
这块开发板的LCD是mipi接口,驱动芯片用了一颗ST7789V,通过SPI与ESP32 S3主控通讯。
首先添加组件“SPI Bus”,设置正确的Clock、MISO和MOSI管脚。
spi:
- id: spi_1
clk_pin: GPIO15
miso_pin: GPIO17
mosi_pin: GPIO16
然后添加组件“MIPI SPI Display Driver”。根据实际的硬件选择驱动型号,这块LCD用的是ST7789V。给控制信号(CS、DC等)设置正确的ESP32引脚。在“Dimension”里设置LCD高、宽像素点。
最后还要添加一段lamba代码才能把温湿度按指定的方式显示在LCD上。
display:
- platform: mipi_spi
id: box3_display
model: ST7789V
spi_id: spi_1
update_interval: 1s
cs_pin: GPIO47
dc_pin: GPIO48
dimensions:
height: 320
width: 240
offset_height: 0
offset_width: 0
pad_height: 0
pad_width: 0
lambda: |-
// 清空屏幕背景
it.fill(id(color_blue));
// 显示 HA 传感器数据
if (id(ha_temp).has_state()) {
it.printf(10, 90, id(my_font), id(color_green), "温度: %.1f℃", id(ha_temp).state);
}
if (id(ha_hum).has_state()) {
it.printf(10, 130, id(my_font), id(color_green), "湿度: %.0f%%", id(ha_hum).state);
}
invert_colors: true
rotation: "90"
3.8 编译及烧录
到此一个能显示温湿度的信息屏就设置完成了。第一次烧录固件需要通过USB,以后都可以通过WIFI OTA更新。用USB连接开发板到本地电脑(不需要连到运行HA的服务器上),点击“安装”按钮,在弹窗中选择“插入此电脑”。

耐心等待编译完成。

点击右下角“打开USB闪存器”,选择通信端口以后点击“连接”,开始烧录。

一个简单的信息屏完成了。
