Smart Blinds.
Whisper-quiet precision roller blinds control — stepper-driven, zero rewiring.
An advanced, non-invasive smart blinds controller powered by the ESP32-C6. Featuring a whisper-quiet stepper motor, five built-in local automation modes, and seamless integration with Alexa and Google Home, it automates your existing roller blinds without requiring complex installations or rewiring.
Smart blinds that replace the chain.
The controller clips directly onto your existing roller blind chain, eliminating the need to replace your blinds or carry out complex wiring. A near-silent stepper motor drives the chain with millimetre precision, allowing you to set the blinds to any percentage using a companion app, voice commands, or capacitive touch gestures directly on the device.
Under the hood, the system is powered by an ESP32-C6 with Wi-Fi 6 and Bluetooth Low Energy. It runs five fully independent, local automation modes, weather-aware scheduling, and an atomic dual-slot storage system that prevents configuration data corruption — even in the event of a sudden power loss.
One brain. Everything connected.
The ESP32-C6 serves as the central processor, executing a non-blocking FreeRTOS scheduler to manage step-pulse generation, debounce touch inputs, and run concurrent network tasks. The diagram below illustrates how each physical component and service integrates into the system architecture.
What drives your blinds.
Silent Motor Driver
The TMC2209 StealthChop2 driver operates the motor below 29 dB — quieter than a whisper. Precise microstepping and a dedicated pulse-width control pipeline guarantee smooth, near-silent, and highly reliable movement at any time of day.
Precise Step Timing
A dedicated 20 kHz hardware timer interrupt service routine handles step generation with microsecond accuracy. This decoupled, high-priority task ensures network traffic and background processing never cause step stuttering.
Local Automation Engine
From sunset tracking to heat-protection routines, five independent automation modes execute locally on-chip. Since the logic is stored and processed on-board, your schedules remain fully active during network outages.
Responsive Voice Integration
Integrated natively with Alexa and Google Home using secure WebSockets. Voice commands are processed in under 100 ms, with bidirectional status synchronization ensuring smart home dashboards remain perfectly aligned.
Fail-Safe Storage
System configuration is stored in redundant EEPROM partitions with automated CRC32 checksum verification. If a power outage interrupts a write transaction, the system automatically restores its state from the backup partition.
Target Wake Time (TWT)
Leveraging 802.11ax Target Wake Time (TWT), the ESP32-C6 negotiates precise sleep-wake intervals with the router. This slashes standby power consumption by 70% and significantly reduces thermal build-up inside the enclosure.
Engineering design overview.
Precision motion, in perfect silence.
By pairing a silent TMC2209 stepper driver in StealthChop2 mode with a custom C++ step-generation engine, the motor operates below 29 dB. A dedicated FreeRTOS task manages acceleration profiles, ensuring whisper-quiet start-stops and smooth torque delivery.
The motion engine calculates real-time trapezoidal speed profiles with acceleration parameters up to 8,000 steps/s². Gradual speed ramping mitigates mechanical inertia, preventing chain shock and reducing gear-wear.
Motor control runs in a dedicated high-priority thread decoupled from network processing. A lock-free ring buffer handles communication between task boundaries, ensuring zero step jitter even during peak Wi-Fi activity.
With a fixed minimum pulse-width of 20 µs, the controller guarantees that the TMC2209 optocoupler stage registers every transition. This ensures precise position tracking without relying on closed-loop encoders.
By monitoring the motor's back-EMF signature via StallGuard4, the system detects mechanical obstructions or travel limits in real-time. The motor halts immediately to prevent damage, eliminating the need for physical limit switches.
Five states, one sensor.
A single capacitive touch surface enables sophisticated control via an on-chip Finite State Machine (FSM). Debounced digital filtering prevents false triggers, translating tap, double-tap, hold, and long-hold gestures into distinct system commands.
Scanning for touch events
The system polls the touch input register, applying a 50ms digital debounce filter to filter out mechanical vibration, ambient moisture variations, or electrical noise from the motor driver.
Hold duration analysis
Upon registering an active touch state, the FSM tracks duration. A quick release redirects to the tap-window. Holding for 1.5 seconds while the motor is active triggers an **Emergency Stop**, halting the stepper driver immediately and persisting position data. A 10-second hold initiates a Wi-Fi network reset while retaining device calibration values.
Double-tap detection window
On finger release, a 300 ms timer starts to monitor for a second pulse. If no subsequent touch is registered, the FSM triggers a **Single Tap** action, toggling the blinds' target position between fully open and fully closed based on the current position percentage.
Instant direction reverse
Registering a second touch within the 300 ms window initiates an **Instant Direction Reversal**. The motion engine decelerates, changes direction, and accelerates smoothly back to target speed, allowing quick positioning adjustments.
Emergency stop lock
Following an Emergency Stop, the FSM locks in the halt state until the physical touch signal ceases. This safety interlock prevents accidental double-triggers. The motor driver is disabled to prevent mechanical strain, and a status update is published to MQTT.
Every gesture, every transition.
Set it once. Forget about it.
Five firmware-defined automation modes operate concurrently to maintain optimal indoor environments. By executing logic directly on-chip rather than depending on external servers, the automations remain fully active during network outages.
Morning Wake Up
Start your day naturally. This automation gradually opens the blinds over a configurable duration (up to 2 hours) to simulate a natural sunrise. Instead of opening abruptly, the blinds rise in tiny, periodic steps to slowly fill the room with natural light.
Why it's useful: Waking up to gradually increasing natural light helps regulate your circadian rhythm and sleep cycle. Schedules can be customized for each day of the week, and an on-board safety check ensures the blinds only actuate upwards during this wake window.
Sunset Auto-Close
Automatically closes the blinds at sunset. The controller queries the OpenWeatherMap API daily to retrieve local sunset times, triggering a close event that adapts dynamically as the seasons change.
Why it's useful: Sunset times shift by several minutes each day. This dynamic scheduling adapts automatically, and you can define a custom offset (e.g. sunset + 20 minutes) to fine-tune the exact closing threshold.
Night Lock
Enforces a scheduled closure and security lock at a specific time each night. Operating on a highly customizable weekly schedule, it overrides standard trigger inputs and maintains a closed state until the morning wake-up routine is activated.
Why it's useful: Maximises privacy and home security. Even if manual touch events, voice commands, or other automation rules attempt to actuate the blinds during night hours, the night lock holds the blinds closed until the designated morning schedule begins.
No Presence Auto-Close
Closes the blinds automatically when the room is vacant. The controller listens for occupancy status over MQTT — published by network devices like the smart light switch — and reacts when the room remains unoccupied for a defined duration.
Why it's useful: Reduces solar heat gain during empty hours and provides automatic privacy when you leave. A debounce filter prevents premature actuation if you briefly step out of the room, ensuring the blinds only close when the space is genuinely vacant.
Heat Protection
Automatically closes the blinds when the outside temperature exceeds a configurable threshold, blocking direct sunlight from heating up your room. The controller fetches live weather data from OpenWeatherMap via its REST API, so no additional sensors are needed — just your location.
Why it's useful: In summer, direct sunlight through windows is one of the biggest causes of indoor overheating. By shading windows before the room warms up, you avoid relying on air conditioning entirely — saving energy and keeping the space comfortable. A 15-minute cooldown window prevents the blinds from cycling up and down near the temperature threshold.
Every pin, every rail.
| Component | Model | GPIO | Protocol | Function |
|---|---|---|---|---|
| Motor enable | TMC2209 | GPIO 2 | Digital Out | Active LOW motor enable |
| Step pulse | TMC2209 | GPIO 4 | Timer ISR | 20 kHz step pulse output |
| Direction | TMC2209 | GPIO 5 | Digital Out | Motor direction control |
| Touch sensor | TTP223 | GPIO 21 | Digital In | Capacitive touch · Active HIGH |
| Power Component | Model | Rating | Function |
|---|---|---|---|
| Power Source | USB-C Connector | 5V / 2A Direct | Mains-powered DC input |
| Mains Protection | TVS Diode + Fuse | 5.6V clamp / 2A | Over-voltage and over-current protection |
| LDO Regulator | AMS1117-3.3 | 5V → 3.3V | ESP32-C6 + touch sensor isolated logic rail |
All grounds (USB-C, LDO, ESP32, peripherals) connect to a single, continuous ground plane for noise mitigation.
Connected — and gracefully offline.
Wi-Fi 6 is the primary path. If it fails, BLE provisioning and rescue mode keep the device accessible. Dual NTP + HTTP time sync ensures the scheduling engines always know the exact time.
Provisioning & Rescue
During initial setup, the device acts as a BLE peripheral, allowing secure Wi-Fi credential configuration from a companion web app. If the network becomes unreachable, holding the capacitive sensor for 10 seconds activates the BLE rescue interface to update credentials or download logs.
Alexa & Google Home
Integrates natively with major voice ecosystems for immediate responsive control. The connection is established via a secure WebSocket connection to SinricPro, syncing state and percentage position values with minimal latency.
Local Integration
The controller broadcasts position metrics, motor telemetry, and system diagnostics to a local MQTT broker. It also subscribes to topics from other home sensors (such as the smart light switch) to drive the presence-based automation routines.
OpenWeatherMap & Time Sync
Queries the OpenWeatherMap API daily to synchronize local solar data. Network time is fetched via NTP, featuring an automated fallback to HTTP header time-parsing if outbound UDP time traffic is restricted by local network policies.
Sleep the radio, not the device.
The ESP32-C6's native Wi-Fi 6 radio supports Target Wake Time (TWT) — negotiating strict sleep/wake schedules with compatible access points to reduce standby current to micro-amperes.
Standard Wi-Fi protocols require client radios to remain active continuously, even during periods of network inactivity. Under 802.11ax Target Wake Time, the controller establishes negotiated wake intervals with the access point — waking the RF transceiver briefly to transact queued MQTT messages before immediately returning to low-power sleep.
This power-management scheduling is highly critical in preventing thermal build-up inside the compact 3D-printed enclosure. By sleeping the radio between communication cycles, the device runs cool and maintains negligible idle power consumption, whilst local capacitive touch events wake the radio instantly for responsive manual operation.
A motor controller designed for resilience.
Write Throttling
To prevent premature flash degradation, persistent writes are throttled to a minimum 2-second interval and only executed when configuration states change, preserving the lifespan of the physical storage sectors.
Dual-Slot EEPROM + CRC32
Config transactions utilize a dual-slot backup scheme with CRC32 checksum verification. If a power cut interrupts a write operation, the system automatically detects the mismatch on boot and rolls back to the stable mirror partition.
Safe Mode Bootloader
Consequent watchdog resets or boot failures trigger Safe Mode. The controller suspends Wi-Fi and stepper actuation, spinning up an isolated BLE console so you can inspect diagnostics, reset values, or flash new firmware.
Migration Engine
Firmware updates execute structural schema checks on stored configurations, automatically migrating legacy Wi-Fi tokens and calibration values to the new layout without requiring device recalibration.
If the transaction flag equals 0xDEADBEEF on initialization, the device identifies an interrupted commit. The system automatically recovers the stable configuration from Slot B and clears the flag to restore full storage integrity.
Full specifications.
| Parameter | Specification | Details |
|---|---|---|
| CPU | RISC-V 32-Bit Single-Core | ESP32-C6 · 160 MHz · native Wi-Fi 6 |
| RF Transceiver | 2.4 GHz Wi-Fi 6 + BLE 5.0 | Target Wake Time (TWT) · ultra-low standby power |
| Power | Direct USB-C Input | 5V / 2A direct DC adapter input |
| Voltage | AMS1117-3.3 LDO | 5V stepper rail + 3.3V isolated logic rail |
| Storage | 4MB Flash · 512KB SRAM | Atomic dual-slot · CRC32 protected |
| Actuator | TMC2209 + AccelStepper | StealthChop2 · 20 kHz timer loop |
| Voice | SinricPro WebSocket | Google Home + Alexa · rate-limited 50ms |
| Stall Detection | Sensorless StallGuard4™ | Back-EMF load analysis · auto-halt safety |
| Precision | 64-Bit Signed (int64_t) | Safe against integer overflow |
| Interface | TTP223 Capacitive Touch | Gesture FSM · 5 states · debounced |
| Diagnostics | DiagnosticsManager | 6 ring buffers · Wi-Fi · MQTT · Motor Telemetry |
| Self-Healing | Safe Mode + Backup Boot | Restore from backup slot on failure |
Build it yourself.
Everything you need to build your own StepperMote. Download the production-ready code, the custom hardware PCB designs, and the 3D-printable mechanical brackets.
Firmware Source
PCB Gerber Files
Blinds Mount STL
Interactive Companion Dashboard.
Manage all devices, set Sunrise/Sunset automations, and calibrate stepper positions remotely.