ot-eink-server is very similar to
ot-server-standalone. In order to use it,
you must have a Chili flashed with mac-dongle plugged into your POSIX
computer. You can then run
The application acts a lot like a simple file server: clients can send a GET
ca/img with the
id query option set to the name of the requested
file. For instance:
GET ca/img?id=001.gz would send the file titled
in the response.
If a child attempts to open a nonexistant file, the server ignores the GET request and prints an error. Same behaviour if the client requests a file that is too large to transmit in a single CoAP message (larger than 1024 bytes).
For the E-Ink application in particular, the client expects the files to be
GZipped 1-bit raw pixel data. Thankfully, this is easy enough to accomplish
using ImageMagick (looks like
convert on most Unix systems, and ImageMagick
is significantly easier to Google than
convert). You can install it with
apt install imagemagick, on Ubuntu and Debian. There are several
helper scripts that accomplish common tasks.
This script can be used to convert a BMP image, such as the Cascoda logo, or example supermarket labels, into the format that the children can decompress and send to the displays. The script takes one argument, which is the base name of your image (e.g. “cascoda” if your image is named “cascoda.bmp”) and outputs the desired file as “$BASENAME.gz” (e.g. outputs cascoda.gz).
#!/bin/sh convert -rotate "-90" -depth 1 "$1.bmp" "$1.gray" gzip -n --best "$1.gray" mv "$1.gray.gz" "$1.gz"
This script can be used to generate an image containing arbitrary text, in the
format expected by the EInk client device. It accomplishes this by using the
format.sh script from above, and therefore it must exist in the same folder.
The text is scaled to fit onto a single line, so long lines may prove difficult
The script expects one argument containing the text of the image, and generates
two files: “$TEXT.bmp” is a preview of what will be shown on the display, and
“$TEXT.gz” is the file that should be uploaded by the server. If the text you
want to display contains spaces, you must surround it in quotes:
./label.sh "Text containing spaces".
#!/bin/sh convert -size 296x128 -gravity south -depth 1 label:"$1" "$1.bmp" ./format.sh "$1"
The demonstration works by changing the files provided by the server to each
Chili. There are essentially three “frames” in the “animation”: the first frame
is completely blank, used at the start of the demo while the devices are
idling. This frame is contained within the
clear.sh script provided below.
It only uses one image: a completely blank image named
#!/bin/sh cp -f blank.gz 001.gz cp -f blank.gz 002.gz cp -f blank.gz 003.gz cp -f blank.gz 004.gz cp -f blank.gz 005.gz cp -f blank.gz 006.gz cp -f blank.gz 007.gz cp -f blank.gz 008.gz
The second frame consists of a sentence filled with IoT buzzwords generated
label.sh script. This frame can be found in the
below. This frame uses eight different images:
logo.gz is the Cascoda logo,
and the rest of the images are words generated with
#!/bin/sh cp -f Cascoda.gz 001.gz cp -f Thread.gz 002.gz cp -f Scalable.gz 003.gz cp -f E-Paper.gz 004.gz cp -f IoT.gz 005.gz cp -f Display.gz 006.gz cp -f Demo.gz 007.gz cp -f logo.gz 008.gz
The third frame consists of the Cascoda logo, a label saying “Supermarket
Display” and some example barcodes. Its script is titled
#!/bin/sh cp -f logo.gz 001.gz cp -f "Supermarket Display.gz" 002.gz cp -f Lanpo_a1.gz 003.gz cp -f Lanpo_a2.gz 004.gz cp -f Lanpo_a4.gz 005.gz cp -f Lanpo_a1.gz 006.gz cp -f Lanpo_a2.gz 007.gz cp -f Lanpo_a4.gz 008.gz