Welcome to ZPUI documentation!
=================================
ZPUI (ZeroPhone UI, pronounced *zippy ui*) is a powerful user interface and app framework for small screens.
It's usable on a wide variety of single-board computers, and originally designed for the ZeroPhone project.
ZPUI only requires a small screen, monochrome or color, starting from 128x64 OLED screens, and some buttons - starting from 5 buttons and up to an entire QWERTY keyboard.
.. image:: _static/zpui_wslcd_crop.jpg
Capabilities
------------
What does ZPUI give you?
* Small physical interface for your small Linux computer management, at your fingertips
* Safe shutdowns, unmounts, service restarts, password resets, and more
* Connecting to WiFi, including password input with 5 buttons; setting WiFi country
* Seeing your board's IP address, debugging network issues, connecting to Tailscale, enabling/disabling SSH, network debugging and scanning
* Ability to quickly write your own ZPUI apps in Python, with tutorials and documentation, with a ZPUI emulator for development use
* Running arbitrary scripts and general debugging
* Basic control over media (volume and media player control)
* Hardware tinkering and debugging apps
* An updater and notifier to receive the latest ZPUI features as soon as they're out
...and much more.
ZPUI is great for:
* Controlling a server Raspberry Pi on a shelf - especially when it malfunctions
* An in-place control panel for a task-tailored Pi, from a 3D printer controllers and CCTV cameras, to routers and PiHole installations
* A base for building your own custom devices with a simple yet powerful UI
* Figuring out how to log into a random SBC you use for tinkering
* A rescue interface for full-sized PC configured as a NAS, or even
* A primary interface for a pocket computer you carry around as a Linux terminal.
Hardware
--------
Currently stock-supported devices and screen&button shields:
* Beepy, Colorberry, Blepis handhelds
* ZPUI businesscard (both Pi GPIO and QWIIC)
* WaveShare 1.3" 240x240 LCD HAT
* WaveShare 1.3" 128x64 OLED HAT (untested but should work)
* OG ZeroPhone
Other device support can be added relatively trivially, too.
.. image:: _static/zpui_bc.jpg
ZPUI businesscard with a 128x64 OLED, useful for on-the-fly debugging - only requires a spare QWIIC connector.
.. image:: _static/zpui_blepis.jpg
ZPUI on two Blepis PDAs, one with a Sharp Memory 400x240 LCD, and another with a 320x240 color LCD with backlight
.. image:: _static/zpui_wslcd.jpg
ZPUI on the WaveShare 1.3" 240x240 LCD HAT
Other device support is easy enough - most of the time, you'll only need to edit a config file.
Minimum requirements:
* monochrome/color screen, 128x64 or larger. For instance, one of:
* 128x64 OLED (common)
* 320x240 color LCD screen
* 400x240 Sharp monochrome or JDI color screen
* 5 buttons (up/down/left/right/enter), with support for QWERTY keyboards. For instance, one (or multiple) of:
* Pi GPIO buttons
* Pi GPIO matrix button
* I2C/SPI GPIO expander-connected buttons
* HID device (USB, I2C, emulated etc.)
ZPUI is based on pyLCI, a general-purpose UI for embedded devices, an interface that supports 16x2 and larger character displays.
Currently. ZPUI is tailored for Blepis and ZPUI businesscard hardware, but expanding into other form-factors and usecases,
and the documentation is being improved along with the effort.
Credits:
--------
.. image:: _static/nlnet.png
.. image:: _static/ngicore.png
ZPUI development is funded through `the NGI0 Core Fund `_,
a fund established by `NLnet `_ with financial support
from the European Commission's `Next Generation Internet programme `_,
under the aegis of `DG Communications Networks, Content and Technology `_
under grant agreement No `101092990 `_.
Guides:
-------
* :doc:`Installing and updating ZPUI `
* :ref:`Installing ZPUI emulator `
* :doc:`Developing a simple app `
* :doc:`Developing a Canvas-using app `
* :doc:`App development how-tos `
* :doc:`ZPUI configuration files `
* :doc:`Hacking on UI `
* :doc:`Logging configuration `
References:
===========
- :doc:`Crash course `
- :doc:`UI elements `
- :doc:`Helper functions `
- :doc:`Input system `
- :doc:`Keymaps `
- :doc:`Output system