When I was a member of London Hackspace they had an LED dot-matrix message board hooked up to an Arduino and an ethernet shield, it was controlled with a python script from the IRC chat room. I then had to move to Cambridge and so became a member of the Cambridge Makespace which didn't have an LED message board. So I decided to build one!
Raspberry Pi B v2
LED dot-matrix 32x8
The individual displays, bought from Sure Electronics.
Car USB charger
A really cheap 12-24V to 5V adapter capable of 2 Amps.
Passive Power Over Ethernet (POE) splitters
I only wanted a single cable to run to the display.
The most frustrating part of this project so far was trying to get the initialisation code right. The main obstacle to this was the fact that there are 2 chips that are used in these displays, the HT1632 and the HT1632C and while they're both made by Holtec and perform the same function the initialisation process differs slightly for each. And to compound this the first display I used had a HT1632C while the 4 displays I ended up using had HT1632s.
I wrote the drivers to control the displays directly in C as it would be ideal for this job especially when coulped with the WiringPi libararies. However C would be unsuited for the task of scripting the displays so I call the C driver via bash which also allows for easy debugging. You can see the C driver here: https://github.com/pinski1/MessageBoard/tree/master/Software
By typing "sudo write_disp -s 50 -m 'Hello world!'" the display will scroll "Hello world!" with a 50 millisecond pause between each column of LEDS in a character.
One cool thing I really like about Cambridge Makespace is the number of posters dotting the walls with slogans like: "Perfect is the enemy of done." or "Get excited and make things." or "Leave this space tidier than you found it." So I decided to duplicate them on the MessageBoard.
I've done this by having the slogans in text files (took a bit of time to find all the posters and copy the slogans!) and then using the python "linecache" function to bring a specifically numbered line into my python script and then print it via the bash terminal.
Of course I also wanted to have other sayings occasionally appear on the MessageBoard so I created separate text files for Makespace specific things which encourage members to help out and tidy up as well as another file containing a "Work in Progress" message. I then modified the script to pull lines sequentially from every text file in a directory every 30 seconds. This allows me to add lines to files later on easily as well as add new files for different types of messages.
I'm still finishing the code but to get my latest efforts you can download them from https://www.github.com/Pinski1/MessageBoard and load them onto your RPi. In the MessageBoard folder there are instructions for installing, compiling and running my code. I also hope that everything is sufficiently document to allow you to fix any problems or make any updates/upgrades.
As promised here is a YouTube video of the display on its initial "Hello World" message:
First things first, gather the bits, put them all in a safe place.
The Raspberry Pi is the core part of this project, it allows the display board to stand alone, connected to the network. Anyone familiar with developing with the RPi will be able to get started easily. And the power offered in such a compact package is ideal for complex scripts.
I put the Debian Wheezy on my SD card as I figured it was the most popular and the most help would be available if I ran into problems. I downloaded it from here: http://www.raspberrypi.org/downloads/
Once that was done I connected the RPi up to the keyboard, mouse, Ethernet and HDMI so I could run the first configuration. This is pretty much solely to get SSH access to the RPi which will be our main method of controlling the RPi. I also enabled SPI as we'll be using that to drive the display. Once I'd done that I saved the SD Card image back on to my main PC. There's nothing more frustrating than having to do that step multiple times.
The next project log will go over installing the code.