Tasmota/lib/libesp32/berry_animation/README.md

221 lines
6.3 KiB
Markdown

# Berry Animation Framework
A powerful, lightweight animation framework for controlling addressable LED strips in Tasmota using a simple Domain-Specific Language (DSL).
## ✨ Features
- **🎨 Rich Animation Effects** - Pulse, breathe, fire, comet, sparkle, wave, and more
- **🌈 Advanced Color System** - Predefined palettes, custom gradients, smooth color cycling
- **📝 Simple DSL Syntax** - Write animations in intuitive, declarative language
- **⚡ High Performance** - Optimized for embedded systems with minimal memory usage
- **🔧 Extensible** - Create custom animations and effects
- **🎯 Position-Based Effects** - Precise control over individual LED positions
- **📊 Dynamic Parameters** - Animate colors, positions, sizes with oscillating values
- **🎭 Sequences** - Create complex shows with timing and loops
## 🚀 Quick Start
### Simple Pulsing Animation
```dsl
# Define colors
color red = #FF0000
# Create pulsing animation
animation pulse_red = pulsating_animation(color=red, period=3s)
# Run it
run pulse_red
```
### Rainbow Color Cycling
```dsl
# Use predefined rainbow palette
animation rainbow_cycle = rich_palette(
palette=PALETTE_RAINBOW,
cycle_period=5s,
transition_type=1
)
run rainbow_cycle
```
### Custom Color Palette
```dsl
# Define a sunset palette
palette sunset = [
(0, #191970), # Midnight blue
(64, purple), # Purple
(128, #FF69B4), # Hot pink
(192, orange), # Orange
(255, yellow) # Yellow
]
# Create palette animation
animation sunset_glow = rich_palette(
palette=sunset,
cycle_period=8s,
transition_type=1
)
run sunset_glow
```
### Animation Sequences
```dsl
animation red_pulse = pulsating_animation(color=red, period=2s)
animation green_pulse = pulsating_animation(color=green, period=2s)
animation blue_pulse = pulsating_animation(color=blue, period=2s)
sequence rgb_show {
play red_pulse for 3s
wait 500ms
play green_pulse for 3s
wait 500ms
play blue_pulse for 3s
repeat 2 times:
play red_pulse for 1s
play green_pulse for 1s
play blue_pulse for 1s
}
run rgb_show
```
## 📚 Documentation
### Getting Started
- **[Quick Start Guide](docs/QUICK_START.md)** - Get up and running in 5 minutes
- **[DSL Reference](docs/DSL_REFERENCE.md)** - Complete DSL syntax and features
- **[Examples](docs/EXAMPLES.md)** - Comprehensive examples and tutorials
### Reference
- **[Animation Class Hierarchy](docs/ANIMATION_CLASS_HIERARCHY.md)** - All available animations and parameters
- **[Oscillation Patterns](docs/OSCILLATION_PATTERNS.md)** - Dynamic value patterns and waveforms
- **[Troubleshooting](docs/TROUBLESHOOTING.md)** - Common issues and solutions
### Advanced
- **[User Functions](docs/USER_FUNCTIONS.md)** - Create custom animation functions
- **[Animation Development](docs/ANIMATION_DEVELOPMENT.md)** - Create custom animations
## 🎯 Core Concepts
### DSL-First Design
Write animations using simple, declarative syntax:
```dsl
animation fire_effect = fire_animation(intensity=200, cooling=55, sparking=120)
run fire_effect
```
### Dynamic Parameters
Use oscillating values to create complex effects:
```dsl
animation pulsing_comet = comet_animation(
color=red,
tail_length=smooth_oscillator(5, 15, 3s),
speed=2
)
```
### Color Palettes
Rich color transitions with predefined or custom palettes:
```dsl
palette custom = [(0, blue), (128, purple), (255, pink)]
animation palette_cycle = rich_palette(palette=custom, cycle_period=4s)
```
## 🎨 Animation Types
### Basic Effects
- **Pulse** - Breathing/pulsing effects with smooth transitions
- **Sparkle** - Random twinkling and starfield effects
- **Fire** - Realistic fire simulation with warm colors
- **Comet** - Moving comet with customizable tail
### Color Animations
- **Rich Palette** - Smooth color transitions using predefined palettes
- **Color Cycling** - Custom color sequences with smooth blending
- **Gradient** - Linear and radial color gradients
- **Plasma** - Classic plasma effects with sine wave interference
### Pattern Effects
- **Wave** - Mathematical waveforms (sine, triangle, square, sawtooth)
- **Noise** - Organic patterns using Perlin noise
- **Position-Based** - Precise control over individual LED positions
### Motion Effects
- **Bounce** - Physics-based bouncing with gravity and damping
- **Shift** - Scrolling and translation effects
- **Scale** - Size transformation and breathing effects
- **Jitter** - Add random variations to any animation
## 🔧 Installation
### Prerequisites
- Tasmota firmware with Berry support
- Addressable LED strip (WS2812, SK6812, etc.)
### Setup
1. **Enable Berry** in Tasmota configuration
2. **Configure LED strip** using Tasmota's LED configuration
3. **Import the framework**:
```berry
import animation
```
4. **Create your first animation** using the DSL
## 🌈 Predefined Palettes
The framework includes several built-in color palettes:
- **PALETTE_RAINBOW** - Standard 7-color rainbow (Red → Orange → Yellow → Green → Blue → Indigo → Violet)
- **PALETTE_RGB** - Simple RGB cycle (Red → Green → Blue)
- **PALETTE_FIRE** - Warm fire colors (Black → Dark Red → Red → Orange → Yellow)
- **PALETTE_SUNSET_TICKS** - Sunset colors (Orange Red → Dark Orange → Gold → Hot Pink → Purple → Midnight Blue)
- **PALETTE_OCEAN** - Blue and green ocean tones (Navy → Blue → Cyan → Spring Green → Green)
- **PALETTE_FOREST** - Various green forest tones (Dark Green → Forest Green → Lime Green → Mint Green → Light Green)
```dsl
# Use any predefined palette
animation ocean_waves = rich_palette(
palette=PALETTE_OCEAN,
cycle_period=8s,
transition_type=1
)
run ocean_waves
```
## ⚡ Performance
Optimized for embedded systems:
- **Memory Efficient** - Minimal RAM usage
- **CPU Optimized** - Efficient rendering algorithms
- **Scalable** - Handles strips from 10 to 1000+ LEDs
- **Real-time** - Smooth 30+ FPS animation
### Performance Tips
- Use longer animation periods (2-5 seconds) for smoother performance
- Limit simultaneous animations (3-5 max recommended)
- Consider strip length when designing complex effects
## 🤝 Contributing
Contributions are welcome! Areas for contribution:
- New animation effects
- Performance optimizations
- Documentation improvements
- Example animations
- Bug fixes and testing
## 📄 License
This project is licensed under the MIT License.
---
**Happy Animating!** 🎨✨