Display LED Matriz de Pontos com ESP32 e MAX7219

Tempo de leitura: 9 minutes

Neste tutorial, aprenderemos a fazer a interface do display LED matriz de pontos <AX7219 com a placa de desenvolvimento ESP32. Em primeiro lugar, examinaremos a introdução, pinagem do módulo de exibição de matriz de pontos LED MAX7219. É uma matriz de LED usada para exibir vários tipos de textos, símbolos e imagens na forma de pontos que consiste em LEDs. Através deste tutorial, vamos familiarizá-lo com o display matricial MAX7219 e programar o ESP32 para mostrar várias demonstrações de exibição de textos. Isso incluirá a exibição e rolagem de texto na matriz de pontos.

 

Display de LED Matriz de pontos MAX7219

O display de LED Matrix MAX7219 é um dos populares disponíveis no mercado e usado por estudantes, amadores de eletrônica e especialmente em aplicações de display industrial. Existem dois tipos de módulos geralmente disponíveis. Estes são o módulo FC-16 e o módulo genérico.

Cada módulo é composto por duas unidades. Uma é a matriz de pontos LED 8X8 e a outra é o IC MAX7219.

Matriz de pontos de LED

As matrizes de pontos LED estão disponíveis em várias dimensões (7×5,8×8, 7×15, etc). A matriz típica de 8×8 LEDs é mostrada abaixo, composta por 64 LEDs, 8 para cada linha e coluna. Cada LED é endereçado por seu número de linha e coluna. Cada LED é referido como um ponto.

Para fazer uma matriz de pontos 8×8, todos os terminais dos anodos são conectados juntos nas linhas R1 a R8, da mesma forma, os cátodos são conectados nas colunas C1 a C8. A razão para conectar todas as linhas e colunas é salvar o número necessário de pinos para controlar cada ponto de LED. Ao fazer isso, o número necessário de pinos de E/S foi reduzido para 16. Caso contrário, precisaremos de 64 pinos para controlar uma matriz de LEDs 8×8. Este método de controlar um grande número de LEDs com poucos pinos é conhecido como multiplexação.

Para ligar um do específico, precisamos aplicar uma tensão positiva na respectiva linha desse ponto e negativa ou terra na respectiva coluna desse ponto. Se a linha obtiver tensão positiva e a coluna ficar negativa, apenas um LED específico acenderá.

Por exemplo, se você deseja acender um LED conectado entre R2 e C1, temos que aplicar a lógica 00000010 na linha R2 e 11111110 na coluna C1. Se R5 for puxado para cima e C4 for puxado para baixo, então o LED na quinta linha e na quarta coluna estaria alto. Lógica semelhante também pode ser aplicada a outras linhas e colunas para ligar e desligar cada LED de linha e coluna. Além disso, para exibir o texto na matriz de pontos, controlamos cada LED a uma velocidade muito rápida que o olho humano sente como se os LEDs estivessem constantemente ligados.

MAX7219 IC

MAX7219 é um driver de exibição de cátodo comum IC com entradas seriais e pinos de saída. Tem uma capacidade de corrente ajustável que pode ser ajustada usando apenas um resistor externo. Além disso, possui uma interface serial de quatro fios que pode ser facilmente conectada a todos os microprocessadores. Ele pode acionar 64 LEDs individuais conectados em seus pinos de saída usando apenas 4 fios usando o microcontrolador. Além disso, ele pode conduzir exibições de matriz de pontos, exibições de 7 segmentos e gráficos de barras.

Além disso, o MAX7219 possui um decodificador BCD integrado que facilita o uso com visores numéricos de sete segmentos. Além disso, possui uma RAM estática de 8×8 que podemos usar para armazenar números. É um dos drivers de exibição mais populares IC.

