Tutorial para controlar motores paso a paso desde Home Assistant

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;
Scroll al inicio