Slime OS is an app launcher for the PicoVision (and soon other RP2040 and RP2350 devices). It was originally designed for the Slimedeck Zero, a mini cyberdeck project. However I hope to expand it to other devices and form factors.
This README contains affiliate links which help support this project!
Slime OS runs in a limited 32-color mode with a 400x240 internal resolution which is interlaced up to 800x480. This resolution should scale well on most HDMI displays.
- Flash the widescreen build of the PicoVision firmware to your PicoVision CPU.
- Use Thonny to replace the contents of your PicoVision Micropython filesystem with the files in
src
.
Please refer to an example app for boiler plate.
Slime OS includes various libraries which are used internally but may also be helpful when making apps.
Begin by importing slime_os...
import slime_os as sos
Slime OS Library | Description |
---|---|
sos.gfx | Drawing methods including shapes, text, and other utilities. |
sos.intents | Intents are used to send signals from an app to the OS, including quitting the app, swapping apps, or flipping the frame buffer. |
sos.ctrl | Controller for identifying expansions. |
sos.kbd | Keyboard instance for reading buttons. |
This software is experimental and does not work completely, specifically issues include...
- Input is only supported via an i2c keyboard, which is not documented (hoping to add USB keyboard soon)
- Some apps are upside down due to the Slimedeck having the screen rotated 180 degrees. Newer apps use the
sos.graphics.*
methods which support thedisplay/flipped
value inconfig.py
. Older apps useself.display.*
and have wild math to rotate everything manually. - Everything is generally incomplete
Currently this project uses a very specific set of hardware, however I'd like to expand it to support other RP2040 and RP2350 boards in the future. Feel free to do PRs to add more general hardware support.
This project is currently only tested on the PicoVision.
The (currently) only support keyboard is based off this XRT500 remote. There are a few variants of this same "version" of remote, but I've only used this exact one.
Along with the remote, you will need an MCP23017 to convert the key matrix to I2C. I have a few extra of the keyboard PCBs available for sale. You could also pick up an Adafruit MCP23017 board and wire it to the keyboard PCB by hand.
I would like to add more input types in the future.
The expansion port used on the Slimedeck is the 5-pin Dk925A-10M which, as far as I can tell, are only sold via Pimoroni.
The pinout used for an expansion read left to right, with the edge connector facing you is...
5V - SDA/TX/CPU:GP0 - SCL/RX/CPU:GP1 - CTRL/GPU:GP29 - GND
A 4.7k resistor should be placed on the PicoVision connecting the GPU's GP29 to GND while the expansion side should place a 4.7k resistor between CTRL (GP29) and 5v.
Although the plan is to eventually support various resistor values for different protocols / speeds, due to a design mistake this is not currently reliable. The PicoVision only has one ADC pin exposed (GPU:GP29) which is used as CTRL, however to reliably determine the value of the expansion resistor we also need a second ADC to act as a VREF (voltage reference) so we can determine the true voltage of our 5v line. As it stands if the 5v line is 5.2v or 4.9v due to load it may shift the value of our expansion voltage divider out of the expected range and the expansion may be incorrectly recognized. This is easily remidied with an external i2c ADC, but it is not currently implemented.
This software is licensed as MIT.
App icons are from PiiiXL on Itch.io and are licensed CC BY 4.0