Alguns dos principais recursos do MAX7219 incluem:

  • É um LED driver display IC com interface serial de 10MHz que permite ao usuário selecionar o dígito de decodificação/sem decodificação.
  • Seu funcionamento é especificado em uma faixa de tensão de +4,0 a +5,5V. Normalmente, a alimentação de tensão de +5V é usada.
  • Ele fornece um recurso de controle de intensidade de brilho digital e analógico e um modo de desligamento de 150µA no qual a corrente de todos os segmentos é puxada para o solo.
  • Consome energia muito baixa.
  • Os dados são exibidos em segmentos com um tempo de atraso de 2,2 ms.
  • O MAX7219 funciona bem em uma faixa de temperatura de 0°C a +70°C.
  • A corrente máxima para cada pino de segmento é 100mA e para cada pino terra DIGIT é 500mA

Pinagem do módulo matricial MAX7219

O módulo MAX7219 possui 5 terminais que consistem em terminais SPI e fonte de alimentação. Ambos os tipos de módulos têm as mesmas conexões nos dois lados. De um lado estão as conexões de entrada e do outro as conexões de saída Abaixo você pode ver a pinagem do módulo genérico.

Conexões de entrada

As conexões de entrada da matriz de LEDs são conectadas à placa ESP32.

  • VCC: Este pino fornece energia ao módulo MAX7219. Ele está conectado com o pino Vin do ESP32 se o brilho estiver definido para metade do valor.
  • GND: Este é o pino terra que deve ser conectado com o pino terra do ESP32.
  • DIN: Estes são os dados no pino. Ele é usado como a entrada SPI para o módulo.
  • CS: Este é o pino Chip Select para comunicação SPI.
  • CLK: Isso é chamado de pino ‘Serial Clock’ que é usado na saída do relógio serial SPI.

Módulo de matriz de pontos LED MAX7219 interfaceando com ESP32

Os seguintes componentes são necessários:

  • Placa ESP32
  • Módulo MAX7219
  • Fios de conexão

Para este projeto, usaremos o módulo FC-16 composto por quatro unidades.

Agora, mostraremos como conectar o módulo MAX7219 e a placa ESP32. A tabela abaixo mostra os pinos SPI padrão para ESP32.

Nomes dos PinosPinos ESP32
MOSIGPIO23
MISOGPIO19
SCKGPIO18
CSGPIO5

A figura abaixo mostra os pinos SPI padrão do ESP32.

Agora vamos ver como conectar o módulo MAX7219 e a placa ESP32. A tabela abaixo mostra as conexões entre os dois dispositivos:

Modulo MAX7219Pino ESP32
VCCVin
GNDGND
DINGPIO23
CSGPIO5
CLKGPIO18

Conforme mostrado na tabela, vamos conectar o terminal VCC do módulo MAX7219 com o Vin da placa ESP32. Isso porque manteremos o brilho da tela no mínimo dentro do esboço do programa. Caso contrário, use uma fonte de 5V separada. Ambos os motivos serão comuns. Os pinos SPI GPIO padrão do ESP32 estão sendo usados para conectar com cada um dos terminais SPI restantes do módulo MAX7219.

Instalando as bibliotecas do Arduino MAX7219

Usaremos o Arduino IDE para programar nosso ESP32. Certifique-se de ter a versão mais recente do IDE instalada em seu sistema. Para programar nossa placa ESP32 com o módulo MAX7219 será necessário instalar duas bibliotecas: MD_MAX72XX by marco_c e MD_Parola. Essas duas bibliotecas facilitarão muito a programação de nossa placa de desenvolvimento.

Usaremos o Arduino Library Manager para instalar essas duas bibliotecas. Abra seu Arduino IDE e vá para Sketch > Library > Manage Libraries. Digite ‘MD_MAX72XX’ na barra de pesquisa e pressione enter. Instale a biblioteca destacada abaixo.

Agora digite ‘MD_Parola’ na barra de pesquisa e pressione enter. Instale a biblioteca destacada abaixo.

Depois de instalar as duas bibliotecas, reinicie seu IDE.

ESP32 com matriz de LED MAX7219: Sketch do Arduino

Nesta seção, mostraremos como usar a matriz de LED MAX7219 com dois sketchs. Poderemos imprimir vários textos em diferentes alinhamentos na matriz de LEDs. Além disso, também rolaremos um texto simples da direita para a esquerda.

