Programmieren mit MicroPython #4: RGB LED am ESP32 betreiben

Wie man eine RGB LED am ESP32 programmiert möchte ich dir in diesem Beitrag erläutern.

ESP32 mit RGB LED (WS18B20)
ESP32 mit RGB LED (WS18B20)

benötigte Bauteile

Für den betrieb einer RGB LED am ESP32 benötigst du folgende Bauteile:

Aufbau einer RGB LED vom Typ WS18B20

Die RGB LED verfügt über 4 Beinchen welche jeweils unterschiedlich lang sind. Des Weiteren verfügt die RGB LED über eine abgeflachte Seite am Gehäuse somit können wir die Pinbelegung besser ermitteln.

Pinout einer 5mm, WS18B20 RGB LED
Pinout einer 5mm, WS18B20 RGB LED

Es gibt natürlich auch fertige RGB LED Shields / NeoPixel auf dem Markt welche man etwas besser an den ESP32 anschließen kann. An diese Module lassen sich Litzen anlöten und somit kann man diese einfacher anschließen.

Die dort verbauten NeoPixel haben die Modelbezeichnung „WS2812B“ wobei die Programmierung und die selbe ist wie bei den „WS18B20“.

Aufbau der Schaltung am ESP32

In dieser Schaltung wollen wir zunächst eine RGB LED betreiben. Diese RGB LED verfügt wie bereits gezeigt über 4 Beinchen welche für den digitalen Eingang (DIN), die Spannungsversorgung (VCC)von 3,5V bis max. 6V sowie den Minuspol (G) dienen. Das vierte Beinchen der RGB LED dient für das kaskadierende Anschließen weiterer LEDs somit kann man eine Reihe von x RGB LEDs hintereinander anschließen und nur mit einem digitalen Pin betreiben.

Aufbau der Schaltung - ESP32 mit RGB LED Typ WS18B20
Aufbau der Schaltung – ESP32 mit RGB LED Typ WS18B20

Programmieren

setzen der Farbe an einer RGB LED vom Typ WS2812B am ESP32

Wenn du die gleiche Entwicklungsumgebung (uPyCraft) und Python3 wie ich verwendest, dann musst du keine zusätzliche Bibliothek installieren.

Zum ansteuern der NeoPixel importieren wir die Bibliothek „neopixel“.

import neopixel

Des Weiteren benötigen wir aus der bereits bekannten Bibliothek „machine“ das Modul „Pin“.

from machine import Pin

Zunächst erzeugen wir uns ein NeoPixel Objekt, meine RGB Led ist am GPIO 4 angeschlossen. Dem Konstruktor des Objektes NeoPixel übergeben wir ein „Pin“ Objekt sowie die Anzahl der NeoPixel.

rgbLeds = neopixel.NeoPixel(Pin(4, Pin.OUT), 1)

Über einen Index können wir nun jede einzelne RGB LED steuern. Da wir in diesem Beispiel nur eine RGB LED haben greifen wir mit dem Index „0“ auf die einzelne LED zu und weisen dieser die Farbe „rot“ zu.

rgbLeds[0] = (0, 255, 0)

Interessant ist, das es nicht im Format „RGB“ also rot – grün – blau ist, sondern im Format grün – rot – blau. Der minimale Wert für eine Farbe ist „0“ und der maximale ist „255“.
Wenn du also die Farbe grün einstellen möchtest so wählst du hier den Wert „rgbLeds[0] = (255, 0, 0)“. 

Mit der Methode „write“ wird der gesetzte Farbwert auf die LED „geschrieben“.

rgbLeds.write()

Hier nun der komplette Quellcode:

import neopixel
from machine import Pin
 
rgbLeds = neopixel.NeoPixel(Pin(4, Pin.OUT), 1)
rgbLeds[0] = (0, 255, 0)
rgbLeds.write()
ESP32 mit RGB LED (WS18B20)
ESP32 mit RGB LED (WS18B20)

Wechselblinken zweier RGB LEDs

Zum betrieb zweier LEDs verwende ich zusätzlich ein Power Modul an welchem eine 9V Block Batterie angeschlossen ist. Das hat den Hintergrund das ein GPIO Pin des ESP32 nur maximal 12mA Leistung hat. Ich konnte leider kein Datenblatt finden wo für die RGB LED WS2812B bzw. PL9823-F5 die Technischen Daten komplett abgebildet sind. Einzig auf aliexpress.com habe ich in einer Artikelbeschreibung gefunden das diese RGB LED wohl eine maximale Stromaufnahme von 120mA (an anderen Stellen steht 100mA) hat.

zwei RGB LEDs vom Typ WS2812B am ESP32 mit Power Modul
zwei RGB LEDs vom Typ WS2812B am ESP32 mit Power Modul

Aufbau der Schaltung mit 2 RGB LEDs

Die Stromversorgung der LEDs kommt, wie eingangs erwähnt von einer 9V Block Batterie. Zusätzlich muss für den Potentialausgleich „-“ von der Stromversorgung mit „G“ des ESP32 verbunden werden. Des Weiteren wird DOUT der LED1 mit DIN der LED2 (blaues Breadboardkabel im Bild) verbunden. 

Quellcode

Wir nutzen als Basis das Programm aus dem vorherigen Beispiel mit nur einer RGB LED. Wir müssen hier nur den Konstruktor anpassen so das 2 LEDs angesprochen werden können.

rgbLeds = neopixel.NeoPixel(Pin(4, Pin.OUT), 2)

Die Methode „setColor“ erweitern wir um einen Parameter für den Index der LED (0 oder 1).

def setColor(led, red, green, blue):
  rgbLeds[led] = (green, red, blue)
  print("RGB {%1d} Value={%3d, %3d, %3d}"%(led,red, green, blue))
  rgbLeds.write()

In der Endlosschleife setzen wir nun die Farben der jeweiligen LEDs immer abwechselnd in einem Intervall von 500ms.
Die LED am Index 0 wird in der Farbe „rot“ blinken und die andere LED in der Farbe „grün“. Zwischendrin wird die Farbe jeweils auf „schwarz“ (alle Werte auf 0) gesetzt, so das die LED deaktiviert ist.

while(1):
  setColor(0,255,0,0)
  sleep(0.5)
  setColor(0,0,0,0)
  sleep(0.5)
  setColor(1,0,255,0)
  sleep(0.5)
  setColor(1,0,0,0)
  sleep(0.5)

Das gesamte Programm:

import neopixel
from machine import Pin
from time import sleep
 
rgbLeds = neopixel.NeoPixel(Pin(4, Pin.OUT), 2)
 
def setColor(led, red, green, blue):
  rgbLeds[led] = (green, red, blue)
  print("RGB {%1d} Value={%3d, %3d, %3d}"%(led,red, green, blue))
  rgbLeds.write()
  
  
while(1):
  setColor(0,255,0,0)
  sleep(0.5)
  setColor(0,0,0,0)
  sleep(0.5)
  setColor(1,0,255,0)
  sleep(0.5)
  setColor(1,0,0,0)
  sleep(0.5)

Video

 

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert