.. 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.2_py:
1.1.2 LED RGB
====================
Introduzione
--------------
In questo progetto, controlleremo un LED RGB per farlo lampeggiare in vari colori.
Componenti Necessari
------------------------------
In questo progetto, abbiamo bisogno dei seguenti componenti.
.. image:: ../img/list_rgb_led.png
:align: center
È 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_resistor`
- |link_resistor_buy|
* - :ref:`cpn_rgb_led`
- |link_rgb_led_buy|
Schema Elettrico
-----------------------
Collega i pin di R, G e B a una resistenza limitatrice di corrente e poi collegali
rispettivamente ai GPIO17, GPIO18 e GPIO27. Il pin più lungo (GND) del LED si collega
alla GND del Raspberry Pi. Quando i tre pin ricevono valori PWM diversi, il LED RGB
mostrerà colori differenti.
============ ======== ======== ===
T-Board Name physical wiringPi BCM
GPIO17 Pin 11 0 17
GPIO18 Pin 12 1 18
GPIO27 Pin 13 2 27
============ ======== ======== ===
.. image:: ../img/rgb_led_schematic.png
Procedure Sperimentali
----------------------------
**Passo 1:** Costruisci il circuito.
.. image:: ../img/image61.png
**Passo 2:** Apri il file del codice.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python
**Passo 3:** Esegui il codice.
.. raw:: html
.. code-block::
sudo python3 1.1.2_rgbLed.py
Dopo l'esecuzione del codice, vedrai che il LED RGB mostra rosso, verde, blu, giallo, rosa e ciano.
**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
import RPi.GPIO as GPIO
import time
# Imposta una tabella dei colori in esadecimale
COLOR = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF]
# Imposta i canali dei pin con un dizionario
pins = {'Red':17, 'Green':18, 'Blue':27}
def setup():
global p_R, p_G, p_B
GPIO.setmode(GPIO.BCM)
# Imposta tutti i pin del LED come output e il livello iniziale su High (3,3 V)
for i in pins:
GPIO.setup(pins[i], GPIO.OUT, initial=GPIO.HIGH)
p_R = GPIO.PWM(pins['Red'], 2000)
p_G = GPIO.PWM(pins['Green'], 2000)
p_B = GPIO.PWM(pins['Blue'], 2000)
p_R.start(0)
p_G.start(0)
p_B.start(0)
# Definisce una funzione MAP per mappare i valori. Ad esempio da 0~255 a 0~100
def MAP(x, in_min, in_max, out_min, out_max):
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
# Definisce una funzione per impostare i colori
def setColor(color):
# Configura la luminanza dei tre LED con il valore di colore inserito.
R_val = (color & 0xFF0000) >> 16
G_val = (color & 0x00FF00) >> 8
B_val = (color & 0x0000FF) >> 0
# Mappa il valore del colore da 0~255 a 0~100
R_val = MAP(R_val, 0, 255, 0, 100)
G_val = MAP(G_val, 0, 255, 0, 100)
B_val = MAP(B_val, 0, 255, 0, 100)
# Cambia i colori
p_R.ChangeDutyCycle(R_val)
p_G.ChangeDutyCycle(G_val)
p_B.ChangeDutyCycle(B_val)
print ("color_msg: R_val = %s, G_val = %s, B_val = %s"%(R_val, G_val, B_val))
def main():
while True:
for color in COLOR:
setColor(color)# Cambia il colore del LED RGB
time.sleep(0.5)
def destroy():
# Ferma tutti i canali PWM
p_R.stop()
p_G.stop()
p_B.stop()
# Libera le risorse
GPIO.cleanup()
if __name__ == '__main__':
setup()
try:
main()
except KeyboardInterrupt:
destroy()
**Spiegazione del Codice**
.. code-block:: python
p_R = GPIO.PWM(pins['Red'], 2000)
p_G = GPIO.PWM(pins['Green'], 2000)
p_B = GPIO.PWM(pins['Blue'], 2000)
p_R.start(0)
p_G.start(0)
p_B.start(0)
Chiama la funzione ``GPIO.PWM()`` per definire Rosso, Verde e Blu come pin PWM e
imposta la frequenza dei pin PWM su 2000 Hz, poi usa la funzione ``Start()`` per
impostare il duty cycle iniziale a zero.
.. code-block:: python
def MAP(x, in_min, in_max, out_min, out_max):
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
Definisce una funzione MAP per mappare i valori. Ad esempio, x=50, in_min=0, in_max=255,
out_min=0, out_max=100. Dopo la mappatura della funzione MAP, restituisce
``(50-0) \* (100-0)/(255-0) +0=19.6``, il che significa che 50 in un intervallo 0-255
equivale a 19,6 in un intervallo 0-100.
.. code-block:: python
def setColor(color):
R_val = (color & 0xFF0000) >> 16
G_val = (color & 0x00FF00) >> 8
B_val = (color & 0x0000FF) >> 0
Configura la luminanza dei tre LED con il valore di colore inserito, assegnando i primi
due valori esadecimali a R_val, i due valori centrali a G_val e gli ultimi due valori a
B_val. Ad esempio, se color=0xFF00FF, R_val=(0xFF00FF & 0xFF0000)>> 16 = 0xFF, G_val = 0x00, B_val=0xFF.
.. code-block:: python
R_val = MAP(R_val, 0, 255, 0, 100)
G_val = MAP(G_val, 0, 255, 0, 100)
B_val = MAP(B_val, 0, 255, 0, 100)
Usa la funzione MAP per mappare il valore R,G,B tra 0~255 nell'intervallo del duty cycle PWM 0-100.
.. code-block:: python
p_R.ChangeDutyCycle(R_val)
p_G.ChangeDutyCycle(G_val)
p_B.ChangeDutyCycle(B_val)
Assegna il valore del duty cycle mappato al canale PWM corrispondente per cambiare la luminanza.
.. code-block:: python
for color in COLOR:
setColor(color)
time.sleep(0.5)
Assegna ogni elemento della lista COLOR al colore rispettivo e cambia il colore del LED
RGB tramite la funzione ``setColor()``.
Immagine del Fenomeno
------------------------
.. image:: ../img/image62.jpeg