Software and Raspberry Pi interface hardware for FlaschenTaschen.
FlaschenTaschen is inspired by projects such as the Muro de botellas or MateLight. A bunch of Noisebridgers have seen Mate Light in action at 32c3 and got excited :) So our Noisebridge interpretation of it has a German influenced name.
Unfortunately, in the US, bottle reuse is not at all a thing, so there are no standardized crates with bottles you can buy. So we use milk crates (which is a thing) and put common, clear 12oz (355ml) bottles in (Mate, Corona,..) inside. Wrapped in aluminum foil, they make nice pixels.
How about watching a movie ?
The set-up is 9 crates wide and 7 crates high for a total of 63 crates (see wiring here) with 25 'pixels' each (this is what fits in our MakerFaire booth). 45x35 pixels or 1575 pixels total. All operated by a Raspberry Pi that provides a network API to update the display.
This is how it looks from the back:
The client directory contains some useful utilities such as
send-text
, send-image
or send-video
that you might be interested in.
Also, the current development VLC natively supports the FlaschenTaschen protocol if you want to send a video.
To develop visuals for the FlaschenTaschen display once it is ready, here you can already play around writing software that updates the networked display.
$ git clone --recursive https://github.com/hzeller/flaschen-taschen.git
$ cd flaschen-taschen
If you are not around Noisebridge to directly send images to the FlaschenTaschen installation, then you can start your own FlaschenTaschen server that displays the pixels as colored spaces in a terminal. Note, you need a fairly recent terminal that can display 24 Bit color (Konsole can do that for a while, more recent Gnome terminals as well. Also, newer xterms can do that as well. If you are on a Mac, an iTerm2 version 3.x will work).
In one terminal, go to the server/ directory, compile the terminal-based display and run it. Make sure to have it large enough to show all pixels:
$ cd server
$ make FT_BACKEND=terminal
$ ./ft-server # this will now show a black 'screen'
(looks too big on screen ? Try adding the option --hd-terminal
)
If you want to dig into details and understand the various server implementations, check out the server README.
FlaschenTasachen provides a network protocol, but there are also client APIs available - the api subdirectory is the best to inspect here.
To get started with programming, go to the examples-api-use/ directory, compile the programs and run it.
$ cd examples-api-use
$ make simple-animation
$ ./simple-animation localhost # <- network address of display.
Now go back to your terminal the ft-server
is running and you'll see the
space-invaders animation!
Easiest to get started with the programming is to read the simple-example.cc code, then move on to simple-animation.cc.
If you want to implement the simple network protocol in another language check out the protocol description or look at the C++ implementation.
For some immediate fun, send a PPM image to your server. Since the server already understands that format natively, you can unleash the usual netpbm toolbox for image manipulation:
bash$ jpegtopnm myimage.jpg | stdbuf -o64k pnmscale -xysize 45 35 > /dev/udp/localhost/1337
For a tool that decodes images (including animated gifs), go to
the client/ sub-directory compile send-image
(make send-image
, see
Send-Image section in client/ for needed
dependencies), then run
./send-image -h localhost some-image.png
which reads images and
sends them to the FlaschenTaschen display.
There are various projects that create demos for F~T. Collecting links here. Check out these repositories:
- https://github.com/cgorringe/ft-demos Demos such as plasma, lines, quilt, ...
- https://github.com/scottyallen/flaschenvnc VNC implementation: cast your screen to FlaschenTaschen (like so)
- A FlaschenTaschen VLC output by François Revol.
It is already submitted upstream, but until it hits distributions, you have
to compile VLC from git. That VLC
version is >=
3.0.0-git Vetinari
. Thensudo make install ; sudo ldconfig
and run it like so:
# Here, ft.noise is the hostname of the flaschen taschen display:
$ vlc --vout flaschen --flaschen-display=ft.noise \
--flaschen-width=45 --flaschen-height=35 \
<video-filename-or-YouTube-URL>
LED strips are controlled by a Raspberry Pi, connected via a custom level shifter for up to 16 strips (of which we only need 9 for our installation right now).