https://learn.adafruit.com/connecting-a-16x32-rgb-led-matrix-panel-to-a-raspberry-pi
Everyone loves a colorful LED screen! Our 16x32 RGB LED display is a low cost, and easy-to-use arrangement of bright LEDs - just like the ones used in Times Square! This display makes a fantastic addition to your Raspberry Pi. It is pretty easy to wire up, but the display is quite demanding when it comes to getting it to display something...luckily this tutorial has all the code you need to get blinky
16x32 RGB LED Matrix Panel | |
5V 2A Power Supply | |
Female/Female Jumper Wires | |
Male/Male Jumper Wires | |
2.1mm to Screw Jack Adapter |
Connect up the display to the GPIO connector using the female to female jumper wires as shown below:
If you prefer to make the connections using a list, they are as follow:
- GND on display to GND on the Pi (blue or black)
- R1 on display to GPIO 17 on the Pi (red)
- G1 on display to GPIO 18 on the Pi (green)
- B1 on display to GPIO 22 on the Pi (blue)
- R2 on display to GPIO 23 on the Pi (red)
- G2 on display to GPIO 24 on the Pi (green)
- B2 on display to GPIO 25 on the Pi (blue)
- A on display to GPIO 7 on the Pi (yellow or white)
- B on display to GPIO 8 on the Pi (yellow or white)
- C on display to GPIO 9 on the Pi (yellow or white)
- OE on display to GPIO 2 on the Pi (brown)
- CLK on display to GPIO 3 on the Pi (orange)
- LAT on display to GPIO 4 on the Pi (yellow)
When all the data pins are connected, we can wire up the power supply.
Testing
- $ mkdir display16x32
- $ cd display16x32
We now need to fetch the code from Henner Zeller's original project using the command:
- $ git clone https://github.com/hzeller/rpi-rgb-led-matrix/
This code is C source code, so we need to compile it before we can run it. It also requires a small change for the wiring layout we're using. Enter the following commands:
- $ cd rpi-rgb-led-matrix/lib
- $ nano Makefile
(Or substitute your editor of preference.)
Enable this line in the Makefile (it’s commented out by default):
- DEFINES+=-DRGB_CLASSIC_PINOUT
Save the changes to the file, then exit the editor and type...
- $ cd ..
- $ make
- $ sudo ./led-matrix
- $ sudo ./led-matrix 1 runtext.ppm
A Scrolling Message
Run the command again, this time using the name that you gave the file:
- $ sudo ./led-matrix 1 my_image.ppm
Experimental Python Code
As an experiment, I decided to see how practical it would be to try and drive the display from Python code, rather than using the much faster C code.
I had fairly limited success in this. The display refreshes with a bit of flicker, is rather uneven in light intensity and dimmer than the C code. So if anyone can improve the code and make it work better, we would love to hear from you and be happy to update this section with due credit.
The code is relatively compact. It is crude, doing nothing in the way of PWM and can therefore only display eight colors.
If you want to give it a go, the wiring is exactly the same as before, and you will just need to paste the following code into a file called test_display.py
- import RPi.GPIO as GPIO
- import time
- delay = 0.000001
- GPIO.setmode(GPIO.BCM)
- red1_pin = 17
- green1_pin = 18
- blue1_pin = 22
- red2_pin = 23
- green2_pin = 24
- blue2_pin = 25
- clock_pin = 3
- a_pin = 7
- b_pin = 8
- c_pin = 9
- latch_pin = 4
- oe_pin = 2
- GPIO.setup(red1_pin, GPIO.OUT)
- GPIO.setup(green1_pin, GPIO.OUT)
- GPIO.setup(blue1_pin, GPIO.OUT)
- GPIO.setup(red2_pin, GPIO.OUT)
- GPIO.setup(green2_pin, GPIO.OUT)
- GPIO.setup(blue2_pin, GPIO.OUT)
- GPIO.setup(clock_pin, GPIO.OUT)
- GPIO.setup(a_pin, GPIO.OUT)
- GPIO.setup(b_pin, GPIO.OUT)
- GPIO.setup(c_pin, GPIO.OUT)
- GPIO.setup(latch_pin, GPIO.OUT)
- GPIO.setup(oe_pin, GPIO.OUT)
- screen = [[0 for x in xrange(32)] for x in xrange(16)]
- def clock():
- GPIO.output(clock_pin, 1)
- GPIO.output(clock_pin, 0)
- def latch():
- GPIO.output(latch_pin, 1)
- GPIO.output(latch_pin, 0)
- def bits_from_int(x):
- a_bit = x & 1
- b_bit = x & 2
- c_bit = x & 4
- return (a_bit, b_bit, c_bit)
- def set_row(row):
- #time.sleep(delay)
- a_bit, b_bit, c_bit = bits_from_int(row)
- GPIO.output(a_pin, a_bit)
- GPIO.output(b_pin, b_bit)
- GPIO.output(c_pin, c_bit)
- #time.sleep(delay)
- def set_color_top(color):
- #time.sleep(delay)
- red, green, blue = bits_from_int(color)
- GPIO.output(red1_pin, red)
- GPIO.output(green1_pin, green)
- GPIO.output(blue1_pin, blue)
- #time.sleep(delay)
- def set_color_bottom(color):
- #time.sleep(delay)
- red, green, blue = bits_from_int(color)
- GPIO.output(red2_pin, red)
- GPIO.output(green2_pin, green)
- GPIO.output(blue2_pin, blue)
- #time.sleep(delay)
- def refresh():
- for row in range(8):
- GPIO.output(oe_pin, 1)
- set_color_top(0)
- set_row(row)
- #time.sleep(delay)
- for col in range(32):
- set_color_top(screen[row][col])
- set_color_bottom(screen[row+8][col])
- clock()
- #GPIO.output(oe_pin, 0)
- latch()
- GPIO.output(oe_pin, 0)
- time.sleep(delay)
- def fill_rectangle(x1, y1, x2, y2, color):
- for x in range(x1, x2):
- for y in range(y1, y2):
- screen[y][x] = color
- def set_pixel(x, y, color):
- screen[y][x] = color
- fill_rectangle(0, 0, 12, 12, 1)
- fill_rectangle(20, 4, 30, 15, 2)
- fill_rectangle(15, 0, 19, 7, 7)
- while True:
- refresh()
- $ sudo python test_display.py
The display refreshing should really take place in a separate thread of execution, but as I said, this is more of an experiment than anything else.
'언어 > 라즈베리파이' 카테고리의 다른 글
C언어로 Raspberry pi 2의 GPIO 레지스터 접근하여 LED켜보기 (0) | 2018.08.23 |
---|---|
GPIO를 고속으로 제어하기 (0) | 2018.08.23 |
QDSP6064 Bubble Display (4 digit FND) (0) | 2018.03.09 |
영수증 인쇄용 감열식 프린터를 라즈베리 파이에서 사용하기 (Using Thermal Printer for Receipt printing in Raspberry Pi) (0) | 2018.03.09 |
라즈베리 파이 3 시리얼/블루투스 문제 (Raspberry Pi 3 UART/Bluetooth problem) (0) | 2018.03.09 |