Category menu

Raspberry Pi LED scrolling sign

I’ve been playing around with LED scrolling signs for a while now and have been looking for an affordable sign to use for a project. Some LED signs are really expensive but I’ve recently come across this one from Embedded Adventures:

It’s a 80×8 display with three colours – Red Green, and Red/Green mixed to produce Orange. It measures about 35x4cm in size so is ideal for something eye catching.

Best part is that it’s available for just £20 from the Embeded Adventures website. It’s ready assembled so you don’t have to get out your soldering iron.

To connect to your Pi’s GPIO follow the instructions on this page – which includes a handy python script by Pete Goss. For the wiring guide note that the numbers refer to the number of the pins as you count across, not the GPIO number. This is also for the Rev 2 board model A or B (if you have mounting holes, your Pi is fine).

Raspberry Pi pin number (GPIO pin label) LDP-8008 pin number (label)
3 (GPIO 2) 2 (A row address)
5 (GPIO 3) 4 (B row address)
6 (GND) 5 (GND)
7 (GPIO 4) 6 (C row address)
8 (GPIO 14) 7 (EN enable display)
10  (GPIO 15) 8 (D row address)
11 (GPIO 17) 9 (red LED)
12 (GPIO 18) 10 (green LED)
13 (GPIO 27) 14 (latch)
15 (GPIO 22) 16 (shift)

There’s a slight errata on the page as you have to type:

sudo python scroll “Raspberry Pi” 1

to get it to work.

I found that it will work powered just from the GPIO of the Pi, but if you need a brighter display you can just hook up a 5 volt power supply (e.g. a spare USB charger) to the central pins – this doesn’t need to be connected to anything else. The lower pin (with the printed text on the back the right way up) is ground – I used the cable off a novelty LED light from Poundland.

For the cable you can use jumpers or for something more permanent I found this Maplin GPIO breakout board available for £3.49 to be ideal. The LDP8008 comes supplied with a ribbon cable you can use.

Here’s a closeup of my cable – by cutting the grey cable different lengths you can make it quite neat. I also added a plastic cover cut from a spare toolbox divider.

underside of the maplin breakout board

underside of the maplin breakout board

and the cable attached to the GPIO on the Raspberry Pi (make sure you get pin 0 on the right side!)

I was surprised at how neat this turned out...
I was surprised at how neat this turned out…

Note that in my case, the labels on the Maplin GPIO breakout board were incorrect – make sure you double check everything before plugging it into your PI so you don’t break it!I also found the display a little sluggish if anything else is running.

For extra neatness I mounted the whole setup in a box frame – the one I used came from Wilkinson’s and was £6.

endless office fun...

endless office fun…

, ,

