Introduction: Communicating With a Pro-Lite LED Display, Cable Construction and Protocol

About: Dad, maker, dreamer, hacker, painter.

I had a Pro-Lite display that I had picked up cheap without any communication cable, or any software, lying around in my shop. At least I had the remote, but it was slow and I never thought I would actually use it like that. It was high time that I got around to making a cable and looking into the protocol, so I thought that I would share my findings here.

My goal was to be able to update the sign from Processing and thereby be able to use it interactively in some way. It was a two step process, first I needed a cable, secondly I needed the protocol. Researching on the interwebs, I was able to find (as we all are) all the information I needed and now I will share this information in one location here, at our first and favourite 'how-to' stop.

Step 1: Hunter and Gatherer

Things that you need
  • A Pro-Lite Display Sign (try online, I lucked out in finding mine)
  • A four wire telephone cable (RJ12) - look closely and see how many wires there are, six will also work, but four is simpler, a phone extension from the dollar store will usually have four.
  • A female serial DB9 Connector – I picked mine up at my local shop, they are easy enough to find online as well.

Tools
  • a crimp connector or some wire strippers with a crimper built in
  • wire clippers
  • a computer

Step 2: Make the Communication Wire

Identify your Telephone Cable

First you need to identify whether your phone wire is straight-through or crossover. Mine was straight-through.

You do this by holding the cable end to end, tip to tip, and seeing if the colours line up or not. If they line up, you are holding a crossover cable, otherwise it is straight-through.

You can make your cable either way, just reverse the connections from mine if you are using a crossover cable.

Communication Wire Construction

Cut one end off of your telephone extension, expose enough wire to work with, and strip the four ends.

Crimp-connect the pins that came with your DB9 connector onto each of the exposed wires.

If you are using a straight-through cable, connect the green wire to pin 3 of the DB9. The red wire will go to pin 2, and the black wire will go to pin 5.

If you are using a cross-over cable, then you will be connecting green to pin 2, red to pin 3, and yellow to pin 5.

A little hint for construction if you are unsure is to connect the pins directly to the male port  (on your computer or an extension) to test until you are satisfied that you have it right. Connecting the wrong way should not damage anything, but snapping them into the female connector makes it trickier to change around if you have the pin-out wrong.

Step 3: Set Things Up

Next thing we need to do is to plug it into the computer. Attach the RJ12 (telephone adapter) to the Pro-Lite unit and the female DB9 to your serial port.

Make sure that you set the signs baud-rate to the same as the serial port.
The baud-rate I am using is 9600. Set the rest to 8 bits, No Parity, 1 Stop Bit, and No Flow Control

You do this on the message board using the remote control. I believe that the default is 9600, which is the speed that I left mine at.  Watch when you turn it on and it will display the current settings. Chances are that like me you won't have to change anything.
  • Press ESC
  • S
  • Enter eight times in a row
  • use the Up/Down arrows to select baud-rate
  • Enter four more times.

The sign uses it's own protocol to communicate with the sign. We will look at that in the next step.

Step 4: Pro-Lite Protocol

The sign only accepts commands up to 1,023 bytes in length, minus packet headers leaves room for 1016 characters. With 26 pages, that makes room for 26,624 characters roughly. Pretty good, considering that this is not including trivia, which is lame and I think can be deleted.

For my current need this is fine, especially as I intend to use Processing to update the sign anyways, and therefore as the memory.

The protocol is simple enough, it looks a little bit like HTML, in that the code is contained in tags.
Each unit has an ID number which you assign via the remote. From 1 – 255 I have only the one unit, and so it is number 1.

To communicate with the Pro-Lite, first we call the identifier to wake up the unit.

<IDXX> - where XX is the unit identification number, in hex. In our case <ID01> is the text  to send to wake my unit up .
.
Text commands come after the identifier. If I had not yet woken the unit, I would need to type the following.

<ID01>, end of line, carriage return.
<ID01>....text and commands.... ,end of line, carriage return.

If there has not been any communications for over a minute you must make another wake up call to the unit before you can send it any data.

Displaying a Message

The sign has room for 26 messages, referred to as pages. Pages are denoted by the letters A-Z.
The syntax is as follows.

<PX>...message... end of line, carriage return - where X is actually the page you wish to access.

