配置类型
ESPHome的配置文件有几种配置类型。本页面将描述它们。
ID
ESPHome的一个重要方面是“ID”。它们用于连接不同域的组件。例如,你定义了一个输出组件并一起赋予一个ID,然后稍后在灯光组件中指定相同的ID。ID应该在配置中始终是唯一的,如果你尝试使用相同的ID两次,ESPHome会警告你。
由于ESPHome将你的配置转换为C++代码,而ID实际上只是C++变量名,因此它们也必须遵循C++的命名约定。C++变量名
- …必须以字母开头,可以以数字结尾。
- …名称中不能有空格。
- …除了下划线(“_“)外,不能有特殊字符。
- …不能是关键字。
ℹ️ Note
这些ID仅在ESPHome内部使用,不会翻译为Home Assistant的实体ID。
Pin
ESPHome始终使用芯片内部GPIO编号。这些内部编号总是整数,如16
,并且可以以GPIO
为前缀。例如,要使用具有内部GPIO编号16的引脚,你可以输入GPIO16
或直接输入16
。
然而,大多数主板对某些引脚有别名。例如,NodeMCU ESP8266使用D0
到D8
的引脚名称作为内部GPIO引脚编号的别名。每个主板(定义在ESPHome部分)都有自己的别名,因此并非所有别名都得到支持。例如,NodeMCU ESP8266上的D0
(如PCB丝印上所示)引脚具有内部GPIO名称GPIO16
,但也具有别名D0
。因此,在配置中使用这些名称中的任何一个都将导致相同的结果。
some_config_option:
pin: GPIO16
some_config_option:
# NodeMCU ESP8266上的别名:
pin: D0
Pin Schema
在某些情况下,ESPHome还支持更高级的“引脚模式”。
some_config_option:
# 基本设置:
pin: GPIOXX
# 高级设置:
pin:
number: GPIOXX
inverted: true
mode:
input: true
pullup: true
配置变量:
number (必需,引脚):引脚编号。
inverted (可选,布尔值):如果所有读取和写入的值应该被视为反转。默认为
false
。allow_other_uses (可选,布尔值):如果引脚在配置中的其他地方也进行了指定。默认情况下,多次使用同一引脚会被标记为错误。此选项将抑制错误,并适用于引脚在多个组件之间共享的罕见情况。默认为
false
。mode (可选,字符串或映射):配置引脚以在不同的模式下工作,如输入或输出。默认值取决于上下文。可以接受简短字符串或映射,其中每个功能都可以单独启用/禁用:
- input (可选,布尔值):如果为
true
,则将引脚配置为输入。 - output (可选,布尔值):如果为
true
,则将引脚配置为输出。 - pullup (可选,布尔值):在引脚上激活内部上拉电阻。
- pulldown (可选,布尔值):在引脚上激活内部下拉电阻。
- open_drain (可选,布尔值):将引脚设置为开漏(相对于推挽)。然后,激活的引脚状态将导致高阻抗状态。
为了兼容性,某些简短模式也可以使用。
INPUT
OUTPUT
OUTPUT_OPEN_DRAIN
ANALOG
INPUT_PULLUP
INPUT_PULLDOWN
INPUT_OUTPUT_OPEN_DRAIN
- input (可选,布尔值):如果为
高级选项:
drive_strength (可选,字符串):在具有esp-idf框架的ESP32上,可以额外设置引脚驱动强度,即最大电流。默认为
20mA
。选项为5mA
,10mA
,20mA
,40mA
。ignore_strapping_warning (可选,布尔值):ESP32上的某些引脚被指定为配置引脚,并在芯片复位时读取以配置初始操作,例如启用启动模式。应避免使用这些引脚进行I/O,如果I/O配置在配置引脚上,ESPHome会发出警告。
更多详情请参阅为什么我收到关于配置引脚的警告?。
如果你绝对确定你在以不会引起问题的方式使用配置引脚进行I/O,可以通过在引脚配置中将此选项设置为
true
来抑制警告。
Time
在ESPHome的许多地方,你需要定义时间段。有几种方法可以做到这一点。以下示例展示了如何指定时间段:
some_config_option:
some_time_option: 1000us # 1000微秒 = 1毫秒
some_time_option: 1000ms # 1000毫秒
some_time_option: 1.5s # 1.5秒
some_time_option: 0.5min # 半分钟
some_time_option: 2h # 2小时
# 确保将这些用引号括起来
some_time_option: '2:01' # 2小时1分钟
some_time_option: '2:01:30' # 2小时1分钟30秒
# 10毫秒 + 30秒 + 25分钟 + 3小时
some_time_option:
milliseconds: 10
seconds: 30
minutes: 25
hours: 3
days: 0
# 对于所有'update_interval'选项,也
update_interval: never # 从不更新
update_interval: 0ms # 在每个loop()迭代中更新
update_interval: always # 与0ms相同