Tutorial sencillo para controlar un motor paso a paso desde Home Assistant con ESPHome. Te enseño cómo funcionan, cómo conectarlos y aprenderás a controlar su posición y su velocidad con absoluta precisión.
Te dejo a continuación el código de ESPHome que hemos visto en el vídeo.
esphome:
name: motor-exp
friendly_name: motor-exp
esp8266:
board: esp01_1m
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "8H4EjBkZVGpGNWIGFGxxxxxxxx4gKwIpv23QrvfY="
services:
# Definimos dos servicios en la API de Home Assistant
# Variable "posicion"
- service: pos_stepper
variables:
target: int
then:
- stepper.set_target:
id: nema17
target: !lambda 'return target;'
- sensor.template.publish:
id: posicion
state: !lambda 'return target;'
# Variable "speed"
- service: control_stepper
variables:
speed: float
then:
- logger.log: "Speed updated"
- stepper.set_speed:
id: nema17
speed: !lambda 'return speed;'
ota:
password: "5b0633f589xxxx52bb938efd"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
captive_portal:
# Definimos nuestro motor PAP, sus conexiones y la velocidad máxima
stepper:
- platform: a4988
id: nema17
step_pin: 14
dir_pin: 12
sleep_pin: 13
max_speed: 2000 steps/s
# Publicamos un sensor con la posición real del motor
sensor:
- platform: template
name: "Posición motor experimental"
id: posicion
# Con el objeto COVER podemos utilizar 3 botones: subir, bajar y stop
cover:
- platform: template
name: "Motor"
id: grifo
device_class: damper
open_action:
- stepper.set_target:
id: nema17
target: 10000
- sensor.template.publish:
id: posicion
state: !lambda return id(nema17).target_position;
close_action:
- stepper.set_target:
id: nema17
target: 0
- sensor.template.publish:
id: posicion
state: !lambda return id(nema17).target_position;
stop_action:
- stepper.set_target:
id: nema17
target: !lambda return id(nema17).current_position;
- sensor.template.publish:
id: posicion
state: !lambda return id(nema17).current_position;
optimistic: true
assumed_state: true
# Con este switch podemos llevar el motor al inicio (ON) o al final del recorrido (OFF)
switch:
platform: template
name: "Motor switch"
lambda: |-
if (id(posicion).state) {
return false;
} else {
return true;
}
turn_on_action:
- stepper.set_target:
id: nema17
target: 0
- sensor.template.publish:
id: posicion
state: !lambda return id(nema17).target_position;
turn_off_action:
- stepper.set_target:
id: nema17
target: 10000
- sensor.template.publish:
id: posicion
state: !lambda return id(nema17).target_position;

