跳转到内容

Modbus 组件

许多消费类和工业设备都使用 Modbus 协议进行通信。 此组件允许 ESPHome 中的组件通过 RTU 协议与这些设备通信。你可以将设备上的线圈、输入、保持寄存器、读取寄存器作为传感器、开关、选择器、数字或其他各种 ESPHome 组件来访问,并将它们呈现给你最喜欢的家庭自动化系统。你甚至可以从 ESPHome 以二进制或浮点输出的形式写入它们。

各种子组件实现下面的一些 Modbus 功能(取决于它们所需的功能):

功能码描述
1读取线圈状态
2读取离散输入状态
3读取保持寄存器
4读取输入寄存器
5写入单个线圈
6写入单个寄存器
15写入多个线圈
16写入多个寄存器

Modbus RTU 需要 UART 总线 进行通信。

# 示例配置条目
uart:
...
modbus:
  • id (可选, ID): 手动指定用于代码生成的 ID。

  • uart_id (可选, ID): 如果你想使用多个 UART 总线, 请手动指定 UART 组件 的 ID。

  • flow_control_pin (可选, Pin): 用于切换流控制的引脚。 这对于没有自动流控制切换功能的 RS485 收发器很有用, 例如常见的 MAX485。如果你的 UART 支持 flow_control_pin,你应该在 uart 组件中配置它,而不是在 modbus 组件中。

  • send_wait_time (可选, Time): 当上一个命令的应答尚未开始时,发送下一条 ModBUS 命令前等待的时间(毫秒)(即何时超时并假定不会收到响应)。默认为 2000 ms。 将此值设置为总线上最慢设备开始响应(到第一个字节的时间)所需的最大时间。 如果设备在此时间内开始响应,则下一条命令将被排队并在响应完成后发送,无论响应多长。 此选项仅在 role 为 client 时有效。

  • turnaround_time (可选, Time): 收到最后一条响应后,发送下一条 ModBUS 命令前等待的时间(毫秒)。此间隔为总线上的其他设备留出处理消息的时间。默认为 600 ms。 理想情况下,此值应设置为总线上最慢设备处理一条消息并为处理另一条消息做好准备所需的最大时间。请注意,所有设备都会收到所有消息,并且即使它们不需要应答,也需要时间来处理。 如果设备有时不响应,增加此值可能会有帮助。 此选项仅在 role 为 client 时有效。

  • role (可选, string): 此组件充当的角色,client 或 server。默认为 client。