MAX7219 Dot Matrix exibindo textos Arduino Sketch

Abra seu Arduino IDE e vá em Arquivo > Novo. Copie o código abaixo nesse arquivo. Este esboço exibirá um texto simples na matriz de LED nos seguintes alinhamentos:

  • Esquerda (Left)
  • Direita (Right)
  • Centro (Center)
  • Inversão de fundo (Background Invert)

Você terá que especificar o tipo de modelo e o número máximo de dispositivos (displays matriciais) para que o sketch abaixo funcione corretamente.

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

// Uncomment according to your hardware type
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
//#define HARDWARE_TYPE MD_MAX72XX::GENERIC_HW

// Defining size, and output pins
#define MAX_DEVICES 4
#define CS_PIN 5

MD_Parola Display = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

void setup() {
 
  Display.begin();
  Display.setIntensity(0);
  Display.displayClear();
}

void loop() {
  Display.setTextAlignment(PA_LEFT);
  Display.print("ESP32");
  delay(2000);
  
  Display.setTextAlignment(PA_CENTER);
  Display.print("ESP32");
  delay(2000);

  Display.setTextAlignment(PA_RIGHT);
  Display.print("ESP32");
  delay(2000);

  Display.setTextAlignment(PA_CENTER);
  Display.setInvert(true);
  Display.print("ESP32");
  delay(2000);

  Display.setInvert(false);
  delay(2000);
}

Como o Código Funciona?

Nesta parte vamos discutir como o código funciona.

Incluindo Bibliotecas
Em primeiro lugar, incluiremos todas as bibliotecas necessárias para este projeto. Estamos incluindo SPI.h, pois estamos usando o protocolo de comunicação SPI entre os dois dispositivos. Além disso, incluímos as bibliotecas do módulo MAX7219 que instalamos anteriormente para a funcionalidade adequada da matriz de LED.

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

Definindo o tipo de matriz de LED

Em segundo lugar, é muito importante definir o tipo correto de matriz de LED MAX7219 que você está usando. Estamos usando FC16. Se você estiver usando o modelo genérico em vez de FC16, descomente a segunda linha e comente a linha onde estamos definindo FC_16HW.

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
//#define HARDWARE_TYPE MD_MAX72XX::GENERIC_H

Definindo o número de ICs MAX7219

Em terceiro lugar, definiremos o número máximo de ICs em nossa matriz de LEDs. Como estamos usando o modelo FC16, ele consiste em quatro matrizes de LED 8×8. Portanto, nossos dispositivos máximos são 4.

#define MAX_DEVICES 4

O próximo passo é especificar a conexão do pino CS com o ESP32. É o pino 5.

#define CS_PIN 5

Em seguida, criaremos uma instância da biblioteca MD_Parola chamada ‘Display’ que será definida para a função MD_Parola() que recebe três argumentos. O primeiro argumento é o tipo de hardware. O segundo argumento é o pino ESP32 conectado ao CS. Por fim, o terceiro argumento é o número de ICs MAX7219. Definimos todos esses parâmetros anteriormente.

MD_Parola Display = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

setup()

Dentro da função setup(), inicializaremos a matriz de LEDs usando a função begin().

Display.begin();

Vamos definir o brilho para o mínimo passando 0 como parâmetro dentro de setIntensity(). Esta função aceita valores de 0 a 15, onde 15 é a intensidade mais alta. Além disso, limparemos a exibição usando displayClear().

Display.setIntensity(0);
Display.displayClear();

loop()

Dentro da função loop(), mudaremos continuamente o alinhamento do texto “ESP32”. A cada 2 segundos, mudaremos o alinhamento do texto.

Primeiro vamos definir o texto “ESP32” alinhado à esquerda por 2 segundos. Isso será feito usando setTextAlignment() e passando ‘PA_LEFT’ como parâmetro dentro dele.

Display.setTextAlignment(PA_LEFT);
  Display.print("ESP32");
  delay(2000);

