Bemerkung

Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.

Warum beitreten?

  • Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.

  • Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.

  • Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.

  • Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.

  • Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.

👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!

1.1.6 LED-Punkt-Matrix-Modul

Einführung

In diesem Projekt werden Sie das LED-Punkt-Matrix-Modul kennenlernen. Das LED-Punkt-Matrix-Modul verwendet den MAX7219-Treiber, um die 8 x 8 LED-Matrix anzusteuern.

Benötigte Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

../_images/list_dot.png

Es ist definitiv praktisch, ein komplettes Set zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

Raphael Kit

337

Raphael Kit

Sie können sie auch separat über die untenstehenden Links kaufen.

KOMPONENTENBESCHREIBUNG

KAUF-LINK

GPIO Extension Board

KAUFEN

Steckbrett

KAUFEN

Jumper-Kabel

KAUFEN

LED Matrix Modul

KAUFEN

Schaltplan

T-Board Name

physical

wiringPi

BCM

SPIMOSI

Pin 19

12

MOSI

SPICE0

pin 24

10

CE0

SPISCLK

Pin 23

14

SCLK

../_images/schematic_dot.png

Experimentelle Verfahren

Schritt 1: Schalten Sie den Stromkreis.

../_images/1.1.6fritzing.png

Bemerkung

Schalten Sie das SPI vor Beginn des Experiments ein, Einzelheiten finden Sie unter SPI-Konfiguration.

Schritt 2: Gehen Sie zum Ordner des Codes.

cd ~/raphael-kit/nodejs/

Schritt 3: Installieren Sie die Abhängigkeiten.

sudo npm install spi-device

Schritt 4: Starten Sie den Code.

sudo node max7219_led_matrix.js

Nachdem der Code ausgeführt wurde, zeigt die LED-Punkt-Matrix nacheinander Zahlen von 0 bis 9 und Buchstaben von A bis Z an.

Code

const Gpio = require('pigpio').Gpio;
const spi = require('spi-device');

class MAX7219_LED_MATRIX {
    constructor(bus, device) {
        this.bus = bus;
        this.device = device;
    }
    delay(ms) {
        return new Promise((resolve, reject) => {setTimeout(resolve, ms)});
    }

    async write(addr, data) {
        return new Promise((resolve, reject)=>{
            const max7219 = spi.open(this.bus, this.device, (err)=>{
                if (err) reject(err);

                const message = [{
                    sendBuffer: Buffer.from([addr, data]),
                    receiveBuffer: Buffer.alloc(2),
                    byteLength: 2,
                    speedHz: 20000
                }];

                max7219.transfer(message, (err, message)=>{
                    if (err) reject(err);
                    else resolve();
                })
            })
        })
    }
    async init() {
        await this.write(0x09, 0x00);
        await this.write(0x0a, 0x03);
        await this.write(0x0b, 0x07);
        await this.write(0x0c, 0x01);
        await this.write(0x0f, 0x00);
    }
}

const DISP=[
    [0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C],//0
    [0x08,0x18,0x28,0x08,0x08,0x08,0x08,0x08],//1
    [0x7E,0x2,0x2,0x7E,0x40,0x40,0x40,0x7E],//2
    [0x3E,0x2,0x2,0x3E,0x2,0x2,0x3E,0x0],//3
    [0x8,0x18,0x28,0x48,0xFE,0x8,0x8,0x8],//4
    [0x3C,0x20,0x20,0x3C,0x4,0x4,0x3C,0x0],//5
    [0x3C,0x20,0x20,0x3C,0x24,0x24,0x3C,0x0],//6
    [0x3E,0x22,0x4,0x8,0x8,0x8,0x8,0x8],//7
    [0x0,0x3E,0x22,0x22,0x3E,0x22,0x22,0x3E],//8
    [0x3E,0x22,0x22,0x3E,0x2,0x2,0x2,0x3E],//9
    [0x8,0x14,0x22,0x3E,0x22,0x22,0x22,0x22],//A
    [0x3C,0x22,0x22,0x3E,0x22,0x22,0x3C,0x0],//B
    [0x3C,0x40,0x40,0x40,0x40,0x40,0x3C,0x0],//C
    [0x7C,0x42,0x42,0x42,0x42,0x42,0x7C,0x0],//D
    [0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x7C],//E
    [0x7C,0x40,0x40,0x7C,0x40,0x40,0x40,0x40],//F
    [0x3C,0x40,0x40,0x40,0x40,0x44,0x44,0x3C],//G
    [0x44,0x44,0x44,0x7C,0x44,0x44,0x44,0x44],//H
    [0x7C,0x10,0x10,0x10,0x10,0x10,0x10,0x7C],//I
    [0x3C,0x8,0x8,0x8,0x8,0x8,0x48,0x30],//J
    [0x0,0x24,0x28,0x30,0x20,0x30,0x28,0x24],//K
    [0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7C],//L
    [0x81,0xC3,0xA5,0x99,0x81,0x81,0x81,0x81],//M
    [0x0,0x42,0x62,0x52,0x4A,0x46,0x42,0x0],//N
    [0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x3C],//O
    [0x3C,0x22,0x22,0x22,0x3C,0x20,0x20,0x20],//P
    [0x1C,0x22,0x22,0x22,0x22,0x26,0x22,0x1D],//Q
    [0x3C,0x22,0x22,0x22,0x3C,0x24,0x22,0x21],//R
    [0x0,0x1E,0x20,0x20,0x3E,0x2,0x2,0x3C],//S
    [0x0,0x3E,0x8,0x8,0x8,0x8,0x8,0x8],//T
    [0x42,0x42,0x42,0x42,0x42,0x42,0x22,0x1C],//U
    [0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18],//V
    [0x0,0x49,0x49,0x49,0x49,0x2A,0x1C,0x0],//W
    [0x0,0x41,0x22,0x14,0x8,0x14,0x22,0x41],//X
    [0x41,0x22,0x14,0x8,0x8,0x8,0x8,0x8],//Y
    [0x0,0x7F,0x2,0x4,0x8,0x10,0x20,0x7F],//Z
];

