跳转到内容

伺服组件

servo 组件允许你在 ESPHome 中使用舵机电机。舵机是 包含驱动电机所需的所有电子器件并提供 简单的 PWM 接口来控制电机的电机控制器。

此组件同时适用于连续旋转舵机和绝对角度舵机,并且具有与 Arduino Servo 库类似的接口。

首先,为舵机所连接的引脚创建一个输出组件(这里是 esp8266_pwm)。然后通过分配一个 ID 将该输出连接到 servo 组件。 请注意,输出的频率应约为 50Hz,因为大多数舵机控制器 只在此频率范围内工作。

NOTE

此组件不会自动出现在 Home Assistant 前端中,因为 Home Assistant 不支持舵机。请参见 Home Assistant 配置。

# 示例配置条目
servo:
- id: my_servo
output: pwm_output
# 示例输出平台
# 在 ESP32 上,使用 ledc 输出
output:
- platform: esp8266_pwm
id: pwm_output
pin: GPIOXX
frequency: 50Hz
  • output (必选, ID): 用于此舵机的输出组件的 ID。

  • id (必选, ID): 此舵机的 ID,以便可以控制它。

高级选项:

  • min_level (可选, percentage): 最小值(-100%)将映射到的 PWM 占空比。默认为 3%。

  • idle_level (可选, percentage): 空闲值(0%)将映射到的 PWM 占空比。这也是舵机在启动时的状态。默认为 7.5%。

  • max_level (可选, percentage): 最大值(100%)将映射到的 PWM 占空比。默认为 12.0%。

  • restore (可选, boolean): 是否在启动时恢复舵机电机的状态。 如果你有一个绝对角度舵机,并且它在启动时会回到 0 位置,这会很有用。 默认为 false。

  • auto_detach_time (可选, Time): 达到目标值后舵机将被分离的时间;如果设为零,舵机将不会被分离。默认为 0s。

  • transition_length (可选, Time): 完成一次完整运动(-1.0 到 1.0)所需的时间。这实际上会限制舵机的速度,值越大,舵机动得越慢。默认为 0s。 这可以减慢舵机以避免发出嘈杂的声音,或者仅仅让运动不显得生硬。

NOTE

有些舵机支持更大的电平范围。对于连续旋转舵机, 这可以稍微加快它们的速度,对于绝对角度舵机,这可以扩展它们的角度范围。 你可以配置 min_level 和 max_level 选项来调整电平范围 以匹配你的舵机(试验这些值)。

要在自动化或模板中使用你的舵机电机,你可以使用此操作将 舵机的目标电平设置在 -100% 到 100% 之间。

  • -100%(= -1.0)是舵机的最小值。对于连续旋转舵机,这将 使舵机向后旋转。

  • 0%(= 0.0)是舵机的空闲电平。对于连续旋转舵机,这将 使舵机停止。

  • 100%(= 1.0)是舵机的最大值。对于连续旋转舵机,这将 使舵机向前旋转。

on_...:
then:
- servo.write:
id: my_servo
level: -100.0%
# 模板化
- servo.write:
id: my_servo
# 对于模板值,范围是 [-1; 1]
level: !lambda |-
if (id(my_binary_sensor).state) {
return 1.0;
} else {
return -1.0;
}

配置选项:

  • id (必选, ID): 舵机的 ID。
  • level (必选, percentage, 可模板化): 目标电平。 范围是从 -100% 到 100%(-1.0 到 1.0)。

NOTE

此操作也可以表示为 lambda:

id(my_servo).write(1.0);

此操作允许你禁用舵机电机的输出—— 这将使舵机电机立即停止并禁用其主动控制。

on_...:
then:
- servo.detach: my_servo

NOTE

此操作也可以表示为 lambda:

id(my_servo).detach();

从 Home Assistant 控制你的舵机的最简单方法是在你的 ESPHome 配置中添加一个 number。参见 Number 了解更多信息。

number:
- platform: template
name: Servo Control
min_value: -100
initial_value: 0
max_value: 100
step: 1
optimistic: true
set_action:
then:
- servo.write:
id: my_servo
level: !lambda 'return x / 100.0;'
servo:
- platform: ...
# [...] 伺服配置
id: my_servo