配置类型

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使用D0D8的引脚名称作为内部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

高级选项:

  • drive_strength (可选,字符串):在具有esp-idf框架的ESP32上,可以额外设置引脚驱动强度,即最大电流。默认为20mA。选项为5mA10mA20mA40mA

  • 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相同

参见