Da mesma forma, alinharemos o texto do ESP32 ao centro e à direita passando o respectivo alinhamento como argumento dentro da função setTextAlignment().

Display.setTextAlignment(PA_CENTER);
 Display.print("ESP32");
 delay(2000);

 Display.setTextAlignment(PA_RIGHT);
 Display.print("ESP32");
 delay(2000);

Em seguida, também podemos inverter a exibição usando a função setInvert() e passando ‘true’ como parâmetro dentro dela. Além disso, se passarmos ‘false’ como um argumento dentro da função, a exibição volta ao inicial.

Display.setTextAlignment(PA_CENTER);
  Display.setInvert(true);
  Display.print("ESP32");
  delay(2000);

  Display.setInvert(false);
  delay(2000);

 

Demonstração

Para ver a demonstração do código acima, carregue o código na placa ESP32. Mas, antes de carregar o código, certifique-se de selecionar ESP32 Dev Module em Tools > Board e também selecione a porta COM correta à qual a placa ESP32 está conectada em Tools > Port.

Depois que o código for carregado no ESP32, a matriz de LED começará a exibir o texto em vários alinhamentos.

 

MAX7219 Sketch do Arduino Matriz de Pontos: Rolagem de Texto

Abra seu Arduino IDE e vá em Arquivo > Novo. Copie o código abaixo nesse arquivo. Este esboço rolará um texto da direita para a esquerda em uma velocidade definida.

#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>

// Uncomment according to your hardware type
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
//#define HARDWARE_TYPE MD_MAX72XX::GENERIC_HW

#define MAX_DEVICES 4
#define CS_PIN 5

MD_Parola Display = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);

void setup() {
  
  Display.begin();
  Display.setIntensity(0);
  Display.displayClear();
  Display.displayScroll("SCROLL", PA_RIGHT, PA_SCROLL_LEFT, 150);
}

void loop() {
  if (Display.displayAnimate()) {
    Display.displayReset();
  }
}

Como funciona o código?

Discutiremos as partes em que estamos incorporando o recurso de rolagem. O restante do código é semelhante ao que discutimos acima.

setup()

Dentro da função setup(), após inicializar a matriz de LEDs, definir seu brilho e limpar o display, chamaremos a função displayScroll() para configurar a ação de rolagem. Esta função recebe quatro argumentos. O primeiro parâmetro é o texto que você deseja rolar. No nosso caso o texto é ‘SCROLL’ O segundo parâmetro é o alinhamento do texto em caso de atraso. Isso nós definimos como ‘PA_RIGHT’. O terceiro argumento é a direção da rolagem. Definimos como ‘PA_SCROLL_LEFT’, o que significa que o texto rolará para o lado esquerdo. Por fim, o quarto parâmetro é o tempo em milissegundos entre os quadros de texto. Quanto maior o valor, mais lento será o movimento do texto.

Display.displayScroll("SCROLL", PA_RIGHT, PA_SCROLL_LEFT, 150);

loop()

Dentro da função loop(), usaremos uma instrução if com a função displayAnimate() que iniciará a rolagem do texto. Isso retornará true depois que cada rolagem for concluída, então a função displayReset() será chamada para redefinir a exibição. Assim, o texto rola indefinidamente.

void loop() {
  if (Display.displayAnimate()) {
    Display.displayReset();
  }
}

Demonstração

Para ver a demonstração do código acima, carregue o código no ESP32. Mas, antes de fazer o upload do código, certifique-se de selecionar a placa ESP32 em Tools > Board e também selecione a porta COM correta à qual a placa ESP32 está conectada em Tools > Port.

Depois que o código for carregado no ESP32, o texto SCROLL começará a rolar para o lado esquerdo. Isso acontecerá continuamente

Conclusão

Em conclusão, aprendemos a interface do módulo de exibição de matriz de LED MAX7219 dot com o ESP32. Examinamos dois sketch de exemplo. Esses sketch nos familiarizaram com a exibição de texto simples na tela em vários alinhamentos e também com a rolagem em uma velocidade definida.

Você também pode preferir estudar outros exemplos no MAX7219: