.. note:: 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 [|link_sf_facebook|] und treten Sie heute bei! .. _1.1.6_js: 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. .. image:: ../img/list_dot.png Es ist definitiv praktisch, ein komplettes Set zu kaufen, hier ist der Link: .. list-table:: :widths: 20 20 20 :header-rows: 1 * - Name - ARTIKEL IN DIESEM KIT - LINK * - Raphael Kit - 337 - |link_Raphael_kit| Sie können sie auch separat über die untenstehenden Links kaufen. .. list-table:: :widths: 30 20 :header-rows: 1 * - KOMPONENTENBESCHREIBUNG - KAUF-LINK * - :ref:`cpn_gpio_board` - |link_gpio_board_buy| * - :ref:`cpn_breadboard` - |link_breadboard_buy| * - :ref:`cpn_wires` - |link_wires_buy| * - :ref:`cpn_dot_matrix` - |link_led_matrix_buy| Schaltplan ----------------------- ============ ======== ======== ==== T-Board Name physical wiringPi BCM SPIMOSI Pin 19 12 MOSI SPICE0 pin 24 10 CE0 SPISCLK Pin 23 14 SCLK ============ ======== ======== ==== .. image:: ../img/schematic_dot.png Experimentelle Verfahren ---------------------------- **Schritt 1:** Schalten Sie den Stromkreis. .. image:: ../img/1.1.6fritzing.png .. note:: Schalten Sie das SPI vor Beginn des Experiments ein, Einzelheiten finden Sie unter :ref:`spi_configuration`. **Schritt 2:** Gehen Sie zum Ordner des Codes. .. raw:: html .. code-block:: cd ~/raphael-kit/nodejs/ **Schritt 3:** Installieren Sie die Abhängigkeiten. .. raw:: html .. code-block:: sudo npm install spi-device **Schritt 4:** Starten Sie den Code. .. raw:: html .. code-block:: 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** .. code-block:: js 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** .. code-block:: js const spi = require('spi-device'); Importieren Sie die für die SPI-Kommunikation benötigten Module. .. note:: Wenn Sie mehrere Geräte haben, die eine SPI-Kommunikation benötigen, schließen Sie einfach die CS-Pins an verschiedene Pins an. .. code-block:: js 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. .. note:: 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. * `Asynchrone Funktion `_ .. code-block:: js 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. .. code-block:: js 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. .. image:: ../img/led_not.png :width: 400 Phänomen-Bild ----------------------- .. image:: ../img/1.1.6led_dot_matrix.JPG