跳转到内容

I²C 总线

此组件为您的 ESP32、ESP8266、RP2040 或 NRF52 设置 I²C 总线。为了让这些组件 正常工作,您需要在配置中定义 I²C 总线。在 ESP32 上(Arduino 和 ESP-IDF 框架),默认启用内部上拉电阻。在 ESP8266 上,内部 10kΩ 上拉电阻始终启用。对于较长的线路或多个设备,仍然建议使用外部上拉。 您可以在一个 I²C 总线上使用多个设备,因为每个设备都有 一个唯一地址用于它与 ESP 之间的通信。您可以通过将两根线(SDA 和 SCL)从每个设备板跳线到下一个设备板,或 将每个设备的线连接回 ESP 上的两个 I²C 引脚来做到这一点。

# ESP32 示例配置项
i2c:
sda: GPIOXX
scl: GPIOXX
scan: true
id: bus_a
  • sda (Optional, Pin): I²C 总线数据线的引脚。 默认为您板子的默认值(通常 ESP32 为 GPIO21,ESP8266 为 GPIO4)。

  • scl (Optional, Pin): I²C 总线时钟线的引脚。 默认为您板子的默认值(通常 ESP32 为 GPIO22, ESP8266 为 GPIO5)。

  • scan (Optional, boolean): ESPHome 是否应在启动时搜索 I²C 地址空间。 默认为 true

  • frequency (Optional, frequency): 设置 I²C 总线应运行的频率。 默认为 50kHz。NRF52 的默认值为 100kHz。值为 10kHz50kHz100kHz200kHz800kHz。 NRF52 仅支持 100kHz400kHz

  • timeout (Optional, Time): 设置 I²C 总线超时。 默认为框架默认值(esp32 上为 100usesp8266 上为 1srp2040 上为 1s)。 esp32 上最大为 13ms。

  • sda_pullup_enabled (Optional, boolean): 启用 SDA 引脚的内部上拉电阻。 默认为 true。仅适用于 ESP32。

  • scl_pullup_enabled (Optional, boolean): 启用 SCL 引脚的内部上拉电阻。 默认为 true。仅适用于 ESP32。

  • low_power_mode (Optional, boolean): 启用低功耗(仅主机)I²C 总线。 仅适用于 ESP32C5、ESP32C6 和 ESP32P4。除非需要,否则默认为 false

  • id (Optional, ID): 如果需要多个 I²C 总线,手动为此 I²C 总线指定 ID。

NOTE

如果设备可以支持多个 I²C 总线,这些总线需要按如下方式定义,传感器需要指定正确的总线进行设置:

# 示例配置项
i2c:
- id: bus_a
sda: GPIOXX
scl: GPIOXX
scan: true
- id: bus_b
sda: GPIOXX
scl: GPIOXX
scan: true
# 传感器应按如下方式指定
sensor:
- platform: bme680
i2c_id: bus_b
address: 0x76
# ...

有关 I²C 多路复用,请参阅 Tca9548A