So if we wanted to access page A and have it print Hello World, we would send

<PA> Hello World...end of line, carriage return

Colours

There are 26 colour codes to choose from. Some of them are really ugly.
You choose a colour by using the following tags.
  • <CA>Dim Red 
  • <CB>Red
  •  <CC>Bright Red
  • <CD>Orange
  • <CE>Bright Orange
  • <CF>Light Yellow
  • <CG>Yellow
  • <CH>Bright Yellow
  • <CI>Lime
  • <CJ>Dim Lime
  •  <CK>Bright Lime
  • <CL>Bright Green
  • <CM>Green
  •  <CN>Dim Green
  • <CO>Yellow/Green/Red
  • <CP>Rainbow (Default)
  • <CQ>Red/Green 3D 
  • <CR>Red/Yellow 3D
  • <CS>Green/Red 3D
  •  <CT>Green/Yellow 3D
  •  <CU>Green on Red
  • <CV>Red on Green
  •  <CW>Orange on Green 3D
  •  <CX>Lime on Red 3D
  • <CY>Green on Red 3D
  •  <CZ>Red on Green 3D

Character Size/Format

There are eight character sizes or formats
  • <SA>Normal (Default)
  • <SB>Bold (Wide)
  • <SC>Italic
  • <SD>Bold Italic (Wide)
  • <SE>Flashing Normal
  • <SF>Flashing Bold (Wide)
  • <SG>Flashing Italic
  • <SH>Flashing Bold Italic (Wide)
Functions

These are the available functions for displaying the text
  • <FA> - Random colour and effect
  • <FB> - Open from the center
  • <FC> - Hide the text
  • <FD> -  Appear
  • <FE> - scrolling colours
  • <FF> -  close right to left
  • <FG> -  close left to right
  • <FH> -  close toward center
  • <FI> -  scroll up from the bottom
  • <FJ> -  scroll down from the top
  • <FK> -  two layers slide together
  • <FL> - falling dots form text
  • <FM> - pac-man graphic
  • <FN> -  creatures
  • <FO> -  beep the sign beeps
  • <FP> - pause, short delay
  • <FQ> - sleep blank screen
  • <FR> - random dots form text
  • <FS> - roll message left to right
  • <FT> - show time and date, no formatting choices
  • <FU> - text colour changes each time
  • <FV> -  thank you in cursive
  • <FW> -  welcome in cursive
  • <FX> -  speed 1 – slow and jittery
  • <FY> -  speed 2
  • <FZ> -  speed 3
Graphics

There are also 26 graphics, which are user reprogrammable, I have not really explored these. The syntax is as follows.

<BX> - where X is a letter from A-Z. Try them out to find out what is what.

There are a bunch of different commands as well, but as I will be using Processing to update the sign,  I really only needed to be familiar with the actual presentation of text. Processing has the ability to set timers and the like, so for now I have not explored these avenues.

Something that could be interesting and I will eventually explore would be reprogramming the graphic blocks, especially with Processing driving.

For those who are interested, a more comprehensive list of the protocol can be found here -
http://wls.wwco.com/ledsigns/prolite/ProliteProtocol.html .

This protocol can be used by anything that can communicate ascii text to the sign. I am most comfortable with Processing, but you could just as easily use any other language.

The key things to remember are; to wake the sign up, and to include end of lines and carriage returns after commands.

Step 5: Go Processing!

I will keep it simple here and show you a basic example that I made using Processing. It will serve to illustrate the general use of the protocol, I will leave an interesting implementation up to you.

First an explanation of what the sketch will do. It will display two coloured squares to the user, and when the user clicks a square, the sign will update to reflect the colour of the square. It will simply remain that way until a different colour is clicked on the screen.

Here is an exciting video of it in action



I have included a text version of the sketch, you will need to copy and paste it into a new sketch in your Processing environment.
The code is commented throughout, so I won't bore you with a redundant walk-through here. It is really very straight forward.

Once you get this working, then you can easily adapt your new knowledge to make a much more interesting sketch, one that displays your local weather, or the train schedule maybe.

Share and enjoy.

Hack It! Challenge

Participated in the
Hack It! Challenge

ShopBot Challenge

Participated in the
ShopBot Challenge