.. 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.2_py:
1.1.2 RGB LED
====================
Einführung
--------------
In diesem Projekt werden wir eine RGB-LED steuern, um verschiedene Farben blinken zu lassen.
Benötigte Komponenten
------------------------------
Für dieses Projekt benötigen wir die folgenden Komponenten.
.. image:: ../img/list_rgb_led.png
:align: center
Es ist definitiv praktisch, ein ganzes Kit 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_resistor`
- |link_resistor_buy|
* - :ref:`cpn_rgb_led`
- |link_rgb_led_buy|
Schaltplan
-----------------------
Nachdem Sie die Pins von R, G und B mit einem strombegrenzenden Widerstand verbunden haben,
schließen Sie sie jeweils an die GPIO17, GPIO18 und GPIO27 an. Der längste
Pin (GND) der LED wird mit dem GND des Raspberry Pi verbunden. Wenn den
drei Pins unterschiedliche PWM-Werte gegeben werden, zeigt die RGB-LED
verschiedene Farben an.
============ ======== ======== ===
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
Experimentelle Verfahren
----------------------------
**Schritt 1:** Schaltung aufbauen.
.. image:: ../img/image61.png
**Schritt 2:** Die Code-Datei öffnen.
.. raw:: html
.. code-block::
cd ~/raphael-kit/python
**Schritt 3:** Ausführen.
.. raw:: html
.. code-block::
sudo python3 1.1.2_rgbLed.py
Nachdem der Code ausgeführt wurde, sehen Sie, dass RGB rot, grün, blau,
gelb, pink und cyan anzeigt.
**Code**
.. note::
Sie können den untenstehenden Code **Bearbeiten/Zurücksetzen/Kopieren/Ausführen/Stoppen**. Doch bevor Sie dies tun, müssen Sie zum Quellcode-Pfad wie ``raphael-kit/python`` gehen. Nachdem Sie den Code modifiziert haben, können Sie ihn direkt ausführen, um das Ergebnis zu sehen.
.. 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()
**Code-Erklärung**
.. 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)
Rufen Sie die ``GPIO.PWM()``-Funktion auf, um Rot, Grün und Blau als PWM-Pins zu definieren
und setzen Sie die Frequenz der PWM-Pins auf 2000Hz. Verwenden Sie dann die ``Start()``
Funktion, um den anfänglichen Tastgrad auf null zu setzen.
.. 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
Definieren Sie eine MAP-Funktion zum Zuordnen von Werten. Zum Beispiel, x=50, in_min=0,
in_max=255, out_min=0, out_max=100. Nach der Zuordnung durch die MAP-Funktion,
gibt es ``(50-0) * (100-0)/(255-0) +0=19,6`` zurück, was bedeutet, dass 50 im Bereich 0-255
19,6 im Bereich 0-100 entspricht.
.. code-block:: python
def setColor(color):
R_val = (color & 0xFF0000) >> 16
G_val = (color & 0x00FF00) >> 8
B_val = (color & 0x0000FF) >> 0
Konfigurieren Sie die Helligkeit der drei LEDs mit dem eingegebenen Farbwert,
weisen Sie die ersten zwei Werte des Hexadezimalwerts R_val zu, die mittleren zwei
G_val und die letzten zwei Werte B_val. Zum Beispiel, wenn
color=0xFF00FF ist, dann ist 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)
Verwenden Sie die MAP-Funktion, um die R,G,B-Werte im Bereich 0~255 in den PWM-Tastgradbereich
0-100 zu übertragen.
.. code-block:: python
p_R.ChangeDutyCycle(R_val)
p_G.ChangeDutyCycle(G_val)
p_B.ChangeDutyCycle(B_val)
Weisen Sie den zugeordneten Tastgradwert dem entsprechenden PWM-Kanal zu,
um die Helligkeit zu ändern.
.. code-block:: python
for color in COLOR:
setColor(color)
time.sleep(0.5)
Weisen Sie jedem Element in der COLOR-Liste die Farbe entsprechend zu und ändern
Sie die Farbe der RGB-LED über die ``setColor()`` Funktion.
Phänomen-Bild
------------------------
.. image:: ../img/image62.jpeg