A Homeβ―Assistant / ESPHome project that turns everyday PWMβcontrolled PC fans into remarkably natural indoor wind simulators.
WindScape delivers authentic, locationβinspired airflow, from a gentle Mediterranean whisper to a brisk Alpine surge, creating a natural, immersive atmosphere for your workspace, gaming setup, or simβracing cockpit. Itβs a versatile wind simulator ready to elevate any project you come up with.
- Features
- Operatingβ―Modes
- Demo
- Build Guides
- Software Setup
- Preset Library
- Troubleshooting
- Tips for Best Experience
- Technical Notes
- Roadmap
- How WindScape Works
- Links
-
Realistic Wind Physics Smart turbulence modeling and thermal effects that create natural-feeling wind patterns, just like you'd experience outdoors.
-
Nature-Inspired Environment Presets Five carefully crafted profiles that capture the feel of different outdoor locations β from gentle countryside breezes to powerful ocean winds.
-
Steady or Dynamic Modes Choose between constant airflow or ever-changing wind patterns that respond naturally to the environment you select.
-
External Sensor Support Connect live data feeds (like racing sim speed) and WindScape will automatically adjust airflow in real-time, with smart fallback when the signal drops.
-
Homeβ―Assistant Integration Control, monitor, and automate entirely over WiβFi.
-
Comprehensive Real-Time Monitoring Deep insight into the simulation engine β weather phases, thermal events, turbulence levels, target tracking, and all physics calculations exposed as sensors.
-
OTA Firmware Updates Built on ESPHome for oneβclick wireless upgrades.
Mode | Description |
---|---|
Oscillating (Wind Simulation) | Natural, everβchanging airflow pattern. |
Steady (Constant Breeze) | Fixed speed, no variability. |
External Sensor | Maps a Homeβ―Assistant sensor (e.g. car speed) to live fan speed; autoβfallback after 60β―s of silence. |
Global Power Control in Homeβ―Assistant overrides every mode.
Which build you choose depends on the fan you pair with the project. In general, aβ―5β―V fan makes things simpler because it can be powered from any USBβAβ―3.0 or USBβC port, a power bank, or a lowβwattage wall adapter.
- Microcontroller β Any ESP32 development board with builtβin WiβFi (widely available for aboutβ―β¬3).
- Fan β Any 5β―V PC case fan that supports PWM (pulseβwidth modulation).
Thereβs no single βrequiredβ fan, just make sure it supports PWM speed control. A great premium option is the Noctuaβ―NFβA12x25β―5β―V, which is exceptionally quiet and can run at duty cycles as low asβ―5β―%.
When comparing noise levels, remember that the decibel (dB) scale is logarithmic: even small changes in the number can mean a significant audible difference.
Billβ―ofβ―Materials & Wiring
Item | 5V DIY Build (β¬) |
---|---|
Noctua NF-A12x25 5V | 33.00 |
Generic ESP32 | 3.00 |
General hardware (screws, nuts) | 4.00 |
3βD printed mount & hardware | 5.00 |
Total Estimated Cost | 45.00 |
Wiring Diagram
+----------------------------+
| USB Power (5V) |
| |
| +5V ββββββββββββββ |
| βΌ |
| +----------------------+
| | ESP32 WROOM Board |
| | (AliExpress-style) |
| | |
| | 5V/VIN ββββ 5V from USB
| | GND ββββ GND from USB
| | |
| | GPIO14 ββββ |
| | ββββββΊ PWM (Fan Pin 4, Blue)
| | |
| | GPIO27 ββββ¬ββββββ TACH (Fan Pin 3, Green)
| | β
| | [10kΞ© pull-up to 3.3V]
| | β
| | [3.3kΞ©] in series
| | β
| | [0.1nF cap to GND] βββ(RC filter)
| +----------------------+
| β
| βΌ
| +----------------------+
| | Noctua Fan |
| | 5V PWM (4-pin) |
| | |
| | Pin 1 (Black): GND βββββββ GND
| | Pin 2 (Red or Yellow): +5V ββββ 5V/VIN
| | Pin 3 (Green): TACH ββββΊ GPIO27 (filtered)
| | Pin 4 (Blue): PWM ββββ GPIO14
| +----------------------+
Thanks and credit to @mwood77
Billβ―ofβ―Materials & Wiring
Item | Kit Route (β¬) | DIY Route (β¬) |
---|---|---|
NVβFS1 fan kit (inc. PSU) | 99.90 | β |
ESP32 (Lolin32β―Lite) | 8.21 | 8.21 |
Buck converter 12β―ββ―5β―V | 4.00 | 4.00 |
4βpin fan cable | 2.95 | 2.95 |
Noctuaβ―NFβA12x25β―PWM | β | 35.50 |
NVβAA1β12 amplifier | β | 14.90 |
3βD printed mount & hardware | β | 5.00 |
12β―V PSU | Included | 7.00 |
Total | 116.06 | 78.56 |
Wiring Diagram
+-----------------------------+
| 12V Power Supply |
| |
| +12V ββββββββββββββ |
| β |
| βΌ |
| +12V to Fan |
| |
| GND βββββββββ
| |
+-----------------------------+
+------------------------+
| Lolin32 Lite |
| (ESP32) |
| |
| USB βββββ USB from host (PC/power)
| GND βββββ Shared GND with PSU & fan
| |
| GPIO14 ββββββ |
| βββββββΊ PWM (Fan Pin 4, Blue)
| |
| GPIO27 ββββββ¬ββββββββ TACH (Fan Pin 3, Yellow)
| β
| [10kΞ© pull-up to 3.3V]
| β
| [3.3kΞ©] in series
| β
| [0.1nF cap to GND] βββ(RC filter)
+------------------------+
β
βΌ
+------------------------+
| Noctua Fan |
| 4-pin |
| |
| Pin 1 (Black): GND βββββββ Shared GND (PSU + ESP32)
| Pin 2 (Red): +12V βββββββ +12V from PSU
| Pin 3 (Yellow): TACH ββββββΊ GPIO27 (via RC & pull-up)
| Pin 4 (Blue): PWM ββββββ GPIO14
+------------------------+
+-----------------------------+
| 12V Power Supply |
| |
| +12V ββββββ¬βββββββββββββ |
| β β
| βΌ β
| [Buck Conv. [LM2596] β
| In: 12V Out: 5V β
| β β β
| βΌ βΌ β
| GND +5V β
| β β β
+--------β΄βββββ¬βββββ β
βΌ βΌ
+------------------------+
| Lolin32 Lite |
| (ESP32) |
| |
| VIN βββββββββββββββ 5V from buck converter
| GND βββββββββββββββ GND from buck converter
| |
| GPIO14 ββββββ |
| βββββββΊ PWM (Fan Pin 4, Blue)
| |
| GPIO27 ββββββ¬ββββββββ TACH (Fan Pin 3, Yellow)
| β
| [10kΞ© pull-up to 3.3V]
| β
| [3.3kΞ©] in series
| β
| [0.1nF cap to GND] βββ(RC filter)
+------------------------+
β
βΌ
+------------------------+
| Noctua Fan |
| 4-pin |
| |
| Pin 1 (Black): GND βββββββ GND from PSU
| Pin 2 (Red): +12V βββββββ +12V from PSU
| Pin 3 (Yellow): TACH ββββββΊ GPIO27 (via RC & pull-up)
| Pin 4 (Blue): PWM ββββββ GPIO14
+------------------------+
- Flash the WindScape ESPHome YAML to your ESP32.
- Add WiβFi credentials in
secrets.yaml
. - Rebootβthe device will autoβdiscover in Homeβ―Assistant.
# | Preset | Base Windβ―Range | Gust Style | Character |
---|---|---|---|---|
1 | OceanΒ (Atlantic Coast) | 8β16β―mph | Rolling, 3β―% @β―2β―Γβ―speed | Energising, constant swell |
2 | MediterraneanΒ (Italian Coast) | 4β10β―mph | Gentle, 1.5β―% @β―1.6β―Γ | Relaxed, great for reading |
3 | CountrysideΒ (French Fields) | 2β8β―mph | Rare, 0.8β―% @β―1.4β―Γ | Whisperβquiet, ideal for sleep |
4 | MountainsΒ (Alpine Range) | 6β18β―mph | Sharp, 5β―% @β―2.3β―Γ | Crisp, invigorating shifts |
5 | PlainsΒ (Patagonian Steppes) | 10β22β―mph | Sustained, 8β―% @β―2.5β―Γ | Strongest airflow, hot days |
6 | FjordΒ (Norwegian Fjords) | 8β20β―mph | Channeled, 6β―% @β―2.4β―Γ | Dramatic, funnelβlike gusts |
7 | Manual | β | β | Direct user control |
Control | Range / Options | Purpose |
---|---|---|
Windβ―Intensity | 30β―ββ―150β―% | Master power scaler |
Gustβ―Frequency | 10β―ββ―90β―% | Probability of gust start |
Windβ―Variability | 5β―ββ―40β―% | Overall speed fluctuation |
Minβ―Fanβ―Speed | 0β―ββ―50β―% | Prevent stall |
Maxβ―Fanβ―Speed | 40β―ββ―100β―% | Safety ceiling |
Windβ―Mode | 6 presetsβ―+β―Manual | Select ambience |
Restart | β | Reboot ESP32 |
Advanced Tuning Parameters (for power users via config):
- Turbulence Detail Level: 30m (how fine-grained the wind texture is)
- Turbulence Strength: 0.3 (how pronounced the micro-variations are)
- Thermal Event Rate: 0.025Hz (how often warm air bubbles occur)
- Thermal Intensity: 1.8Γ (how strong thermal effects feel)
- Thermal Coverage: 15m (how wide the thermal influence spreads)
WindScape exposes comprehensive real-time data about the wind simulation engine:
Sensor | Unit | Description |
---|---|---|
Wind Speed | m/s | Current output wind speed |
Target Wind Speed | m/s | Where the simulation is heading |
Wind Change Rate | m/sΒ² | How fast wind is accelerating/decelerating |
Fan RPM | RPM | Actual fan rotation speed |
Sensor | Type | Description |
---|---|---|
Current Weather Phase | 0-2 | Quiet (0), Medium (1), High (2) activity |
Weather Phase Description | Text | Human-readable phase status |
Phase Duration Remaining | seconds | Time until next phase change |
Sensor | Unit | Description |
---|---|---|
Turbulence Energy | J | Von KΓ‘rmΓ‘n spectral energy level |
Spectral Energy Buffer | m/s | Real-time turbulence contribution |
Gust Active | % | Current gust progression (0-100%) |
Gust Intensity | Γ | Active gust strength multiplier |
Thermal Bubble Active | % | Thermal event progression (0-100%) |
Current Thermal Contribution | m/s | Thermal effect on wind speed |
Sensor | Type | Description |
---|---|---|
Wind Simulation Active | Binary | Physics engine running status |
Gust Currently Active | Binary | Gust event in progress |
Thermal Bubble Active | Binary | Thermal event in progress |
External Sensor Mode | Binary | Using external data feed |
Wind Speed Converging | Binary | Current speed near target |
Simulation Status | Text | Overall engine activity summary |
Physics Debug Info | Text | Technical diagnostic data |
These sensors enable:
- Real-time dashboards showing wind physics in action
- Advanced automations based on weather phases or thermal events
- Performance monitoring and troubleshooting
- Educational visualization of atmospheric modeling
Symptom | Checks |
---|---|
Fan not spinning | Verify PWM pin & 25β―kHz capability Β· Confirm 5β―V/12β―V supply Β· Raise Minβ―Fanβ―Speed above stall duty |
No RPM feedback | Check tach wiring/pullβup Β· Confirm fan outputs tach Β· Adjust pulse multiplier |
No wind simulation | Ensure Manual Mode is off Β· Windβ―Intensity β₯β―30β―% Β· Windβ―Variability not 0β―% |
Airflow feels static | Increase Windβ―Variability |
Too chaotic | Lower Gustβ―Frequency or choose a calmer preset |
- Begin with Defaults β Presets are tuned for realism outβofβtheβbox.
- Tweak Slowly β Small slider changes have large perceptual impact.
- Pick the Right Preset β Match airflow to activity: calming Countryside for sleep, energising Plains for heat.
How the Wind Physics Work: WindScape creates realistic wind by combining several clever techniques:
- Turbulence Modeling - Uses proven atmospheric science to generate the micro-variations that make wind feel natural instead of robotic
- Thermal Effects - Simulates warm air rising (like over hot pavement) that creates those gentle gusts you feel in real life
- Weather Moods - Automatically shifts between calm, moderate, and active periods, just like real weather patterns
- Smart Gusting - Adds realistic wind bursts that build up naturally, peak, and fade away organically
- Smooth Transitions - Prevents jarring speed changes by using physics-based momentum
Behind the Scenes:
- Updates 5 times per second with intelligent randomization
- Tracks multiple wind frequencies simultaneously for authentic texture
- Models thermal events that happen every few seconds to minutes
- Adapts intensity based on the current weather "mood"
- Uses logarithmic scaling so fan speed changes feel natural to humans
- Native integration with moodist ambience engine.
The Wind Simulation System: WindScape layers multiple systems to create convincing natural wind:
-
Micro-Turbulence - Constantly adds tiny speed variations (like leaves rustling) by mixing different "frequencies" of wind movement together
-
Thermal Bubbles - Occasionally creates rising warm air effects that start gentle, build to a peak, then fade away naturally over 8-15 seconds
-
Weather Moods - Automatically cycles between calm periods (1.5-3.5 min), normal activity (2-5 min), and windy periods (1-2.5 min) with natural transitions
-
Realistic Movement - All speed changes use momentum and inertia, so the fan never makes sudden jarring jumps
-
Multiple Time Scales - Fast micro-changes (5x/sec), medium gusts (seconds), and slow mood shifts (minutes) all work together
External Sensor Mode skips all the simulation and directly maps your data (like car speed) to fan speed, with a 60-second safety timeout that switches back to your last preset if the signal is lost.
- Homeβ―Assistant β https://www.home-assistant.io/
- ESPHome β https://esphome.io/
- Noctua Fans & Accessories β https://noctua.at/
- https://noctua.at/en/nf-a12x25-pwm
- https://noctua.at/en/nv-aa1-12
- Noctua NV-FS1 YT Review: https://youtu.be/9PvWBuDTGDo
- DIY Fan Mount STL files
- ir2mqtt (iRacing telemetry β MQTT) β https://github.com/jmlt/ir2mqtt
- Moodist (ambient engine) β https://github.com/remvze/moodist
© 2025β― WindScape. Licensed under the MITβ―License unless noted otherwise.