lm = new MAX7219_LED_MATRIX(0, 0);

async function main(){
    lm.init();
    while(1){
        for(let j=0;j<36;j++){
            for(let i=1;i<9;i++){
                lm.write(i, DISP[j][i-1]);
            }
            await lm.delay(1000);
        }
    }
}
main();

Code-Erklärung

const spi = require('spi-device');

Importieren Sie die für die SPI-Kommunikation benötigten Module.

Bemerkung

Wenn Sie mehrere Geräte haben, die eine SPI-Kommunikation benötigen, schließen Sie einfach die CS-Pins an verschiedene Pins an.

class MAX7219_LED_MATRIX {
    constructor(bus, device) {
        this.bus = bus;
        this.device = device;
    }
    delay(ms) {
        return new Promise((resolve, reject) => {setTimeout(resolve, ms)});
    }

    async write(addr, data) {
        return new Promise((resolve, reject)=>{
            const max7219 = spi.open(this.bus, this.device, (err)=>{
                if (err) reject(err);

                const message = [{
                    sendBuffer: Buffer.from([addr, data]),
                    receiveBuffer: Buffer.alloc(2),
                    byteLength: 2,
                    speedHz: 20000
                }];

                max7219.transfer(message, (err, message)=>{
                    if (err) reject(err);
                    else resolve();
                })
            })
        })
    }

Implementieren Sie eine MAX7219_LED_MATRIX Klasse. Die darin gekapselte write() Funktion kann die Matrix beleuchten.

Bemerkung

Das Schlüsselwort async wird verwendet, um die Funktion zu modifizieren und wird normalerweise mit dem Schlüsselwort await abgeglichen. Die durch das Schlüsselwort await modifizierte Anweisung muss warten, bis der vorherige Code ausgeführt wurde, bevor sie ausgeführt wird, und erreicht den Effekt der synchronen Blockierung.

lm = new MAX7219_LED_MATRIX(0, 0);

Erzeugen Sie ein Objekt lm der Klasse MAX7219_LED_MATRIX, damit wir die darin gekapselte write() Funktion aufrufen können.

while(1){
    for(let j=0;j<36;j++){
        for(let i=0;i<8;i++){
            lm.write(i, DISP[j][i]);
        }
        await lm.delay(1000);
    }
}

Die Funktion write(row,date) ermöglicht es Ihnen, bestimmte Zeichen auf der LED-Punkt-Matrix anzuzeigen. Das erste Parameter wählt die Zeile der LED-Matrix aus (insgesamt 8 Zeilen), Das zweite Parameter gibt eine 8-Bit-Binärzahl ein, um die 8 LEDs der Zeile zu steuern (0 bedeutet aus, 1 bedeutet an).

Die Variable j wird verwendet, um das Glyph auszuwählen, welches DISP[] ist. Es gibt insgesamt 35 Glyphen, 0~9 und A~Z.

Zum Beispiel, wenn j=1, sollte die LED-Matrix das Bild 1 anzeigen.

Die Variable i wird verwendet, um die 8 Daten im DISP[] Glyph nacheinander in die LED-Matrix zu schreiben. Nach Abschluss der Schleife kann eine 8x8-Grafik erzeugt werden.

Zum Beispiel, wenn j=1, i=1, werden die Daten von DISP[1][1] hier geschrieben, d.h. 0x18, Das führt dazu, dass die zweite Zeile der LED-Matrix das Bild 00011000 anzeigt.

../_images/led_not.png

Phänomen-Bild

../_images/1.1.6led_dot_matrix.JPG