Version 2 of the DeskLights project, more flexible, but not as easy
Arduino Perl CSS
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.



DeskLights is a network enabled visual alert system and an experiment in "Ambient Information". It receives instructions through a REST style API and controls the attached LED strips.

For background and hardware details, please see the more complete write up on Instructables:

What's New (July 2016)

I've updated the repo to reflect some changes I've made and things I've learned in several years fo regular use.

  • Included the command line utility "dl" that I use almost exclusively instead sending http requests to the desk.
  • Included a sample Perl script that parses Nagios' dat file and send displays status on the desk.
  • Added the "frame" command, which allows you to set all pixels of the desk in one http post request
  • Archived all the old Growl and AppleScript stuff that I really don't use anymore.
  • You can now use pass an image to the dl script and it will display it on the desk (after severely resizing, of course).

Previous Update (November 2013)

  • New "pixel" command, allowing for the setting of individual leds, including the ability to set a series of pixel colors without displaying them until after they are all set.
  • All web server related code is now handled by the Webduino library. This brings with it several nice features:
    • Proper URI params
    • Basic Authentication
    • More readable code file
  • Most functions have been refactored to accept standard parameters and be more flexible
  • Unfortunately, this caused all of the API urls to change and breaks backwards compatibility with any calling scripts you may have written. Sorry, but I think it's worth it.


Parameter Explanation

All exposed function calls take 0 or more single letter parameters:

r: red value (0 - 255)
g: green value (0 - 255)
b: blue value (0 - 255)
h: hex string representing color (000000 - ffffff)
x: x coordinate
y: y coordinate
d: delay in milliseconds
i: id of pattern/grid id of pixel (grid 0,0 = 0; grid 1,0 = 1, etc)
n: number of pixel on strip, starts at 0
s: call show() command automatically (0 or 1, defaults to 1)

Note: All color parameters can be specified as either RGB or hex

Public Functions

off : Turn off all pixels
show : show any set, but not yet shown pixels
color: set all pixels to color; takes color
wipe: like color, but down the strip; optional delay
alert: flash all pixels; takes color and optional delay
pixel: set pixel to color; takes id or number, color, and optional show
default: set default pattern to loop, takes pattern id
frame: set the whole desk at once, pass in string of hex colors ie: h=ffffff000000 etc...

These are not currently available. Seems I ran out of room in memory somewhere?

gridtest: show grid pixel by pixel, no params
lighttest: show rgb on all pixels, no params


Here's an example using alert...

Flash bright white for default length of time




or with a 1 second duration



Helper Script Install

The dl utility is written in Perl. It has fairly minimal dependencies for the basic functions, but will require the GD library and Image::Resize module if you want to use the image to desk functionality.