Implements a Pillow (Python Imaging Library friendly fork) driver and simulator for the Flip-Dot XY5 Display from AlphaZeta.
Heavily modified and brought upto date fork of dcreemer/flipdot.
The XY5 Display can be thought of as a bitmaped screen. It consists of mechanical flipping "dots," laid out in an XY grid. The display is made up of a number of individual panels, where each panel is 7x28 pixels. Each panel has a controller, and the controllers may be daisy-chained. Controllers connect to driver computers via RS-485. On a single daisy-chain, each panel gets a unique numeric address (0, 1, 2, etc..).
The protocol to control a panel is not well-documented. Essentially each column of 7 pixels (in a 7x28 board) is a controlled by a single byte, using the lower seven bits. The packet header includes panel address information, as well as other meta-data. The protocol is outlined more in the reference code from Alfa-Zeta.
For developing interesting visualizations, it's much nice to treat a collection of panels as an 1-bit-per-pixel arbitrary XY image. This software implements that abstraction using the Python Imaging Library. Image data is rendered into an image, and then periodically that image is converted to Flip-Dot display protocol and sent to the panels. To make development easier, this software also implements a curses-based simulator of the display that communicated via UDP. Develop on a local computer, then try it out on a real display.
# Create virtualenv and install the required libraries with pipenv:
pipenv install
# Run the simulator in one window
pipenv run python flipdot/sim.py
# In another, run the demo application (defaults to same setup as simulator):
pipenv run python flipdot
See --help
arg for more usage
pipenv run flipdot/sim.py --help
pipenv run python flipdot --help
----------------------------------------------------------
| ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ |
| ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ |
| ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ |
| ● ● ○ ○ ● ● ○ ● ● ● ○ ○ ○ ● ● ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ |
| ● ● ○ ○ ● ● ● ● ○ ● ● ○ ○ ● ● ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ |
| ○ ● ● ● ● ○ ● ● ○ ● ● ○ ○ ● ● ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ |
| ○ ○ ● ● ○ ○ ● ● ○ ● ● ○ ○ ● ● ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ |
| ○ ○ ● ● ○ ○ ● ● ○ ● ● ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ |
| ○ ● ● ● ● ○ ○ ● ● ● ○ ○ ○ ● ● ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ |
| ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ |
| ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ |
| ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ |
| ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ |
| ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ ○ |
----------------------------------------------------------
Here is a sample video:
(click the image to play it). It shows this software running a live Flip-Dot display, cycling through headlines derived from Flipboard.
See the demo.py
file for examples, but in general, anything that can be written to
a Python Imaging Library 1-bit image can be sent to the display.
BSD 3-Clause. Note that the included font "VeraBd.ttf" is from here and subject to its own license.