.. note::
¡Hola! Bienvenido a la comunidad de entusiastas de SunFounder Raspberry Pi, Arduino y ESP32 en Facebook. Profundiza en Raspberry Pi, Arduino y ESP32 con otros entusiastas.
**¿Por qué unirse?**
- **Soporte experto**: Resuelve problemas post-venta y desafíos técnicos con la ayuda de nuestra comunidad y equipo.
- **Aprender y compartir**: Intercambia consejos y tutoriales para mejorar tus habilidades.
- **Avances exclusivos**: Obtén acceso temprano a nuevos anuncios de productos y adelantos.
- **Descuentos especiales**: Disfruta de descuentos exclusivos en nuestros productos más recientes.
- **Promociones y sorteos festivos**: Participa en sorteos y promociones de temporada.
👉 ¿Listo para explorar y crear con nosotros? Haz clic en [|link_sf_facebook|] y únete hoy.
.. _1.1.2_py:
1.1.2 LED RGB
======================
Introducción
-----------------
En este proyecto, controlaremos un LED RGB para que parpadee con varios colores.
Componentes requeridos
---------------------------------
En este proyecto, necesitaremos los siguientes componentes.
.. image:: ../img/list_rgb_led.png
:align: center
Es muy conveniente comprar un kit completo, aquí está el enlace:
.. list-table::
:widths: 20 20 20
:header-rows: 1
* - Nombre
- ELEMENTOS EN ESTE KIT
- ENLACE
* - Kit Raphael
- 337
- |link_Raphael_kit|
También puedes comprarlos por separado en los enlaces a continuación.
.. list-table::
:widths: 30 20
:header-rows: 1
* - INTRODUCCIÓN DEL COMPONENTE
- ENLACE DE COMPRA
* - :ref:`cpn_gpio_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|
Diagrama Esquemático
--------------------------
Después de conectar los pines de R, G y B a una resistencia limitadora de corriente,
conéctalos a los GPIO17, GPIO18 y GPIO27 respectivamente. El pin más largo (GND) del
LED se conecta al GND de la Raspberry Pi. Cuando los tres pines reciben diferentes valores
PWM, el LED RGB mostrará diferentes colores.
================== ======== ======== ===
Nombre del T-Board físico wiringPi BCM
GPIO17 Pin 11 0 17
GPIO18 Pin 12 1 18
GPIO27 Pin 13 2 27
================== ======== ======== ===
.. image:: ../img/rgb_led_schematic.png
Procedimientos Experimentales
---------------------------------
**Paso 1:** Construye el circuito.
.. image:: ../img/image61.png
**Paso 2:** Abre el archivo de código.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python
**Paso 3:** Ejecuta.
.. raw:: html
.. code-block::
sudo python3 1.1.2_rgbLed.py
Después de ejecutar el código, verás que el LED RGB muestra los colores rojo, verde, azul, amarillo, rosa y cian.
**Código**
.. note::
Puedes **Modificar/Restablecer/Copiar/Ejecutar/Detener** el código a continuación. Pero antes de eso, necesitas ir a la ruta del código fuente como ``raphael-kit/python``. Después de modificar el código, puedes ejecutarlo directamente para ver el efecto.
.. raw:: html
.. code-block:: python
import RPi.GPIO as GPIO
import time
# Set up a color table in Hexadecimal
COLOR = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF]
# Set pins' channels with dictionary
pins = {'Red':17, 'Green':18, 'Blue':27}
def setup():
global p_R, p_G, p_B
GPIO.setmode(GPIO.BCM)
# Set all LedPin's mode to output and initial level to High(3.3v)
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)
# Define a MAP function for mapping values. Like from 0~255 to 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
# Define a function to set up colors
def setColor(color):
# configures the three LEDs' luminance with the inputted color value.
R_val = (color & 0xFF0000) >> 16
G_val = (color & 0x00FF00) >> 8
B_val = (color & 0x0000FF) >> 0
# Map color value from 0~255 to 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)
# Change the colors
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)# change the color of the RGB LED
time.sleep(0.5)
def destroy():
# Stop all pwm channel
p_R.stop()
p_G.stop()
p_B.stop()
# Release resource
GPIO.cleanup()
if __name__ == '__main__':
setup()
try:
main()
except KeyboardInterrupt:
destroy()
**Explicación del Código**
.. 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)
Llama a la función ``GPIO.PWM()`` para definir los pines Rojo, Verde y Azul como
pines PWM y establece la frecuencia de los pines PWM en 2000Hz. Luego, utiliza la
función ``start()`` para establecer el ciclo de trabajo inicial en cero.
.. 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
Define una función MAP para mapear valores. Por ejemplo, x=50, in_min=0, in_max=255,
out_min=0, out_max=100. Después del mapeo con la función MAP, devuelve
``(50-0) * (100-0)/(255-0) + 0=19.6``, lo que significa que 50 en el rango 0-255 equivale
a 19.6 en el rango 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 luminancia de los tres LEDs con el valor de color ingresado, asigna los
primeros dos valores del hexadecimal a R_val, los dos del medio a G_val y los últimos
dos valores a B_val. Por ejemplo, si 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)
Utiliza la función MAP para mapear los valores de R, G, B en el rango 0~255 al rango del ciclo
de trabajo PWM 0-100.
.. code-block:: python
p_R.ChangeDutyCycle(R_val)
p_G.ChangeDutyCycle(G_val)
p_B.ChangeDutyCycle(B_val)
Asigna el valor del ciclo de trabajo mapeado al canal PWM correspondiente para cambiar la luminancia.
.. code-block:: python
for color in COLOR:
setColor(color)
time.sleep(0.5)
Asigna cada elemento de la lista COLOR al color respectivamente y cambia el color del LED RGB
mediante la función ``setColor()``.
Imagen del Fenómeno
------------------------
.. image:: ../img/image62.jpeg