跳转到内容

带 LED 驱动器和键盘引擎的 SX1509 16 通道 I/O 扩展器

SX1509 组件允许你扩展 I/O 能力: (数据手册, SparkFun)。它使用 I²C 总线 进行通信。

配置完成后,你可以将 16 个引脚中的任意一个用作项目的引脚。 在 ESPHome 中,它们模拟真实的内部 GPIO 引脚, 因此可以与 ESPHome 的许多组件一起使用,如 GPIO 二进制传感器或 GPIO 开关。 SX1509 除了简单的数字引脚控制之外还能做更多事情。它可以产生 PWM 信号。 并且,通过内置的键盘引擎,它可以连接最多 64 个按钮,排列成 8x8 矩阵。

任何接受 引脚模式 的选项理论上都可以使用,但一些使用引脚模式的更复杂组件将无法工作。例如 I²C 或 SPI 引脚。

SX1509 16 通道 I/O 扩展器
# SX1509 设备的示例配置条目
sx1509:
- id: sx1509_hub1
address: 0x3E
# 如果你需要键盘
keypad:
key_rows: 3
key_columns: 4
sleep_time: 256
scan_time: 2
debounce_time: 1
  • id (必选, ID): 用于此 SX1509 组件的 id。
  • address (可选, int): 驱动器的 I²C 地址。 默认为 0x3E。

SX1509 集成了完全可编程的键盘扫描引擎,以实现键盘应用, 最多支持 8x8 矩阵(即 64 个键)。

  • keypad (可选): 添加此项以启用键盘。

    • key_rows (必选, int): 要使用的键盘行数。这将启用前 8 个引脚中的任意数量。 因此值为 3 时启用引脚 0、1、2 用作键盘矩阵的行。此值必须在 2 到 8 之间。

    • key_columns (必选, int): 要使用的键盘列数。这将启用最后 8 个引脚中的任意数量。 因此值为 4 时启用引脚 8、9、10、11 用作键盘矩阵的列。此值必须在 1 到 8 之间。

    • sleep_time (可选, int): 在此时间内没有按键将使键盘引擎进入睡眠。

    • scan_time (可选, int): 每行的扫描时间(必须大于去抖动时间)。

    • debounce_time (可选, int): 去抖动时间对所有 IO 通用。

    • keys (可选, string): 矩阵上存在的键,从左上角到右下角, 逐行排列。key_collector 需要此项。

    • on_key (可选, Automation): 当按下键时要执行 的自动化。键在一个名为 x 的变量中。

SX1509 键盘设置引脚(图片来自数据手册)

NOTE

可以使用 键收集器 组件自动处理多个键(例如 PIN 码输入)。

请注意 I/O 引脚的功能。

I/O输入输出 PWM行列
0✓✓
1✓✓
2✓✓
3✓✓
4✓✓
5✓✓
6✓✓
7✓✓
8✓✓
9✓✓
10✓✓
11✓✓
12✓✓
13✓✓
14✓✓
15✓✓

要使用键盘上的各个键,需要在配置中添加单独的 binary_sensor 条目。

# 键盘键的单独 binary_sensor
binary_sensor:
- platform: sx1509
sx1509_id: sx1509_hub1
name: "keypadkey_0"
row: 0
col: 0
- platform: sx1509
sx1509_id: sx1509_hub1
name: "keypadkey_1"
row: 0
col: 1
  • row (必选, int): 此键在键盘上的行号。
  • col (必选, int): 此键在键盘上的列号。

通过以下配置项,你可以将 SX1509 的各个引脚用作 binary_sensor、switch 或 output 的引脚。 输出可以进一步用于添加支持 PWM 的灯,如单色灯。

# 单独的 binary_sensor 输入
binary_sensor:
- platform: gpio
name: "SX1509 Pin #0"
pin:
sx1509: sx1509_hub1
# 使用 SX1509 上的引脚号 0
number: 0
mode:
input: true
pullup: true
inverted: true
# 单独的二级输出
switch:
- platform: gpio
name: "SX1509 Pin #1"
pin:
sx1509: sx1509_hub1
# 使用 SX1509 上的引脚号 1
number: 1
# 用作开关的输出
mode:
output: true
inverted: false
# 单独的输出
output:
- platform: sx1509
sx1509_id: sx1509_hub1
id: 'sx1509_output'
# 使用 SX1509 上的引脚号 2
pin: 2
# 灯可以使用配置的输出
light:
- platform: monochromatic
id: light0
name: "light0"
output: sx1509_output
  • sx1509 (必选, ID): 引脚所属的 SX1509 组件的 id。

  • number (必选, int): 引脚号。

  • inverted (可选, boolean): 是否将所有读取和写入的值 视为反转。默认为 false。

  • mode (可选, string): 为此引脚设置的引脚模式。可选 INPUT、 INPUT_PULLUP、OUTPUT 或 OUTPUT_OPEN_DRAIN。