.. 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