RP01 is an exploration of technical minimums in a time of maximalist technology. What might be possible with the least? RP01 is part of an ongoing interest in small board computers. Inspired by the Art Appliances made by John F. Simon Jr. in the early 2000s, I’ve been curious about accessible computation and the notion of art appliances, computer jewelry, and screens for your screens. I wanted to share my curiosity with you.
Brian Eno once said “the only interesting thing about computers is screensaver software.” RP01 is preloaded with a collection of apps that speak to the history of the screensaver. In 1983, when personal computers first became affordable and popular, John Socha wrote the first screensaver software to preserve the image quality of computer displays.
RP01 is powered by a Waveshare RP2350 1.28 inch LCD display. The RP2350 microcontroller chip was designed by Raspberry Pi in the United Kingdom. Plug it in to a USB-C power source and it runs by itself.
Features
- Automated rotation between animations
- Smooth backlight fade transitions
- Boot sequence with logo display
- Memory-efficient modular design
- Error recovery handling
Animations
01. DVD-01
Classic DVD-style bouncing Moonshot logo
02. Mystify
A tribute to the classic Windows screensaver
03. Sum
Concentric circles with randomized colors
04. Lissajous
Lissajous curves with smooth frequency transitions
05. Starfield
A tribute to the classic Windows screensaver
06. Toasters
A tribute to the 1-bit Macintosh After Dark 2.0 screensaver
07. DVD-02
Classic DVD-style bouncing stacked Moonshot logo
08. Rise
Color transitioning sunrise palettes
09. Moiré
Evolving interference patterns with dynamic colors
10. Eclipse
Moving eclipse effect with color changes
11. Clouds
A tribute to Super Mario Clouds by Cory Arcangel
12. SCRNSAVE
A homage to the first screensaver by John Socha in 1983
Animation Timing Control
- Each animation's duration is controlled through the animation_controller.py file
- Durations are specified in milliseconds in the AnimationController class:
self.animations = [
("DVD-01", run_dvd_01, 120000),
("Mystify", run_mystify, 120000),
("Sum", run_sum, 180000),
("Lissajous", run_lissajous, 180000),
("Starfield", run_starfield, 120000),
("Toasters", run_toasters, 120000),
("DVD-02", run_dvd_02, 120000),
("Rise", run_rise, 180000),
("Moire", run_moire, 180000),
("Eclipse", run_eclipse, 360000),
("Clouds", run_clouds, 180000),
("SCRNSAVE", run_scrnsave, 180000)
]
Customization
- Transition timing can be modified in animation_controller.py
- Color palettes can be customized in base_colors.py
- New animations can be added by following the existing pattern:
1. Create new animation file
2. Add to animation_controller.py sequence
3. Follow timing/transition conventions
Development
To add a new animation:
1. Create new file your_animation.py
2. Implement run_animation(lcd, duration_ms=180000)
3. Add to AnimationController.animations list
4. Test independently before adding to sequence
Troubleshooting
- Black screen: Check pin connections and power
- No animations: Verify all files are present
- Memory errors: Reduce active animation count
- Display glitches: Check SPI connections
Error Recovery
The system includes:
- Clean shutdown on Ctrl+C
- Error handling for display issues
- Automatic sequence continuation
Performance Notes
- Each animation runs for 3 minutes by default
- Smooth 60fps target for transitions
- Memory-efficient buffer usage
- Optimized drawing routines
Contributing
Feel free to:
- Add new animations
- Optimize existing code
- Improve transitions
- Report issues
MIT License
Copyright © 2024 Duane King
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Credits
- Original LCD driver by Waveshare Electronics
- Animations and system design by Duane King
- All rights reserved, all wrongs reversed