본문 바로가기
모두의 라즈베리파이

[라즈베리파이][LCD][#09] 초보자를 위한 파이썬 8x8 LED Matrix 활용법 완전 정복(MAX7219)

by 로니킴 2024. 5. 6.


라즈베리 파이와 파이썬을 사용해 8x8 Dot Matrix를 쉽게 제어하는 방법을 초보자도 이해할 수 있도록 설명합니다. 시작부터 동작까지, 모든 과정을 설명하여 누구나 라즈베리파이를 이용한 8x8 Dot Matrix 제어를 마스터할 수 있습니다. 

 

목차

     

     

     


    초보자를 위한 파이썬 8x8 Dot Matrix 활용법 완전 정복

    8X8 Dot Matrix 모듈은 64개의 LED로 구성되어 문자, 숫자, 간단한 그림을 표현할 수 있는 디스플레이 장치입니다. 이 모듈을 라즈베리 파이와 연결하여 다양한 시각적 프로젝트를 실행할 수 있습니다.

     

     


    (1) 8x8 Dot Matrix (MAX7219) 란?

     

    8X8 Dot Matrix는 각각의 LED가 빛을 발하여 다양한 정보를 표시할 수 있는 디스플레이 장치입니다. 이 모듈은 8행과 8열, 총 64개의 LED로 구성되어 있으며, 각각의 LED는 독립적으로 제어가 가능합니다. 이를 통해 문자, 숫자, 간단한 그림 등을 표현할 수 있습니다. 8X8 Dot Matrix의 주요 용도는 정보 표시, 시각적 경고, 간단한 그래픽 표현 등입니다.

     

     

     

    예를 들어, 공공장소의 정보판, 전자시계, 게임기 등에서 이 모듈을 활용할 수 있습니다. 라즈베리 파이와 같은 마이크로컨트롤러와 연결하여 프로그래밍을 통해 다양한 패턴을 만들어내는 것이 가능합니다. 이 모듈의 장점은 크기가 작고, 전력 소모가 낮으며, 프로그래밍이 비교적 간단하다는 점입니다.

     

    사용자는 이 모듈을 이용하여 기본적인 디지털 신호 처리와 이미지 표현 방법을 학습할 수 있습니다. 또한, 다양한 색상과 밝기를 가진 LED를 선택할 수 있어, 프로젝트의 시각적 효과를 증대시킬 수 있습니다.

     

     

     


    (2) 8x8 Dot Matrix 동작 원리

    8X8 Dot Matrix의 동작 원리는 간단합니다. 각 LED는 그리드 형태로 배열되어 있으며, 이 그리드는 행과 열로 구성됩니다. LED를 점등하려면 해당 LED의 행과 열에 전류를 공급해야 합니다.

     

     

    이때, 다이오드의 특성을 활용하여 각 LED를 개별적으로 제어할 수 있습니다. 통상적으로, 모든 LED를 동시에 제어하는 것은 아니며, 행 또는 열을 순차적으로 활성화하면서 빠르게 스캔합니다.

    이 과정을 통해 인간의 눈은 여러 LED가 동시에 점등된 것처럼 인식합니다. 이를 '퍼시스턴스 오브 비전(Persistence of Vision)'이라고 하며, 이 원리를 이용해 다양한 패턴과 애니메이션을 생성할 수 있습니다.

     

    소프트웨어 측면에서는 각 LED의 상태를 배열로 관리하며, 이 배열 정보를 기반으로 하드웨어에 신호를 보내어 LED를 제어합니다. 일반적으로는 8x8 배열을 사용하며, 이 배열은 각 LED의 점등 상태를 나타내는 논리 값(0 또는 1)을 저장합니다.

    좀 더 쉽게 제어하기 위해 MAX7219 또는 MAX7221 칩을 사용합니다. 

    MAX7219-MAX7221.pdf
    1.32MB

     

     

     

    8x8 닷 매트릭스를 동작시키는 데 사용되는 MAX7219와 MAX7221 칩에 대해 설명드리겠습니다. 이 칩들은 LED 디스플레이를 제어하기 위해 마이크로프로세서와 연결되며, 이를 통해 최대 8자리의 7-세그먼트 수치 LED 디스플레이, 바 그래프 디스플레이 또는 64개의 개별 LED를 구동할 수 있습니다. 기본적으로 이 칩들은 8x8 정적 RAM을 내장하고 있어 각 자리의 정보를 저장합니다.

     

    주요 특징

    • 직렬 입력/출력 인터페이스: 이 칩들은 SPI, QSPI, MICROWIRE와 같은 일반적인 직렬 인터페이스를 통해 마이크로프로세서와 통신합니다.
    • 디코딩/논디코딩 선택: 사용자가 각 자리의 디코딩 또는 논디코딩 모드를 선택할 수 있습니다. 디코딩 모드에서는 BCD 코드-B 디코더가 내장되어 있어 자동으로 수치를 디스플레이에 매핑합니다.
    • 디지털 및 아날로그 밝기 제어: 밝기를 디지털적으로 조절하거나 외부 저항을 통해 조절할 수 있습니다.
    • 스캔 한계 설정: 디스플레이할 자리의 수를 사용자가 설정할 수 있습니다(1에서 8자리).

     

    운영 방식

    • 스캔 매커니즘: 이 칩들은 멀티플렉스 스캔 방식을 사용하여 LED 디스플레이의 여러 자리를 빠르게 순차적으로 켜고 끕니다. 이는 단일 디스플레이에서 다수의 출력을 가능하게 합니다.
    • 셧다운 모드: 저전력 셧다운 모드를 지원하여 디스플레이를 사용하지 않을 때 전력 소비를 최소화할 수 있습니다. 이 모드에서는 스캔 발진기가 정지되고 모든 LED가 꺼집니다.
    • 디스플레이 테스트 모드: 모든 LED를 켜는 테스트 모드를 제공하여 모든 세그먼트가 정상적으로 동작하는지 확인할 수 있습니다.

    이 칩들은 특히 산업용 컨트롤러, 패널 미터, LED 매트릭스 디스플레이 등 다양한 전자 장치에 사용되며, 간단한 4-선 직렬 인터페이스를 통해 손쉽게 여러 디바이스를 연결하고 제어할 수 있습니다.

     

     


     

     

    (3) 8x8 Dot Matrix 구입하기

    8X8 Dot Matrix 모듈은 전자 부품을 판매하는 많은 온라인 상점에서 구입할 수 있습니다. 구매 시 몇 가지 고려할 점이 있습니다.

     

    • 첫째, 모듈의 크기와 LED의 색상을 확인해야 합니다. 일부 모듈은 다색 LED를 사용하여 더 다양한 표현이 가능합니다.
    • 둘째, 통신 방식을 확인해야 합니다. 일부는 I2C 또는 SPI 같은 특정 통신 프로토콜을 사용하여 라즈베리 파이와 통신할 수 있습니다. 가격은 제품의 품질과 기능에 따라 다양하나, 일반적으로 비용은 크게 부담되지 않습니다. 구입 전에 제품 리뷰를 확인하고, 필요한 경우 추가 액세서리(예: 연결 케이블, 전원 어댑터)가 포함되어 있는지 확인하세요.

     

     

     

     

     

     


     

    (4) 8x8 Dot Matrix 하드웨어 연결

     

    기본적으로 SPI 커널 드라이버는 Raspberry Pi Raspbian 이미지에서 활성화되지 않습니다. 아래 쉘 명령을 사용하여 활성화되었는지 확인할 수 있습니다.

    pi@raspberrypi:~/test $ lsmod | grep -i spi
    spidev                 16384  0
    spi_bcm2835            20480  0

     

    하드웨어/커널 버전에 따라 이는 spi_bcm2835 가 아닌 spi_bcm2807을 보고할 수 있습니다. 둘 중 하나라도 적절해야 합니다. 장치가 성공적으로 설치되었는지 확인하려면 다음을 수행하십시오

    pi@raspberrypi:~/test $ ls -l /dev/spi*
    crw-rw---- 1 root spi 153, 0 May  1 05:17 /dev/spidev0.0
    crw-rw---- 1 root spi 153, 1 May  1 05:17 /dev/spidev0.1
    pi@raspberrypi:~/test $

     

     

    파일이 없고 /dev/spi 아무것도 표시되지 않는 경우 lsmod이는 커널 SPI 드라이버가 로드되지 않았음을 의미합니다. 다음과 같이 SPI를 활성화합니다

    (4) 8x8 Dot Matrix 하드웨어 연결

     

    [SPI] 활성화
    SPI 인터페이스를 활성화하려면, 라즈베리 파이 설정에서 SPI를 활성화해야 합니다. sudo raspi-config 명령어를 사용하여 인터페이스 옵션에서 SPI를 활성화하세요. 또는 RealVNC Viewer를 사용할 수 있습니다. 

    라즈베리파이 spi 비활성화

     

     

    [하드웨어 연결]

     

    8X8 Dot Matrix를 라즈베리파이에 연결하는 과정은 간단합니다. 대부분의 8X8 Dot Matrix 모듈은 표준 GPIO 핀을 사용하여 라즈베리 파이와 연결됩니다. 먼저, 라즈베리 파이의 GPIO 핀과 모듈의 입력 핀을 적절한 점퍼 케이블로 연결합니다.

     

    연결 방법은 구입한 모듈의 종류에 따라 다를 수 있으니, 모듈 제공 업체가 제공하는 데이터시트나 연결 다이어그램을 참고하는 것이 중요합니다. 이 문서들은 정확한 핀 구성과 각 핀의 기능을 설명해 주어, 올바르게 연결할 수 있도록 도와줍니다.

    또한, 전력 공급 방식에 주의해야 합니다. 일부 모듈은 추가적인 전력 공급이 필요할 수 있으며, 이 경우 외부 전원 공급 장치를 준비해야 할 수도 있습니다. 모든 연결이 완료된 후에는 연결이 제대로 되었는지 확인하기 위해 간단한 테스트 프로그램을 실행해 보는 것이 좋습니다.

     

    Max7219 기반의 8X8 Dot Matrix 모듈은 SPI 통신을 사용합니다. 라즈베리 파이의 SPI 핀과 모듈을 다음과 같이 연결하세요:

     



    •VCC -> Raspberry Pi 3.3V
    •GND -> Raspberry Pi GND
    •DIN -> Raspberry Pi MOSI (GPIO 10)
    •CS -> Raspberry Pi CE0 (GPIO 8)
    •CLK -> Raspberry Pi SCLK (GPIO 11)

     

     

     


     

    (5) 8x8 Dot Matrix SW 파이썬  코딩

     

    하드웨어 연결이 완료되면,  파이썬 소스코드를 코딩할 수 있습니다. 우선 라이브러리를 설치합니다. 라즈베리 파이 4와 8X8 Dot Matrix 모듈을 연결하고 제어하기 위해, Python을 사용하여 GPIO 핀을 통해 모듈을 제어하는 간단한 예제 코드를 작성할 수 있습니다. 여기서는 Max7219 칩을 사용하는 8X8 Dot Matrix 모듈을 가정하고, 이를 제어하기 위한 라이브러리를 사용할 것입니다.

     

    [라이브러리 설치]

    (5) 8x8 Dot Matrix SW 파이썬 코딩 라이브러리 설치

    python3 -m venv .venv 
    source .venv/bin/activate 
    
    sudo usermod -a -G spi,gpio pi
    sudo apt-get update && sudo apt-get upgrade build-essential python3-dev python3-pip libfreetype6-dev libjpeg-dev
    
    pip3 install pillow
    
    git clone https://github.com/rm-hull/luma.led_matrix 
    sudo -H pip3 install --upgrade luma.led_matrix

     

    (5) 8x8 Dot Matrix SW 파이썬 코딩 라이브러리 설치 동영상

     

     

     

    [파이썬 코드]

    파이썬 코드는 다음과 같다. 

    import RPi.GPIO as GPIO  # GPIO 모듈 임포트
    from datetime import datetime  # datetime 모듈에서 datetime 클래스만 임포트
    from luma.core.interface.serial import spi, noop  # LED 매트릭스 관련 모듈 임포트
    from luma.core.render import canvas
    from luma.core.virtual import viewport
    from luma.led_matrix.device import max7219
    from luma.core.legacy import text
    from luma.core.legacy.font import proportional, CP437_FONT
    
    # LED 매트릭스 초기화 함수
    def init_led_matrix():
        # SPI 인터페이스 설정 및 LED 매트릭스 장치 초기화
        serial = spi(port=0, device=0, gpio=noop())  # SPI 포트 및 장치 설정
        device = max7219(serial, width=32, height=8, block_orientation=-90)  # MAX7219 장치 초기화
        device.contrast(5)  # 대비 설정
        return device  # 초기화된 LED 매트릭스 장치 반환
    
    # 현재 시간을 LED 매트릭스에 표시하는 함수
    def display_current_time(device):
        virtual = viewport(device, width=32, height=16)  # LED 매트릭스에 가상 화면 생성
    
        try:
            while True:
                with canvas(virtual) as draw:
                    # 현재 시간 표시
                    text(draw, (0, 1), datetime.now().strftime('%I:%M'), fill="white", font=proportional(CP437_FONT))
        except KeyboardInterrupt:
            GPIO.cleanup()  # KeyboardInterrupt 발생 시 GPIO 리소스 정리
    
    # 메인 함수
    def main():
        # LED 매트릭스 초기화
        device = init_led_matrix()
        # 현재 시간 표시
        display_current_time(device)
    
    # 진입점 확인
    if __name__ == "__main__":
        main()

     

     

    이 코드는 Raspberry Pi와 MAX7219 LED 매트릭스를 사용하여 현재 시간을 표시합니다.

    8x8 Dot matrix 소트프웨어 코딩하기

    1. RPi.GPIO 라이브러리를 GPIO와 함께 임포트합니다. 이는 Raspberry Pi의 GPIO를 제어하기 위한 라이브러리입니다.
    2. time 모듈에서 strftime 함수를 임포트하여 시간 형식을 지정하는 데 사용합니다.
    3. datetime 모듈에서 datetime 클래스를 임포트 하여 현재 시간을 가져옵니다.
    4. LED 매트릭스를 제어하기 위해 luma 라이브러리를 사용합니다. 이를 위해 관련 클래스와 함수를 임포트 합니다.
    5. SPI 인터페이스를 설정하고, LED 매트릭스 장치를 초기화합니다. 대비를 조절하고, 가상 화면을 생성합니다.
    6. 초기화 메시지를 LED 매트릭스에 표시합니다.
    7. try-except 블록을 사용하여 KeyboardInterrupt 예외를 처리하고, 해당 예외가 발생할 때 GPIO 리소스를 정리합니다.

     

    이렇게 코드는 Raspberry Pi와 MAX7219 LED 매트릭스를 사용하여 현재 시간을 표시하는 간단한 예제입니다.

     

     

    8x8 Dot matrix 소트프웨어 실행 영상

     

     

     

     


     

    (6) 8X8 Dot Matrix 동작확인

    하드웨어 설치와 소프트웨어 프로그래밍이 완료되면, 실제로 모듈이 정상적으로 동작하는지 확인해야 합니다. 이 과정에서는 작성한 코드를 실행하여 모든 LED가 예상대로 작동하는지 테스트합니다. 간단한 테스트로는 모든 LED를 순차적으로 켜고 끄기, 특정 패턴 디스플레이, 문자와 숫자 표시 등이 있습니다.

     

    (6) 8X8 Dot Matrix 동작확인

     

     


    만약 일부 LED가 작동하지 않거나 예상한 패턴과 다르게 표시된다면, 하드웨어 연결과 코드를 다시 확인해야 합니다. 때로는 접촉 불량이나 핀 설정 오류가 원인일 수 있습니다. 문제 해결을 위해 시스템의 각 부분을 체계적으로 검토하고, 필요한 경우 온라인 리소스나 커뮤니티의 도움을 받을 수 있습니다.

     


     

    (8) 라이브러리 샘플 테스트

     

    luma 라이브러리를 테스트 할 수 있습니다. 

    python3 matrix_demo.py -n 4 --block-orientation=90

     

    luma 샘플 코드를 실행하면, 천천히 스크롤링, 새로 스크롤링, 밝기 조절등 다양한 동작을 확인할 수 있습니다. 

     

     

     

     

     

     


     

     

     

    (8) 마무리

     

    8X8 Dot Matrix 모듈은 라즈베리 파이와 같은 마이크로컨트롤러를 사용하는 다양한 프로젝트에 시각적 요소를 추가할 수 있는 유용한 도구입니다. 이 글을 통해 모듈의 기본적인 특징과 사용 방법을 이해하고, 실제로 하드웨어를 설정하고 프로그래밍하는 방법을 배울 수 있었기를 바랍니다. 자신만의 창의적인 프로젝트를 시작하여 8X8 Dot Matrix를 활용해 보세요.


    이 모듈을 사용하여 만든 프로젝트를 공유하고, 다른 사용자와 아이디어를 교환하는 것도 좋은 학습 경험이 될 것입니다. 모듈의 활용 가능성은 무궁무진하므로, 여러분의 상상력을 발휘해 보세요!

     

     

     

     

    반응형


    댓글