步进电机组件
stepper 组件允许您在 ESPHome 中使用步进电机。
目前仅支持 A4988 步进驱动器
(数据手册)
和 ULN2003(数据手册)。
NOTE
此组件不会自动显示在 Home Assistant 前端,因为 Home Assistant 不支持步进电机。请参阅 Home Assistant 配置。
基本步进电机配置
Section titled “基本步进电机配置”所有步进电机配置模式继承这些选项。
配置变量:
-
max_speed (必填, float):驱动步进电机的最大速度,单位为
steps/s(每秒步数)。请注意,大多数步进电机无法以高于 250 steps/s 的速度正常步进。 -
acceleration (可选, float):开始移动时使用的加速度,单位为
steps/s^2(每秒平方步数)。默认为inf,表示无限加速度,因此步进电机将尝试立即以全速驱动。如果电机的第一次运动对于它所移动的内容来说太急促,此值很有帮助。如果将其设置为较小的数值,电机需要片刻才能加速到速度。 -
deceleration (可选, float):与
acceleration相同,但用于电机在达到设定位置前不久减速时。默认为inf(立即减速)。
A4988 组件
Section titled “A4988 组件”将此代码放入此设备的 ESPHome 配置文件中。
stepper: - platform: a4988 id: my_stepper step_pin: GPIOXX dir_pin: GPIOXX max_speed: 250 steps/s
# 可选: sleep_pin: GPIOXX acceleration: inf deceleration: inf配置变量:
-
id (必填, ID):指定步进电机的 ID,以便您可以控制它。
-
step_pin (必填, 引脚模式):A4988 步进驱动器的
STEP引脚。 -
dir_pin (必填, 引脚模式):A4988 步进驱动器的
DIRECTION引脚。 -
sleep_pin (可选, 引脚模式):可选地同时使用 A4988 步进驱动器的
SLEEP引脚。如果指定,当步进电机达到目标步数时,驱动器将立即进入睡眠模式。 -
基本步进电机配置的所有其他选项。
NOTE
如果步进电机朝错误方向驱动,您可以反转 dir_pin:
stepper: - platform: a4988 # ... dir_pin: number: GPIOXX inverted: trueNOTE
TMC 驱动器与 A4988 引脚兼容,但不是 SLEEP 引脚,它们暴露的是 ENABLE 引脚。
当使用 TMC 驱动器与 a4988 平台时,您需要反转 sleep_pin:
stepper: - platform: a4988 # ... sleep_pin: number: GPIOXX inverted: trueULN2003 组件
Section titled “ULN2003 组件”将此代码放入此设备的 ESPHome 配置文件中。
# 示例配置条目stepper: - platform: uln2003 id: my_stepper pin_a: GPIOXX pin_b: GPIOXX pin_c: GPIOXX pin_d: GPIOXX max_speed: 250 steps/s
# 可选: acceleration: inf deceleration: inf配置变量:
-
id (必填, ID):指定步进电机的 ID,以便您可以控制它。
-
pin_a (必填, 引脚模式):步进控制板的引脚 a。
-
pin_b (必填, 引脚模式):步进控制板的引脚 b。
-
pin_c (必填, 引脚模式):步进控制板的引脚 c。
-
pin_d (必填, 引脚模式):步进控制板的引脚 d。
-
sleep_when_done (可选, boolean):当步进电机达到目标位置时是否关闭所有线圈
-
step_mode (可选, string):操作电机的步进模式。可选:
FULL_STEP(默认)HALF_STEPWAVE_DRIVE
-
基本步进电机配置的所有其他选项。
stepper.set_target 动作
Section titled “stepper.set_target 动作”要在 自动化 或模板中使用步进电机,可以使用此动作设置目标位置(以步数为单位)。步进电机将始终朝目标位置运行,并在达到目标后停止。
on_...: then: - stepper.set_target: id: my_stepper target: 250
# 使用模板 - stepper.set_target: id: my_stepper target: !lambda |- if (id(my_binary_sensor).state) { return 1000; } else { return -1000; }配置选项:
WARNING
这会将步进电机转到绝对位置!要让步进电机相对于当前位置移动,首先重置当前位置,然后将目标设置为相对值。
on_...: then: # 向前移动 150 步 - stepper.report_position: id: my_stepper position: 0 - stepper.set_target: id: my_stepper target: 150stepper.report_position 动作
Section titled “stepper.report_position 动作”所有步进电机在启动时目标和当前位置都从 0 开始。但是,例如如果您想对步进电机进行归位,报告步进电机当前所在位置可能很有用。
使用此动作,您可以将步进电机的内部位置计数器设置为特定值(以步数为单位)。请注意,报告位置可能会导致步进电机意外移动。例如,如果步进电机的目标和当前位置是 1000 步,而您”报告”位置为 0,步进电机将向前移动 1000 步以再次匹配目标。
on_...: then: - stepper.report_position: id: my_stepper position: 250 # 最好在 report_position 之后直接调用 set_target,这样步进电机就不会移动 - stepper.set_target: id: my_stepper target: 250
# 使用模板 - stepper.report_position: id: my_stepper position: !lambda |- if (id(my_binary_sensor).state) { return 0; } else { return -1000; }配置变量:
stepper.set_speed 动作
Section titled “stepper.set_speed 动作”此 动作 允许您在运行时设置步进电机的速度。
on_...: - stepper.set_speed: id: my_stepper speed: 250 steps/s配置变量:
stepper.set_acceleration 动作
Section titled “stepper.set_acceleration 动作”此 动作 允许您在运行时设置步进电机的加速度。
on_...: - stepper.set_acceleration: id: my_stepper acceleration: 250 steps/s^2配置变量:
stepper.set_deceleration 动作
Section titled “stepper.set_deceleration 动作”此 动作 允许您在运行时设置步进电机的减速度。
on_...: - stepper.set_deceleration: id: my_stepper deceleration: 250 steps/s^2配置变量:
Home Assistant 配置
Section titled “Home Assistant 配置”从 Home Assistant 控制步进电机的最简单方法是在 ESPHome 配置中添加一个 number。有关更多信息,请参阅 数字。
number: - platform: template name: 步进电机控制 min_value: -100 max_value: 100 step: 1 set_action: then: - stepper.set_target: id: my_stepper target: !lambda 'return x;'
stepper: - platform: ... # [...] 步进电机配置 id: my_stepperlambda 调用
Section titled “lambda 调用”在 lambda 中,您可以调用步进电机的多种方法来执行一些高级操作(有关更多信息,请参阅完整的 API 参考)。
set_target:将电机的目标位置设置为整数。
// 参数是整数(有符号 int) // 将(绝对)目标位置设置为 250 步 id(my_stepper).set_target(250);report_position:将当前位置报告为整数。
// 将(绝对)当前位置报告为 250 步 id(my_stepper).report_position(250);current_position:获取步进电机的当前位置作为整数。
int pos = id(my_stepper).current_position;target_position:获取步进电机的设定目标位置作为整数。
int pos = id(my_stepper).target_position;