I backed the Kickstart campaign for TinyScreen, which adds a colour OLED display to the TinyDuino platform, thinking this would make a neat badge for the Maker Faires. Well it arrived just in time with Edinburgh Mini Maker Faire in two weeks followed by Maker Faire UK in Newcastle the following weekend.
I opened each of the packs and dutifully stacked each of the boards, the USB (for programming and charging); the TinyDuino (Pro Mini 328 3.3V 8Mhz); the battery (dinky little 140mAh LiPo); the microSD; and the TinyScreen on top. I raced to the online instructions, grabbed the example code off the web page and then hit a road block. How do I program this from the Arduino interface? There are no instructions (at least none I could find) on the website, only CodeBender which allows you to upload directly from the webpage. I don’t want to upload from a webpage every time I work on a TinyScreen project, it’s an Arduino and should behave like one. Some Googling around found me the TinyScreen library on their GitHub which came without examples. I grabbed each of the examples off their tutorial and saved them into the library once I had installed it. Libraries are not complete without a few examples to act as guides/refreshers in how to use them.
So I played flappy bird, had my name written in multicolour and then loaded up the video player. So far so good, I had swirling colours (downloaded the example tsv file onto a microSD card) but was hungry for more, I wanted to add my own videos. The instructions point to cygwin and ImageMagick but give no indication of how to install them. I installed cygwin and dropped ImageMagick (unzipped) into what I thought was the correct folder. Following the instructions again I brought up the cygwin prompt and with the convert.sh file and a .gif in the correct folder I tried to convert it. im-convert not found error and no .tsv. Crestfallen I thought I hadn’t installed ImageMagick properly and spent an hour or two trying different things, downloading the self-installing .exe, moving the folder in cygwin, repeating each of the instructions steps. Eventually I decided I’d try poking around in the convert.sh file and found the command referencing “im-convert”, which with some brief Googling I decided should instead be simply “convert”. This change fixed convert.sh and I could now generate the .tsv needed by TinyScreen to show the animated gifs on it’s 96×64 OLED screen.
But wait there’s more. When you make an animated gif for sharing on the internet you optimise it so the file size isn’t outrageous, this is done by a combination of file size reducing measures. One such measure is to mask the elements of the frame which do not change from the previous frame, that way you avoid storing data for pixels which don’t change. Unfortunately our TinyScreen doesn’t follow this logic and the convert process resizes each frame to 96×64 (even if it was only a subset of the original gif’s size). An optimised gif shows each of the frame changes blown up to fit the screen, leading to some … interesting? results. I tried taking the gifs into PhotoShop CC, modifying the layers/frames (for instance making each frame’s corner pixel change colour) and while that fixed the scaling of each frame it added a distracting pixel or two but didn’t resolve the loss of the first frame’s overall look. After some time on Google I found that PhotoShop cannot export an animated GIF which isn’t optimised. Thankfully I also found a simple command line program to un-optimise GIFs.
Having recently started teaching myself Autodesk Inventor I decided to flex my CAD muscles on making a case for the TinyScreen. I printed the first draft out in ABS on a Replicator 2X and while I hadn’t allowed any clearance for assembly and some features were poorly thought through I was generally pleased with the result. Fingers crossed I can get revision 2 (or 3) printed in time for the Maker Faires to protect and enhance the TinyScreen.