§ 01 · PROJECT

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.

Year2024
StatusShipped · v1
MCUESP32-C6
ActuationStepper
Smart blinds controller mounted on roller blinds chain
FIG.01 · The smart blinds controller installed on a standard roller blind chain TMC2209 · stepper motor · TTP223 touch · ESP32-C6 · USB-C
§ 02 · OVERVIEW precision actuation · smart scheduling

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.

§ 03 · SYSTEM ARCHITECTURE RISC-V · Wi-Fi 6 · BLE 5 · GPIO

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.

Sensors MCU Actuators Cloud / Net Data Wireless
§ 04 · KEY FEATURES six pillars · precision engineering

What drives your blinds.

01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

§ 05 · INTERNAL LAYOUT 3D-printed enclosure · hexagonal ventilation

Engineering design overview.

Mechanical design plan with dimensions and annotations for the smart blinds controller
FIG.02 · Mechanical design plan — 46×50×72 mm enclosure with hexagonal ventilation, wall mount, motor mount, and TTP223 capacitive touch panel
§ 06 · STEPPER MOTOR ENGINE TMC2209 · AccelStepper · 20 kHz timer · FreeRTOS

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.

Timer20kHz
Pulse50µs
Accel8ksteps/s²
ModeSilent

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.

§ 07 · TOUCH GESTURE FSM TTP223 · capacitive · debounced

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.

STATE 0 · IDLE

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.

debounce50 msdigital noise filter
sensorTTP223GPIO 21 · active HIGH
power~µAnegligible idle draw
STATE 1 · PRESSED

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.

e-stop1.5 s holdwhile motor moving
wifi reset10 s holdpreserves calibration
fallback→ released waiton quick release
STATE 2 · RELEASED WAIT

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.

window300 msdouble-tap timeout
single taptoggle blindsmooth decel ramp
directionautobased on current position %
STATE 3 · SECOND PRESS

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.

actioninstant reversezero-lag direction change
safety3 s timeoutanti-stuck protection
motorstays enabledholding torque maintained
STATE 4 · HOLD TRIGGERED

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.

unlockfinger liftphysical release required
motordriver disabledprevents strain
alarmMQTT publishednotifies dashboard
§ 08 · TOUCH STATE DIAGRAM edges = events · solid = action · dashed = timer

Every gesture, every transition.

User event Timer / timeout Default state Safety state
§ 09 · AUTOMATIONS 5 smart modes · fully independent

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.

AUTOMATION 01

Morning Wake Up

TriggerTime-based schedule, per day of the week SafetyOnly opens upward · tap to cancel anytime

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.

AUTOMATION 02

Sunset Auto-Close

SourceOpenWeatherMap API · daily refresh OffsetConfigurable ± minutes from sunset

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.

AUTOMATION 03

Night Lock

SchedulePer-day time schedule (weekday/weekend) ActionClose + lock position until next automation

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.

AUTOMATION 04

No Presence Auto-Close

SourceMQTT presence data from paired devices StatusPaired with Light Switch M0 (Auto)

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.

AUTOMATION 05

Heat Protection

SourceOpenWeatherMap outdoor temperature Safety15-minute cooldown · anti-cycle 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.

§ 10 · HARDWARE & WIRING ESP32-C6 · 3 GPIOs in use · power path

Every pin, every rail.

ComponentModelGPIOProtocolFunction
Motor enableTMC2209GPIO 2Digital OutActive LOW motor enable
Step pulseTMC2209GPIO 4Timer ISR20 kHz step pulse output
DirectionTMC2209GPIO 5Digital OutMotor direction control
Touch sensorTTP223GPIO 21Digital InCapacitive touch · Active HIGH
Power ComponentModelRatingFunction
Power SourceUSB-C Connector5V / 2A DirectMains-powered DC input
Mains ProtectionTVS Diode + Fuse5.6V clamp / 2AOver-voltage and over-current protection
LDO RegulatorAMS1117-3.35V → 3.3VESP32-C6 + touch sensor isolated logic rail

All grounds (USB-C, LDO, ESP32, peripherals) connect to a single, continuous ground plane for noise mitigation.

§ 11 · CONNECTIVITY cloud bridge · MQTT · OWM · NTP

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.

Wi-Fi 6 + BLE 5

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.

SinricPro

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.

MQTT

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.

REST

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.

§ 12 · WI-FI 6 TARGET WAKE TIME ESP32-C6 · 802.11ax TWT · power scheduling

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.

70% idle power saving radio off between negotiated wakes
< 5ms wake latency fast enough for real-time MQTT
µA standby current micro-amp draw during TWT sleep

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.

§ 13 · SAFETY & RELIABILITY enterprise fail-safes · 4 layers

A motor controller designed for resilience.

2s

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.

2×

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.

3

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.

EEPROM dual-slot atomic simulator
READY
SLOT A · PRIMARY MAGIC: 0x5A5A | PAYLOAD: V1.2.0 | CRC32: 0x7E3A9C12
SLOT B · BACKUP MAGIC: 0x5A5A | PAYLOAD: V1.2.0 | CRC32: 0x7E3A9C12
WRITE FLAG 0x00000000
// SYSTEM LOG STREAM _
> System initialized. Storage engine in STANDBY.
> Slot A: VALID (CRC OK) | Slot B: VALID (CRC OK)

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.

§ 14 · TECHNICAL SPECIFICATIONS complete spec sheet comprehensive architecture

Full specifications.

ParameterSpecificationDetails
CPURISC-V 32-Bit Single-CoreESP32-C6 · 160 MHz · native Wi-Fi 6
RF Transceiver2.4 GHz Wi-Fi 6 + BLE 5.0Target Wake Time (TWT) · ultra-low standby power
PowerDirect USB-C Input5V / 2A direct DC adapter input
VoltageAMS1117-3.3 LDO5V stepper rail + 3.3V isolated logic rail
Storage4MB Flash · 512KB SRAMAtomic dual-slot · CRC32 protected
ActuatorTMC2209 + AccelStepperStealthChop2 · 20 kHz timer loop
VoiceSinricPro WebSocketGoogle Home + Alexa · rate-limited 50ms
Stall DetectionSensorless StallGuard4™Back-EMF load analysis · auto-halt safety
Precision64-Bit Signed (int64_t)Safe against integer overflow
InterfaceTTP223 Capacitive TouchGesture FSM · 5 states · debounced
DiagnosticsDiagnosticsManager6 ring buffers · Wi-Fi · MQTT · Motor Telemetry
Self-HealingSafe Mode + Backup BootRestore from backup slot on failure
§ 15 · BUILD THE PROJECT open source firmware · custom PCB · 3D mount

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

Download ZIP 23.2 MB

PCB Gerber Files

Download ZIP 17 KB

Blinds Mount STL

Download STL 363 KB
§ 09 · REMOTE CONTROL Zaylo companion app integration

Interactive Companion Dashboard.

Manage all devices, set Sunrise/Sunset automations, and calibrate stepper positions remotely.

// LIVE ECOSYSTEM LINK

Zaylo Remote Dashboard Emulator

The physical Smart Blinds controller integrates seamlessly with the **Zaylo Remote** application over sub-100ms MQTT WebSockets. Explore the companion app interface, test the live roller blinds position synchronizer, and interact with the physical stepper speed simulator directly in our high-fidelity web emulator.

Launch Interactive App Emulator
← back to index
SYSONLINE
SECTION
SCROLL000%
BUILDv0.1 / 2026
LOCAL