27 março 2018

Como usar o módulo MAX7219 com Raspberry Pi

Neste post vamos mostrar como usar o módulo matriz de led 8x8 MAX7219 com Raspberry Pi, usando uma biblioteca que suporta muitas opções de configuração e permite que você crie animações, painéis e outros projetos utilizando este módulo.

Raspberry Pi com Módulo MAX7219


Para usar corretamente as informações deste post, certifique-se de que a sua Raspberry Pi está funcionando, com o sistema operacional devidamente configurado e atualizado. Qualquer dúvida, veja como preparar a sua placa no post Raspberry Pi: Instale o Raspbian e crie seu primeiro program em Python.

Conexões do módulo MAX7219


Vamos apenas relembrar as conexões do módulo matriz de led 8x8 MAX7219, várias vezes abordado em posts aqui do Arduino e Cia. O modelo que estamos usando tem 5 pinos de entrada (JP1, na imagem abaixo) e 5 de saída (JP2):
Módulo matriz de led 8x8 com MAX7219
Os pinos de entrada são usados para controlar o(s) módulo(s), e os pinos de saída permitem que você monte um sistema em cascata, onde a saída de um módulo é ligado na entrada do módulo seguinte. Assim, você pode formar por exemplo um painel de leds:

Módulo MAX7219 - Ligação em cascata



O módulo utiliza para comunicação a interface SPI, presente em praticamente qualquer placa de desenvolvimento como Arduino, Raspberry Pi, Beaglebone, Photon, Linkit, etc.

Ligando o MAX7219 com Raspberry Pi


Para ligação do módulo MAX7219 na Raspberry Pi 3 Model B Anatel, vamos usar a alimentação 5V por meio da GPIO, pinos 2 (5V) e 6 (GND), e para controle os pinos 19 (conectado ao DIN do módulo), 23 (conectado ao CS) e 24 (conectado ao CLK):

Circuito Raspberry Pi e Modulo Max7219



Apenas relembrando que neste exemplo usamos a Pi 3, mas é possível usar qualquer outro modelo da placa, como a Zero, Zero W, Pi 2, etc.

Configuração Raspian para MAX7219


Para utilizar o módulo MAX7219 com a Raspberry Pi, primeiro vamos habilitar a interface SPI no Raspbian. Faça isso entrando no Raspi-Config com o comando:

sudo raspi-config

Acesse a opção 5 - Interfacing Options:

Raspi-config Interfacing Options

Em seguida, selecione a opção P4 e habilite a interface SPI:

Raspi-config - habilitando interface SPI

Verifique se a interface SPI do Raspberry Pi foi inicializada corretamente usando o comando

lsmod | grep -i spi

Esse comando deve retornar uma tela como essa, indicando que a SPI está funcionando corretamente:

Interface SPI Raspberry Pi


Com a interface SPI funcionando, vamos às dependências para a biblioteca:

sudo usermod -a -G spi,gpio pi
sudo apt-get install build-essential python3-dev python3-pip libfreetype6-dev libjpeg-dev

Instalamos agora a biblioteca diretamente do PyPi:

sudo -H pip install --upgrade luma.led_matrix

Finalmente, clone o repositório do github com o comando:

git clone https://github.com/rm-hull/luma.led_matrix


Testando o módulo com python

Utilizando o exemplo da biblioteca MAX7219, eu criei um pequeno programa em Python para teste do módulo, que faz um scroll da mensagem colocada na linha 27. 

Esse teste usa apenas um módulo, mas você pode acrescentar mais módulos e criar um painel de leds, alterando o parâmetro default na linha 35 (altere o default=1 para o número de displays que você quer interligar). Se for necessário alterar a rotação do texto no display, altere o parâmetro default na linha 37 (valores: 0=0°, 1=90°, 2=180°, 3=270°).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
#Programa: Teste modulo MAX7219 com Raspberry Pi
#Autor: Arduino e Cia
#baseado no programa exemplo da biblioteca MAX7219
#
# Copyright (c) 2017-18 Richard Hull and contributors
# See LICENSE.rst for details.

import re
import time
import argparse

from luma.led_matrix.device import max7219
from luma.core.interface.serial import spi, noop
from luma.core.render import canvas
from luma.core.virtual import viewport
from luma.core.legacy import text, show_message
from luma.core.legacy.font import proportional, CP437_FONT, TINY_FONT, SINCLAIR_FONT, LCD_FONT

def demo(n, block_orientation, rotate):
    # create matrix device
    serial = spi(port=0, device=0, gpio=noop())
    device = max7219(serial, cascaded=n or 1, block_orientation=block_orientation, rotate=rotate or 0)
    print("Arduino e Cia - teste com modulo MAX7219")
    msg = " Arduino e Cia "
    print("Teste slow scroll: Arduino e Cia")
    show_message(device, msg, fill="white", font=proportional(LCD_FONT), scroll_delay=0.2)

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='matrix_demo arguments',
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)

    parser.add_argument('--cascaded', '-n', type=int, default=1, help='Numero de modulos MAX7219 interligados')
    parser.add_argument('--block-orientation', type=int, default=0, choices=[0, 90, -90], help='Corrige a orientacao de blocos')
    parser.add_argument('--rotate', type=int, default=2, choices=[0, 1, 2, 3], help='Rotacao display 0=0°, 1=90°, 2=180°, 3=270°')

    args = parser.parse_args()

    try:
        demo(args.cascaded, args.block_orientation, args.rotate)
    except KeyboardInterrupt:
        pass

Salve o programa e execute-o usando o comando "python" seguido do nome do programa. No meu caso, o nome do programa é testemax7219.py, e o comando ficou assim:

python testemax7219.py

Explore a biblioteca e veja outros exemplos de utilização, como scroll vertical, mudança de fonte de texto e geração de caracteres especiais. Execute o comando abaixo para uma demo completa das funcionalidades da biblioteca:

python luma.led_matrix/examples/matrix_demo.py

Em outra oportunidade vamos abordar outros exemplos de uso desta biblioteca, com módulos MAX7219 Display 7 segmentos e led endereçável WS2812. Até lá!

2 comentários: