ESP32-based 4-axis stepper motor controller with a mobile PWA interface.
No app. No cloud. Connect to WiFi, open browser, done.
📹 Video coming soon
- Control up to 4 stepper motors independently from your phone or laptop
- Move by angle, go to absolute position, jog, or run continuously
- Trapezoidal speed ramp on all moves — no missed steps
- E-Stop per motor or all axes at once
- Repeatability test with cycle logging to CSV
- Jog watchdog — motor stops automatically if connection drops
- PWA installable — works offline once loaded, home screen icon
| Board | ESP32 (38-pin) |
| Driver | Step/Dir driver |
| Interface | Any browser on the same WiFi |
| Motor | PUL | DIR | ENA |
|---|---|---|---|
| M1 | 18 | 19 | 21 |
| M2 | 25 | 26 | 27 |
| M3 | 32 | 33 | 14 |
| M4 | 13 | 12 | 4 |
Full wiring guide: docs/wiring.md
# 1. Install PlatformIO
pip install platformio
# 2. Clone
git clone https://github.com/VJPatz/MotionOS.git
cd MotionOS
# 3. Set your credentials
# Open include/Config.h — change AP_PASS and ADMIN_PASS before flashing
# 4. Flash firmware
pio run --target upload
# 5. Flash web files
pio run --target uploadfs
# 6. Connect to WiFi "MotionOS" → browser opens automatically- Power on → coils are off by default
- Rotate shaft manually to your home position
- Enable motor via toggle
- Tap Set Zero
- Now all angle commands are relative to that zero
Zero is RAM-only by design — a stale saved zero after manual movement would cause wrong positioning on physical hardware.
Go to Motor Library in the app. Enter your motor model, driver, and steps/rev — these become labels throughout the UI.
GPL-3.0 — open source, derivative works must stay open.
See LICENSE.