Led panel in a project to realize a very bright and internet ready digital signage useful for a wide range of applications like message notifications, alarms, synchronized clock, scrolling text, etc. The project is open and based on the tiny Linux board Arietta G25 wired to a 32x32 RGB led panel and interacts with the user smartphone via a WiFi link.
As shown below all the electronic parts can be fixed inside a cheap and elegant IKEA RIBBA photo frame.
The whole project is based on the full color RGB led panel made by the Chinese company Linsn.
It is composed by 1024 rgb led ordered in 32 rows of 32 leds each and mounted with a lot of logic on a black PCB 19x19 cm size. Everything in enclosed in a plastic frame with a set on placement for M3 screws to use for mounting.
The cost of creating a panel like this for an European company could be around 200 eur just for manufacturing and components so the best thing to do is to buy it :-)
The datasheet of this panel with a correct explanation about how it works is not easily available. In this page I'll try to explain how "it seems to work" :-)
On the rear an Arietta G25 module is used to generate all the signals requested by the RGB panel starting from a 32x32 pixel graphic image.
The Pyhton graphic library called Pillow is used to create the image starting from graphic primitives, true type fonts, and jpg, png, etc images.
The WiFi capability of the Arietta G25 (also in Access Point mode) and the Python module for the networking, open a lot of possible uses of this project.
Linux is loaded in few seconds from an 8GB microSD with more than 7.8 GB free !!
Tons of softwares, tools, languages and libraries can be installed. Complete step by step guides are available on this site.
The RGB led panel has a two 16 pins male connector where to send data using a synchronous serial transmission.
The panel is logicaly splitted in two section:
R0, G0 and B0 are the data sent to the top block
R1, G1 and B1 are the data sent to the top block
Four address lines (A,B,C and D) select to which row of led are sending the data on Rx,Gx and Bx lines
This is the lock diagram of the internal parts of a RGB led panel
This is the pinout of input data connector:
|LED Pin #||Signal||Description||Arietta pin #||Line||gpio ID|
|1||R0||Red 1st bank||J4.10||PA21||21|
|2||G0||Green 1st bank||J4.8||PA22||22|
|3||B0||Blue 1st bank||J4.7||PA23||23|
|5||R1||Red 2nd bank||J4.11||PA24||24|
|6||G1||Green 2nd bank||J4.13||PA25||25|
|7||B1||Blue 2nd bank||J4.15||PA26||26|
On the output data connector just replicates the input lines for a wire another RGB led panel display.
The power supply connector needs 5 VDC @ max 3A. At this current all leds are on at maximum brightness.
All the rgb led panel are generate in bit banging mode using normal GPIO lines. To go as fast as possible a Linux driver written in C code is required.
The driver I wrote can update the whole panel contents 679 times per second leaving enough time to Linux to do other jobs in the meanwhile.
The main routine of this driver is a callback function called by a hrtimer 10800 times per second at interval of 92uS.
In just 22uS this routine check the brightness of each color and send a simulated pwm signal to any led (32 x 3 color = 96) on a single row then exit. It will be called again by the Kernel after 66uS.
The fully source code of this driver is available under GPL licence on GitHub: ledpanel source on GitHub
To compile ledpanel.c it is requested a Linux Ubuntu PC on where install the cross compiler toolchain and Linux Kernel sources:
During the make menuconfg be sure to enable the High Resolution Timer Support:
General setup ---> Timers subsystem ---> [*] High Resolution Timer Support
Clone the GitHub repository on your Linux PC:
$ git clone git://github.com/tanzilli/ledpanel.git $ cd ledpanel ~/ledpanel$
Compile the module by typing:
~/ledpanel$ make -C ~/arietta/linux-4.1.10 ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- M=`pwd` modules
and copy in inside Arietta G25
~/ledpanel$ sshpass -p acmesystems scp ledpanel.ko firstname.lastname@example.org:/root
Open a command session on Arietta and load the Kernel module:
root@arietta:~# insmod ledpanel.ko
Now you can try some example to show something on the display.
Here are some user space example to use our RGB panel led. All the examples are in Python and can be downloaded on your Arietta with a single git clone command:
~# git clone git://github.com/tanzilli/led-utils.git Cloning into 'led-utils'... remote: Counting objects: ..., done. remote: Compressing objects: 100% (../..), done. Receiving objects: 100% ..., done. Resolving deltas: 100% ..., done. ~# cd led-utils ~/led-utils# ./clock-py
All the utilities use the Python Interface Library to manage images, font, etc so before trying any example install PIL on your Arietta G25 by typing:
# apt-get update # apt-get install python-imaging
This is the list of utilities available. If you can't run something try to update your repository by typing: git pull.
This example written in Python shows a count down from 99 to 0 using a full size TTF font.
Source code: counter.py
This example, written in Python, shows a sliding message using a big TTF font
The RGB color and the message to display are given from the command line.~/led-utils# ./text.py "text" R G B
The R, G and B values are in range of 0 (off) to 7 (max)
Source code: text.py
This example shows the system time in HH:MM:SS format using a big TTF font and slide the line horizontaly.
The RGB color is given from the command line.~/led-utils# ./clock.py R G B
The R, G and B values are in range of 0 (off) to 7 (max)
Source code: clock.py
Is available a demo version of this programm called clock_demo.py which changes automatically the colors during the time sliding:~/led-utils# ./clock_demo.py
Source code: clock_demo.py
A Linux Ubuntu PC is required
$ tar -xvjpSf boot.tar.bz2 -C /media/$USER/boot $ sudo tar -xvjpSf rootfs.tar.bz2 -C /media/$USER/rootfs
Access to WiFi LedPanel and go to these address from your browser:
Led panel 32x32 kit
All the electronic part you need to mount a RGB 32x32 Led panel:
IKEA RIBBA photo frame is not included| Product description |
RGB led module 32x32 pixel 192mm
Indoor full color LED module 32x32 pixel 19.2x19.2 cm| Product description |
P4mm 64x32 flexible LED RGB panel
Full color 64x32 pixel RGB led flexible module for indoor use| Product description |
Switching power supply 5V 4A with european plug
Switching wall mount power supply:
Switching power supply 5V 10A for RGB ledpanels
Data cable for LED panel
Flat data cable for RGB Ledpanel
Power cable for LED panel
Power cable for RGB Ledpanel
HDMI cable 0.5 mt
Ethernet cable 0.5 mt
DVI-D to HDMI adapter
| datasheet |
RGB led panel adapter (PCB)Product description |
RGB Led panel adapter (mounted)
Raspberry Pi 3 Model B
Linux Embedded single board computer Raspberry Pi 3 Model B
Raspberry Pi 2 Model B
Linux Embedded single board computer Raspberry Pi 2 Model B
Raspberry Pi Model B+
Linux Embedded single board computer Raspberry Pi Model B+
Blank 8GB microSD HC card
Blank 8GB microSD memory card.
Acme Systems srl and Sergio Tanzilli provide this documentation "as is" without warranty or guarantees of any kind. We not provide any direct support for the Open Source software which can running on our board but, through these pages and forum posts, we provide all of the information required to obtain the sources, install, use and update the Open Source software available on Internet.
Please note that all of the software we talking about is Open Source so you have to check any license provided by the software authors before using it in any commercial or non-commercial product, by yourself.
Please contact us note that WE ARE MAINLY HARDWARE DESIGNERS and NOT LINUX GURUS and therefore could be better to post your questions to the Acme Systems forum and ensure that all of the site contributors and large software community can read and reply to your questions.
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.