28 Responses to Raspberry Pi LED scrolling sign

  1. Marcus August 7, 2014 at 5:21 pm #

    Great post! This inspired me to do something with my Pi a little more technical than use it as a media (XBMC) center. I wanted to make a scrolling stock ticker with python. I purchased the same 80×8 display from Embedded Adventures and a pre-assembled break-out board for the GPIO pins.

    I’m not too well versed in soldering and figured it’d be more of a hassle to learn so I used M/F jumper wires to connect the break-out pins into the LDP cable. All I can get when I run the script (thanks for the link btw) is a bit of flickering and some random LED scrolling. And sometimes NONE of the LED’s light up. I wired and rewired the everything to be sure the correct pins were connected up but to no avail. I also have connected the jumpers straight to the pi then into the cable a well as straight onto the pins of the LDP. I don’t have enough experience with this kind of stuff to determine if this a power problem or a software issue or God forbid the hardware itself is malfunctioning. I currently don’t use a power supply for the LED matrix, which could be the issue, I just don’t know for sure.

    If you have any ideas about what could be going on i’d be grateful to hear them.

    Thanks for the post
    Marcus

    • admin August 8, 2014 at 8:43 am #

      sounds like a power issue. Although the display worked with my Pi (a model A) without connecting it to a power supply it was very faint.

      • Marcus August 8, 2014 at 1:04 pm #

        Cool thanks for the response! I’ll look more into getting a dedicated power supply, any suggestions?

  2. ifeoma2005 January 6, 2015 at 10:44 am #

    Hi Marcus,

    How did you manage to power up the display unit, am not really a techie person but am learning and this looks so great.

  3. ifeoma200 January 7, 2015 at 6:58 am #

    Thanks for your reply but my question is where exactly do you solder the USB Cable on the display unit or on the breakout board and secondly I tried soldering the grey cable on the breakout board but the sequence or where exactly each strip of the cable goes is not really clear.

    I do sincerely apologise for asking a lot of questions but am really new to this and every little help or clarification is well appreciated.

    Thanks

    • admin January 7, 2015 at 12:12 pm #

      No worries – so the display unit has 2 connections on it – the grey ribbon cable, and then near the middle 2 screw terminals. I’ve connected these two up separately.

      I was able to make the display work (just) by connecting the ribbon cable to the Pi, using the instructions in my post, however it was a little bit dim and flickered, so by adding an additional 5 volt power supply to the central pins (with negative the bottom pin +5volts the top pin) the display is much brighter. Because USB includes a 5 volt supply I used a USB cable connected to a separate power supply to boost the power to the board.

      If soldering up a cable is a bit daunting, I’d suggest buying a breadboard and a kit like the Pi T Cobbler – http://www.adafruit.com/product/1105 and some jumper wires and making a temporary connection between the board and the Pi. Once you’ve got that working you could then move on to making a permanent soldered board like the one in my post.

      I’m about to do a new post on this project as Embedded Adventures now have a driver board built for this display – the connection between the Pi and the driver board is much simpler. I’ve also neatened up the case a bit.

      If you’re still stuck feel free to ask! – I can post more pictures of how I’ve connected the board if that helps.

      • ifeoma2005 January 7, 2015 at 12:53 pm #

        Thanks so much for the reply, the only bit that am struggling where each stripe of wire on the grey cable is soldered on the breakout board. On the board there are little text e.g. 5v0, TXD,+PWM,P23 etc, this is the part am struggling with, which wire goes where and also the USB cable where exactly to solder it , i really dont want to end up blowing up the display unit or my raspberry pi. If not I will wait for more pictures if thats not a problem with you.

        I really honestly do appreciate your time and effort in assisting me with this.

        Thanks so much

      • ifeoma2005I January 15, 2015 at 6:54 am #

        Hi

        How soon will the new post be made available, am so sorry for being a pain

        • admin January 15, 2015 at 10:02 am #

          In the next couple of weeks – I have a few projects on the go at the moment. I’d suggest if you’re finding the wiring a bit daunting to have a read of the Raspberry Pi GPIO guide http://www.raspberrypi.org/documentation/usage/gpio/ and try a few simpler things first – using jumpers and breadboard as I mentioned earlier – once you’ve got the hang of that you could try the LED display with jumper connections first – if that goes well you can then solder a more permanent version

  4. Kevin Haworth March 16, 2015 at 12:36 pm #

    Hi there
    In the ldp.py file, the line in the elif n ==2: section that says gpio.output(B,2) is this wrong?
    Please confirm
    Could you give me advice on how to get this to work with a 64 x 16 panel instead of the 80 x 8 one, the differences would give me a greater insight into how this works, best regards, Amanwhocan

    elif n == 3:
    gpio.output(A,1)
    gpio.output(B,1)
    gpio.output(C,0)
    gpio.output(D,0)
    elif n == 2:
    gpio.output(A,0)
    gpio.output(B,2)
    gpio.output(C,0)
    gpio.output(D,0)
    elif n == 1:
    gpio.output(A,1)
    gpio.output(B,0)
    gpio.output(C,0)
    gpio.output(D,0)
    else:
    gpio.output(A,0)
    gpio.output(B,0)
    gpio.output(C,0)
    gpio.output(D,0)

    • Marc Scott March 10, 2016 at 5:27 am #

      Did you ever get it to work with a 64×16? I am trying to get it to work.

  5. sandman112 November 13, 2015 at 12:27 am #

    has anyone managed to get this to work with the ldp6416 board, i have it connected up and have modified the script to suit (i think) but all i can get it to output is the top row only, i can see the correct letters coming thru but only the top row is lit … apart form that its working …. if you can call it that

  6. sandman112 November 15, 2015 at 1:01 am #

    finally figured it out …. to use this script on the bigger LDP6416 (LDP-6416) board you need to invert the EN functions …. for some reason these are inverted on this board … took me HOURS to figure this out …

    but … I’ve now got another problem, when you run it in 16 line mode, i.e. create a new matrix map within fonts.py and change all the range settings to 16 rather than 8 its very flickery … works but not much use, this is on raspberry pi 2 with overclocking set to medium … haven’t pushed it any harder yet, also running the latest release of debian … jessie i think its called

    with the range settings set to 8 its pretty smooth

    • Marc Scott March 10, 2016 at 5:29 am #

      Did you get it to fully work with the LDP6416 board?

      • sandman601 March 10, 2016 at 9:04 am #

        Yeah it worked fine using only 8 lines of the 16, as mentioned I think the rpi struggles with all 16 lines, I could post some code later on if you need it, but the main change was the enable line, it’s inverse to what it used on the 8 line board for some reason

        • admin March 10, 2016 at 11:50 am #

          Keep meaning to update this blog – I’m now using the embedded adventures display driver which runs the display via serial commands (it even has fonts). As the driver is 5 volts the Pi needs a logic level converter but it’s quite simple to do. My aim is to have the Pi run as a web server and process messages to display on the board.

          • sandman601 March 10, 2016 at 12:16 pm #

            Is that driver any good, I was going to get one but my project was just a Christmas thing so haven’t really taken it any further, I do have other things in mind but the character limit might be an issue with that project

      • sandman112 March 11, 2016 at 10:43 pm #

        ok I’m assuming that you are using the same code examples as linked to above ?? here the changes i made (i’ll try and cover them all) …. main one is at the end

        (i think

        in the font.py file
        change the range value to 17 and add extra 0’s to the end of each array item like this example from the first line
        array[32] = [5, 0, 0, 0, 0, 0, 0, 0, 0, 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0] # ASCII 32

        note this will make the text appear on the top of your display, you could put 4 zeros at the start and 4 at the end and it should run down the middle of the board

        ldp.py

        range 80 changed to 64 … think that was it

        scroll.py … i changed it from the executable shell thing it was to a py file for ease

        anything that references a range of 80 … change that to 64, there is something in there that references 79 … change that one to 63, (i did change the 8 ranges to 16 but thats where it started to struggle … too much for a RPi to handle i think, the fact that its still at 8 probably makes the extra 0’s in fonts.py pointless and maybe the extra bit in showrow functions below)

        function showrow was changed to be as below, just to add in the extra lines, i don’t think this actually does anything and might not be required

        def showrow(n):
        if n == 15:
        gpio.output(A,1)
        gpio.output(B,1)
        gpio.output(C,1)
        gpio.output(D,1)
        elif n == 14:
        gpio.output(A,0)
        gpio.output(B,1)
        gpio.output(C,1)
        gpio.output(D,1)
        elif n == 13:
        gpio.output(A,1)
        gpio.output(B,0)
        gpio.output(C,1)
        gpio.output(D,1)
        elif n == 12:
        gpio.output(A,0)
        gpio.output(B,0)
        gpio.output(C,1)
        gpio.output(D,1)
        elif n == 11:
        gpio.output(A,1)
        gpio.output(B,1)
        gpio.output(C,0)
        gpio.output(D,1)
        elif n == 10:
        gpio.output(A,0)
        gpio.output(B,1)
        gpio.output(C,0)
        gpio.output(D,1)
        elif n == 9:
        gpio.output(A,1)
        gpio.output(B,0)
        gpio.output(C,0)
        gpio.output(D,1)
        elif n == 8:
        gpio.output(A,0)
        gpio.output(B,0)
        gpio.output(C,0)
        gpio.output(D,1)
        elif n == 7:
        gpio.output(A,1)
        gpio.output(B,1)
        gpio.output(C,1)
        gpio.output(D,0)
        elif n == 6:
        gpio.output(A,0)
        gpio.output(B,1)
        gpio.output(C,1)
        gpio.output(D,0)
        elif n == 5:
        gpio.output(A,1)
        gpio.output(B,0)
        gpio.output(C,1)
        gpio.output(D,0)
        elif n == 4:
        gpio.output(A,0)
        gpio.output(B,0)
        gpio.output(C,1)
        gpio.output(D,0)
        elif n == 3:
        gpio.output(A,1)
        gpio.output(B,1)
        gpio.output(C,0)
        gpio.output(D,0)
        elif n == 2:
        gpio.output(A,0)
        gpio.output(B,1)
        gpio.output(C,0)
        gpio.output(D,0)
        elif n == 1:
        gpio.output(A,1)
        gpio.output(B,0)
        gpio.output(C,0)
        gpio.output(D,0)
        else:
        gpio.output(A,0)
        gpio.output(B,0)
        gpio.output(C,0)
        gpio.output(D,0)
        # latch the data
        gpio.output(L,1)
        gpio.output(L,0)
        # display the row
        gpio.output(EN,0)

        the main thing that need to be done … and this is VITAL is that anything on this page that has GPIO.output(EN,X) needs to be inverted …. this is the crux of the problem as the 8008 board and the 6416 board are essentially the same with the exception that the EN port is inverted …. why ??? i don’t know … just is

        hope this helps

        • sandman112 March 11, 2016 at 10:46 pm #

          whoops … the showrow and the gpis.output(EN.x) stuff is in the ldp file not the scroll file … my bad …

          • Marc Scott March 18, 2016 at 6:24 pm #

            Thank you so much!!

          • Marc Scott August 8, 2016 at 11:47 pm #

            After I did all the code and ran it, nothing is displayed. Also, what pins did you use to hook up the r2 and g2?

          • Marc Scott August 8, 2016 at 11:49 pm #

            It works fine with the original code, but when i make the changes is when it stops displaying.

          • sandman112 August 9, 2016 at 8:05 pm #

            i haven’t looked at this project for a while, don’t even know if i still have the final code on a card somewhere … my file management is terrible 🙂

            found this on my main machine though which might help.. this is all in ldp.py

            pins I’ve used

            R1=11
            G1=12
            EN=16
            A=3
            B=5
            C=7
            D=18
            L=13
            S=15

            down the bottom of the file you should find something like this … I’m sure in the original (using the 8008) display these are reversed … also check around lines 64 and 245 for similar lines … might need to mess around with these too

            def displayoff():
            gpio.output(EN,1)

            def displayon():
            gpio.output(EN,0)

  7. admin March 10, 2016 at 12:29 pm #

    not bad so far – i’ve just been running through the test commands using the terminal, and i haven’t updated the firmware (has sat in my projects box for a while) – one thing that occurs is that it would work with a zero and fit very neatly into a box. Would just leave me with a spare ‘A’ for yet another project…

  8. Muneerah Al Hajri April 27, 2016 at 12:56 pm #

    Hi,

    I am trying to make the same connection posted on this page but I have got a different result. Now I will explain in details what I have done and what I have got so that you can understand and help me solving the problem!!

    I am using Raspberry Pi model B with 40 GPIO pins and LDP 8008. I could not buy the same breakout board mentioned on the above post so that I used normal Female to Female jumpers from the Raspberry Pi GPIO pins to LDP pins. Now regarding the GPIO pins layout, I have followed this layout :
    1 2
    3 4
    5 6
    7 8
    9 10
    11 12
    13 14
    15 16



    39 40

    And the LDP 8008 pins layout which I have consider is as follow:
    1 2(A)
    3 4(B)
    5 6(C)
    7(EN) 8(D)
    9 (R) 10 (G)
    11 12
    13 14 (latch)
    15 16 (shift)

    After that I just simply made the connection between them using normal Female to Female jumpers based on the above table. Moreover, I have connected the LDP 8008 to the power using USB cable as you mentioned in a previous reply. Plus, I have made the normal connection for the raspberry Pi with its peripherals ( Monitor, keyboard, mouse, and to the power).

    After the physical connection is completed, when I switch on the power, the last row of the LDP 8008 is turned on only with red color. I did consider this as a problem and I have continued.

    I have installed the necessary files that you have mentioned on the above post, and tried to run the “static” and “scroll” examples. When I run the following command :

    sudo ./static “A” 1

    I got the following result:

    Only rows 2,3,6,and 7 are turned on with green color and the letter A is being displayed in the middle of the sign with reed color but has been cut from the middle because rows 4 and 5 are off and from the top because rows 0 and 1 are off.

    I don’t know why half of the rows are off and this is basically my problem. I tried to analyze the situation, and I came up with one point that the rows 0,1,4,and 5 which are off have something in common which is that their binary B is 0
    c b a
    0 0 0 row 0
    0 0 1 row 1
    1 0 0 row 4
    1 0 1 row 5

    So that I went back and change the jumper wire connected to B wondering that it may be damaged.Unfortunately, this changed nothing.

    PLEASE read my reply and try answer as soon as possible, I need it work because it part of my Graduation project. Th dead line is 3ed of may. Please if any one has an idea, just share it with me.

  9. Sandman112 April 27, 2016 at 1:49 pm #

    I’m sure I had a similar problem, I just changed from pin 3 to another gpio pin. I think it might be something to do with the fact that pin 3 is also used form the serial interface on rpi…. You could try disabling serial (or it might be ic2) in Raspi-config

Leave a Reply