OpenBuilds BLOX can be used with https://esphome.io/ and https://www.home-assistant.io/ as a Home Automation controller
Here's a basic example configuration YAML file for a BLOX under ESPHome, that you can use as a baseline configuration to build from
esp32: board: esp32-s3-devkitc-1 framework: type: arduino # Enable Home Assistant API: Use your own API KEY api: encryption: key: "gb7rLDFCs79aFDLm2xhphwcm3ViVhnxnJkMtqF7yGoQ=" esphome: name: blox-sample-config # Please change friendly_name: BLOX Example # Please change # Set DAC output levels on boot on_boot: priority: -10 # Lower priority ensures that outputs are set after ESPHome is fully initialized then: - output.set_level: id: stepper_current_1 level: 0.3 # Set Stepper 1's default Current to 30% - output.set_level: id: stepper_current_2 level: 0.3 # Set Stepper 2's default Current to 30% wifi: ssid: !secret wifi_ssid password: !secret wifi_password # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Blox Example Fallback Hotspot" password: "zTRqU4qZtwkd" # Please change captive_portal: # Enable Captive Portal on fallback hotspot ota: password: "b99d5b4df91e72f2bff548ca73c57010" # Use your own logger: # Enable Logs web_server: # Show local web interface port: 80 spi: mosi_pin: 35 clk_pin: 36 miso_pin: 37 i2c: sda: 3 scl: 4 scan: true light: # RGB LEDs - platform: neopixelbus type: GRB variant: WS2811 pin: 48 num_leds: 2 # Update count if you add external LEDs name: "RGB LEDs" number: - platform: template name: "Stepper Motor 1" min_value: 0 max_value: 10000 # Set Max Travel Steps step: 1 set_action: then: - stepper.set_target: id: stepper_motor_1 target: !lambda 'return x;' - platform: template name: "Stepper Motor 2" min_value: 0 max_value: 10000 # Set Max Travel Steps step: 1 set_action: then: - stepper.set_target: id: stepper_motor_2 target: !lambda 'return x;' - platform: template name: Servo min_value: -100 initial_value: 0 max_value: 100 step: 1 optimistic: true set_action: then: - servo.write: id: rc_servo level: !lambda 'return x / 100.0;' - platform: template name: "Current: Stepper Motor 1" min_value: 0 max_value: 3200 step: 1 set_action: then: - lambda: |- float millivolt = x / 5.0 / 0.22; int dacValue = (int) (millivolt / 3300.0 * 4096); id(stepper_current_1).set_level(dacValue / 4096.0); - platform: template name: "Current: Stepper Motor 2" min_value: 0 max_value: 3200 step: 1 set_action: then: - lambda: |- float millivolt = x / 5.0 / 0.22; int dacValue = (int) (millivolt / 3300.0 * 4096); id(stepper_current_2).set_level(dacValue / 4096.0); stepper: - platform: a4988 id: stepper_motor_1 step_pin: 9 dir_pin: 8 max_speed: 250 steps/s sleep_pin: 10 acceleration: inf deceleration: inf - platform: a4988 id: stepper_motor_2 step_pin: 13 dir_pin: 12 max_speed: 250 steps/s sleep_pin: 14 acceleration: inf deceleration: inf binary_sensor: - platform: gpio pin: number: 39 inverted: true name: "Input: Limit: X" - platform: gpio pin: number: 40 inverted: true name: "Input: Limit: Y" - platform: gpio pin: number: 11 inverted: true name: "Input: Fault: X" - platform: gpio pin: number: 15 inverted: true name: "Input: Fault: Y" output: - platform: ledc pin: 47 id: servo_output frequency: 50Hz - platform: mcp4725 id: stepper_current_1 address: 0x60 - platform: mcp4725 id: stepper_current_2 address: 0x61 switch: - platform: gpio pin: 41 name: "Output: Switched Output 1" - platform: gpio pin: 42 name: "Output: Switched Output 2" servo: - id: rc_servo output: servo_output transition_length: 2s auto_detach_time: 0.1s