跳转到内容

I²C 总线

此组件为你的 esp32、esp8266、rp2040、nrf52 或 host 平台设置 I²C 总线。为了让这些组件 正常工作,你需要在配置中定义 I²C 总线。在 ESP32 上(Arduino 和 ESP-IDF 框架均可),内部上拉电阻默认启用。在 ESP8266 上,内部 10kΩ 上拉电阻 始终启用。对于较长的布线或多个设备,仍然建议使用外部上拉电阻。 你可以在一条 I²C 总线上使用多个设备,因为每个设备都被赋予一个 唯一地址用于与 ESP 通信。你可以通过将两条线(SDA 和 SCL)从每个设备板 依次跳线到下一个设备板来实现,或者将每个设备的线都连回 ESP 上的两个 I²C 引脚。

# Example configuration entry for ESP32
i2c:
sda: GPIOXX
scl: GPIOXX
scan: true
id: bus_a
# Example configuration entry for host platform
i2c:
device: /dev/i2c-1
scan: true
  • id(可选,ID):如果你需要多个 I²C 总线,手动指定此 I²C 总线的 ID。

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

  • frequency(可选,frequency):设置 I²C 总线的工作频率。 默认值为 50kHz。取值有 10kHz、50kHz、100kHz、200kHz、… 800kHz。

  • sda(可选,Pin):I²C 总线数据线的引脚。 默认为你的开发板默认引脚(ESP32 通常为 GPIO21,ESP8266 通常为 GPIO4)。

  • scl(可选,Pin):I²C 总线时钟线的引脚。 默认为你的开发板默认引脚(ESP32 通常为 GPIO22,ESP8266 通常为 GPIO5)。

  • timeout(可选,Time):设置 I²C 总线超时时间。 默认为框架默认值(esp32 上为 100us,esp8266 上为 1s,rp2040 上为 1s)。 esp32 上最大为 13ms。

  • sda_pullup_enabled(可选,boolean):启用 SDA 引脚的内部上拉电阻。 默认值为 true。

  • scl_pullup_enabled(可选,boolean):启用 SCL 引脚的内部上拉电阻。 默认值为 true。

  • low_power_mode(可选,boolean):启用低功耗(仅主模式)I²C 总线。 仅在 ESP32C5、ESP32C6 和 ESP32P4 上可用。默认值为 false,除非必需。

  • device(必选,string):要使用的 I²C 设备路径(例如 /dev/i2c-0、/dev/i2c-1)。

如果设备支持多个 I²C 总线,它们需要单独定义,并且传感器需要指定正确的总线:

# Example configuration entry
i2c:
- id: bus_a
sda: GPIOXX
scl: GPIOXX
scan: true
- id: bus_b
sda: GPIOXX
scl: GPIOXX
scan: true
# Sensors should be specified as follows
sensor:
- platform: bme680
i2c_id: bus_b
address: 0x76

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