.. note::
Ciao, benvenuto nella SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Community su Facebook! Approfondisci le tue conoscenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri appassionati.
**Perché unirti a noi?**
- **Supporto esperto**: Risolvi problemi post-vendita e sfide tecniche con l'aiuto della nostra comunità e del nostro team.
- **Impara e condividi**: Scambia suggerimenti e tutorial per migliorare le tue competenze.
- **Anteprime esclusive**: Ottieni accesso anticipato agli annunci di nuovi prodotti e anteprime esclusive.
- **Sconti speciali**: Approfitta di sconti esclusivi sui nostri prodotti più recenti.
- **Promozioni festive e concorsi**: Partecipa a concorsi e promozioni durante le festività.
👉 Sei pronto a esplorare e creare con noi? Clicca su [|link_sf_facebook|] e unisciti oggi stesso!
.. _1.1.6_py:
1.1.6 Matrice a Punti LED
===============================
Introduzione
--------------------
Come suggerisce il nome, una matrice a punti LED è una matrice composta da LED.
L'accensione e lo spegnimento dei LED formano diversi caratteri e modelli.
Componenti Necessari
------------------------------
In questo progetto, abbiamo bisogno dei seguenti componenti.
.. image:: ../img/list_dot.png
È sicuramente comodo acquistare un kit completo, ecco il link:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nome
- ARTICOLI IN QUESTO KIT
- LINK
* - Kit Raphael
- 337
- |link_Raphael_kit|
Puoi anche acquistarli separatamente dai link qui sotto.
.. list-table::
:widths: 30 20
:header-rows: 1
* - INTRODUZIONE AI COMPONENTI
- LINK PER L'ACQUISTO
* - :ref:`cpn_gpio_extension_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|
Schema Elettrico
-----------------------
============ ======== ======== ====
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
Procedure Sperimentali
----------------------------
**Passo 1:** Costruisci il circuito.
.. image:: ../img/1.1.6fritzing.png
**Passo 2**: Attivare SPI prima di iniziare l'esperimento, vedere :ref:`spi_configuration` per i dettagli.
**Passo 3**: Installare il modulo :ref:`install_luma_led_matrix`.
**Passo 4:** Cambia directory.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python/
Passo 5: Eseguire lo script Python ``1.1.6_LedMatrix.py`` utilizzando l'interprete Python dell'ambiente virtuale ``my_env``.
.. raw:: html
.. code-block::
sudo ~/my_env/bin/python3 1.1.6_LedMatrix.py
Dopo aver eseguito il codice, la Matrice LED mostrerà un rettangolo per due secondi, poi la lettera 'A' per due secondi, e infine scorrerà per visualizzare il testo "Hello, Nice to meet you!".
**Codice**
.. note::
Puoi **Modificare/Reimpostare/Copiare/Eseguire/Interrompere** il codice qui sotto. Ma prima devi accedere al percorso del codice come ``raphael-kit/python``. Dopo aver modificato il codice, puoi eseguirlo direttamente per vedere l'effetto.
.. raw:: html
.. code-block:: python
from luma.core.interface.serial import spi, noop
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, LCD_FONT
import time
serial = spi(port=0, device=0, gpio=noop())
device = max7219(serial, rotate=1)
virtual = viewport(device, width=200, height=400)
def displayRectangle():
with canvas(device) as draw:
draw.rectangle(device.bounding_box, outline="white", fill="black")
def displayLetter():
with canvas(device) as draw:
text(draw, (0, 0), "A", fill="white", font=proportional(CP437_FONT))
def scrollToDisplayText():
with canvas(virtual) as draw:
text(draw, (0, 0), "Hello, Nice to meet you!", fill="white", font=proportional(CP437_FONT))
for offset in range(150):
virtual.set_position((offset,0))
time.sleep(0.1)
def main():
while True:
displayRectangle()
time.sleep(2)
displayLetter()
time.sleep(2)
scrollToDisplayText()
def destroy():
pass
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
destroy()
**Spiegazione del Codice**
.. code-block:: python
from luma.core.interface.serial import spi, noop
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, LCD_FONT
import time
Importa le librerie rilevanti, tra cui ``luma.core``, una libreria compatibile con Pillow per Python 3 che fornisce un canvas e altre funzionalità di disegno per display piccoli su Raspberry Pi e altri computer a scheda singola.
Puoi visitare `https://luma-core.readthedocs.io/en/latest/intro.html `_ per saperne di più.
.. code-block:: python
serial = spi(port=0, device=0, gpio=noop())
device = max7219(serial, rotate=1)
Inizializza la classe ``luma.led_matrix.device.max7219``.
.. note::
Se vuoi modificare la direzione di visualizzazione della Matrice LED, puoi farlo modificando il valore di rotate, dove 0 significa nessuna rotazione, 1 significa rotazione di 90° in senso orario, 2 significa rotazione di 180° e 3 significa rotazione di 270° in senso orario.
.. code-block:: python
def displayRectangle():
with canvas(device) as draw:
draw.rectangle(device.bounding_box, outline="white", fill="black")
Visualizza un rettangolo vuoto nell'area dei bordi della Matrice LED e modifica il valore di ``fill`` in ``white`` per visualizzare un rettangolo pieno.
.. code-block:: python
def displayLetter():
with canvas(device) as draw:
text(draw, (0, 0), "A", fill="white", font=proportional(CP437_FONT))
Una "A" viene visualizzata alle coordinate (0, 0) della Matrice LED, dove ``CP437_FONT`` è un font adatto per schermi a matrice di punti 8x8.
.. code-block:: python
virtual = viewport(device, width=200, height=400)
Non è possibile visualizzare una linea di testo su una singola matrice LED 8x8. Dobbiamo utilizzare il metodo ``luma.core.virtual.viewport`` per far scorrere il testo attraverso la finestra virtuale.
.. code-block:: python
def scrollToDisplayText():
with canvas(virtual) as draw:
text(draw, (0, 0), "Hello, Nice to meet you!", fill="white", font=proportional(CP437_FONT))
for offset in range(150):
virtual.set_position((offset,0))
time.sleep(0.1)
``scrollToDisplayText()`` implementa "Hello, Nice to meet you!" come testo scorrevole sulla Matrice LED.
Prima, passiamo virtual come argomento alla funzione ``canvas()``, così possiamo usare la finestra virtuale come finestra di visualizzazione corrente. Poi la funzione ``text()`` visualizza "Hello, Nice to meet you!" sulla Matrice LED.
Utilizzando la funzione for loop, spostiamo la finestra virtuale nella direzione X in modo da poter vedere il testo "Hello, Nice to meet you!" scorrere.
Immagine del Fenomeno
--------------------------
.. image:: ../img/1.1.6led_dot_matrix.JPG