
3D-Printed Automated Window Shade for Home Assistant (~$25)
3D Printing- Skill level: Intermediate (requires ESPHome familiarity)
- Print time: ~4β6 hours
- Component cost: ~$25 USD
- Integrates with: Home Assistant via ESPHome
Purpose
Convert any standard roller shade into a Home Assistant-controlled smart blind using a 3D-printed motor bracket, a small geared motor, and an ESP32 microcontroller. No modifications to the shade itself β the 3D-printed parts clamp to the existing hardware.
Pre-requisites
- Bambu Lab A1/P1S/X1C or any FDM printer capable of printing PETG or ABS
- Home Assistant instance (any platform: Raspberry Pi, NUC, cloud)
- ESPHome add-on installed in Home Assistant
- Basic experience flashing firmware to an ESP32
Steps
-
Print the motor bracket and shade coupler. Use PETG or ABS for heat tolerance β shades near windows get warm. Print at 40% infill with at least 3 perimeters for structural integrity. Design files are available on MakerWorld and Printables.
-
Source the components. You need: one ESP32-S3 or ESP32-WROOM board (
$4β6), one small 6V geared DC motor with encoder ($8β12), a reed switch for homing ($2), and a motor driver module ($3β5). Total lands under $25 for most configurations. -
Wire the motor driver. Connect the motor driver IN1/IN2 pins to ESP32 GPIO outputs. The encoder and reed switch connect to interrupt-capable GPIO pins for position tracking and hard-stop detection at the fully-open position.
-
Flash ESPHome firmware. Create an ESPHome configuration that defines a
coverentity withopen,close, andstopactions mapped to your motor driver outputs. The reed switch becomes the reference position sensor β when the shade reaches full-open, the switch triggers a re-home routine that resets position tracking. -
Configure Home Assistant automations. With the ESPHome device discovered, create automations for time-based control (open at sunrise, close at sunset), temperature-triggered behavior (close when indoor temp exceeds threshold), or voice control via your preferred assistant.
-
Mount and calibrate. Clamp the motor bracket to the shadeβs existing mounting hardware. Run the shade through a full open-close cycle to calibrate travel time and verify the hard stop at full-open. Adjust
travel_timein your ESPHome config to match the actual measured time.
The Trap
Donβt skip the encoder or reed switch and rely on time-based position tracking alone. Roller shades vary in tension as they wind and unwind, and time-only tracking drifts across dozens of cycles β your shade will slowly go out of calibration. The reed switch at full-open is the safest and cheapest way to self-correct position on every full-open cycle.
Cited References
- r/BambuLab community build thread
- Motorized Roller Shade for ESPHome β MakerWorld
- ESPHome Cover Component documentation
- Automating Window Blinds with ESP32 β Omar Ghader
Source: r/BambuLab
Content created with AI assistance and reviewed for accuracy.
Join the conversation
Stack Insiders is our free community for readers who want to go deeper β share resources, ask questions, and connect with others across every vertical we cover.
Join Stack Insiders →