Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Über mich
  • Deutsch
  • English
Menu

ESP32 steuern von 2 RGB Stripes mit Taster

Posted on 1. Mai 202310. März 2024 by Stefan Draeger

In diesem Beitrag möchte ich dir gerne erläutern, wie du zwei RGB Stripes am ESP32 anschließen und mit jeweils zwei Taster steuern kannst.

Die Idee zu diesem Beitrag habe ich aus einem Kommentar zum Beitrags ESP32 mit RGB Stripe entnommen. Daher vielen Dank an Markus B.

  • Benötigte Ressourcen für dieses Projekt
  • Aufbau der Schaltung
  • Programmieren
    • Aktivieren / Deaktivieren der RGB Stripes per Taster
  • Blinken eines RGB Stripes per Taster
    • Programmieren des Blinkens von zwei RGB Stripes mit zwei Taster

Benötigte Ressourcen für dieses Projekt

Wenn du das kleine Projekt nachbauen möchtest, dann benötigst du:

  • einen ESP32*,
  • ein passendes USB-Datenkabel*,
  • zwei 8bit RGB Stripes*,
  • zwei Taster*,
  • zwei 400 Pin Breadboards*,
  • ein Power Supply Modul*,
  • eine 9V Block-Batterie*,
  • diverse Breadboardkabel*, männlich – männlich, 10 cm

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Aufbau der Schaltung

Die Schaltung ist mit zwei Taster und zwei RGB Stripes recht einfach. Der ESP32 liefert im Normalfall lediglich 3.3V, die RGB Stripes jedoch benötigen 5V, hier kann man mit einem Power Supply Modul, welches man auf ein Breadboard steckt, diese benötigte Spannung bereitstellen.

Die Schaltung sieht in meinem Fall wie folgt aus. Ich verwende hier den Mikrocontroller ESP32 von AZ-Delivery im Formfaktor eines Arduino UNOs, diesen habe ich dir bereits im Beitrag AZ-Delivery D1 Board mit ESP32 Chip vorgestellt.

Schaltung - ESP32 mit zwei RGB Stripes & Taster
Schaltung – ESP32 mit zwei RGB Stripes & Taster

Programmieren

Zum Steuern der RGB Stripes sowie zum Entprellen der Taster benötigen wir jeweils eine Bibliothek, welche wir zuvor installieren.

Ich gehe davon aus, dass du deinen ESP32 bereits in die Arduino IDE eingerichtet hast.

Aktivieren / Deaktivieren der RGB Stripes per Taster

Im ersten Beispiel möchte ich dir erläutern, wie du per Taster die RGB Stripes aktivierst bzw. deaktivierst.

//Bibliothek zum steuern der NeoPixel am Mikrocontroller
#include <Adafruit_NeoPixel.h>

//Bibliothek zum entprellen der Taster
#include <Bounce2.h>

//Taster 1 am GPIO13 angeschlossen
#define button1 13
//RGB Stripe 2 am GPIO16 angeschlossen
#define rgbStripe1 16

//Taster 2 am GPIO27 angeschlossen
#define button2 27
//RGB Stripe 2 am GPIO17 angeschlossen
#define rgbStripe2 17

//Bounce2 Objekte initialisieren für die Taster
Bounce btn1 = Bounce();
Bounce btn2 = Bounce();

//Anzahl der NeoPixel pro Modul / Stripe
const int NUM_PIXEL = 8;

//Initialisieren der Adafruit_NeoPixel Objekte
//für jeden Stripe wird ein Objekt benötigt.
Adafruit_NeoPixel pixelStripe1 = Adafruit_NeoPixel(NUM_PIXEL, rgbStripe1, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel pixelStripe2 = Adafruit_NeoPixel(NUM_PIXEL, rgbStripe2, NEO_GRB + NEO_KHZ800);

//Farben für aktiviert / deaktiviert definieren
const uint32_t COLOR_ACTIVE = pixelStripe1.Color(255, 255, 255);
const uint32_t COLOR_DEACTIVE = pixelStripe1.Color(0, 0, 0);

//Felder zum speichern der Zustände der RGB Stripe
bool stripe1Active = false;
bool stripe2Active = false;

void setup() {
  //Einrichten des ersten Tasters
  btn1.attach(button1, INPUT_PULLUP);
  btn1.interval(25);

  //Einrichten des zweiten Tasters
  btn2.attach(button2, INPUT_PULLUP);
  btn2.interval(25);

  //Beginn der kommunikation mit den RGB Stripes
  pixelStripe1.begin();
  pixelStripe2.begin();
}

/**
* Befüllen eines RGB Stripes mit einer Farbe je nach Status
**/
void setPixelStripe(Adafruit_NeoPixel pixelStripe, bool isActive) {
  if (isActive) {
    pixelStripe.fill(COLOR_ACTIVE, 0, NUM_PIXEL);
  } else {
    pixelStripe.fill(COLOR_DEACTIVE, 0, NUM_PIXEL);
  }
  pixelStripe.show();
}

void loop() {
  //aktualisieren der Bounce2 Objekte
  btn1.update();
  btn2.update();

  //Wenn die Taste betätigt wird, dann...
  if (btn1.fell()) {
    //umkehren des zuvor gespeicherten Status
    stripe1Active = !stripe1Active;
    //aktualisieren des RGB Stripes
    setPixelStripe(pixelStripe1, stripe1Active);
  }

  if (btn2.fell()) {
    stripe2Active = !stripe2Active;
    setPixelStripe(pixelStripe2, stripe2Active);
  }
}

Wenn du den Code auf deinen ESP32 aufspielst, dann kannst du mit jedem Taster jeweils die eine RGB Stripe aktivieren & deaktivieren.

Den Code findest du nachfolgend einfach als ZIP-Datei zum Download.

ESP32 – zwei RGB Stripes & zwei Taster – Beispiel 1Herunterladen

Blinken eines RGB Stripes per Taster

Im zweiten Beispiel möchte ich per Taster ein RGB Stripe zum Blinken bringen. Jedoch bin ich dabei auf einen Fehler gestoßen.

CORRUPT HEAP: Bad head at 0x3ffb7f0c. Expected 0xabba1234 got 0x3ffb7ff0
abort() was called at PC 0x400838a5 on core 1

Etwas Googeln hat hier ergeben, dass dieser Fehler wohl auftritt, wenn ein Speicherbereich überschrieben wird, was nicht sein darf.

Die Analyse hat ergeben, dass der Code deutlich eingekürzt werden muss, zusätzlich musste ich dann noch die Schaltung etwas anpassen, denn wir benötigen nun nur noch eine Instanz vom Adafruit Neopixel Objekt.

Programmieren des Blinkens von zwei RGB Stripes mit zwei Taster

Nachfolgend jetzt das erweiterte Programm, wo nur eine Instanz des Adafruit Neopixel Objektes benötigt wird.

//Bibliothek zum steuern der NeoPixel am Mikrocontroller
#include <Adafruit_NeoPixel.h>

//Bibliothek zum entprellen der Taster
#include <Bounce2.h>

//Taster 1 am GPIO13 angeschlossen
#define button1 13
//RGB Stripe 2 am GPIO16 angeschlossen
#define rgbStripe1 16

//Taster 2 am GPIO27 angeschlossen
#define button2 27

//Bounce2 Objekte initialisieren für die Taster
Bounce btn1 = Bounce();
Bounce btn2 = Bounce();

const int PUSH_INTERVAL = 25;

//Anzahl der NeoPixel pro Modul / Stripe
const int NUM_PIXEL = 16;

//Initialisieren der Adafruit_NeoPixel Objekte
//für jeden Stripe wird ein Objekt benötigt.
Adafruit_NeoPixel pixelStripe = Adafruit_NeoPixel(NUM_PIXEL, rgbStripe1, NEO_GRB + NEO_KHZ800);

//Wie oft die RGB Stripe blinken soll,
//dabei zählt jeweil einmal AN und einmal AUS als zwei Schritte.
//Möchtest du also das die RGB Stripes 10 mit pause aufleuchten so
//musst du den Wert mal zwei nehmen.
const int COUNT_BLINK = 5;
const int BLINK_PAUSE = 250;

void setup() {
  Serial.begin(115200);

  //Einrichten des ersten Tasters
  btn1.attach(button1, INPUT_PULLUP);
  btn1.interval(PUSH_INTERVAL);

  //Einrichten des zweiten Tasters
  btn2.attach(button2, INPUT_PULLUP);
  btn2.interval(PUSH_INTERVAL);

  //Beginn der kommunikation mit den RGB Stripes
  pixelStripe.begin();
}

/**
* Funktion um ein RGB Stripe zum blinken zu bringen.
* Die RGB Stripes sind jeweils hintereinander gekoppelt.
* Die erste RGB Stripe beginnt von 0 und endet bei 7,
* die zweite RGB Stripe beginnt bei 8 und ende bei 16.
**/
void blinkRgbStripe(int from, int to) {
  //Schleife von 0 bis Wert COUNT_BLINK
  for (int i = 0; i < COUNT_BLINK; i++) {
    //Wenn die Teilung der Schleifenvariable i durch 2 keinen Rest
    //ergibt dann...
    if (i % 2 == 0) {
      pixelStripe.fill((255, 255, 255), from, to);
    } else {
      pixelStripe.clear();
    }
    pixelStripe.show();
    //eine kleine Pause
    delay(BLINK_PAUSE);
  }
  //zum schluss löschen der Pixel
  pixelStripe.clear();
  pixelStripe.show();
}

void loop() {
  //aktualisieren der Bounce2 Objekte
  btn1.update();
  btn2.update();

  //Wenn die Taste betätigt wird, dann...
  if (btn1.fell()) {
    blinkRgbStripe(0, 7);
  }

  if (btn2.fell()) {
    blinkRgbStripe(8, 16);
  }
}

Wenn du den Code auf deinen Mikrocontroller hochlädst, dann kannst du mit den beiden Tastern jeweils die eine oder die andere RGB Stripe zum Blinken bringen.

Den Code kannst du dir wieder hier bequem als ZIP-Datei herunterladen.

ESP32 – zwei RGB Stripes & zwei Taster – Beispiel 2, blinkenHerunterladen

3 thoughts on “ESP32 steuern von 2 RGB Stripes mit Taster”

  1. Markus sagt:
    2. Mai 2023 um 05:45 Uhr

    Hallo Stefan,
    super Danke für die Umsetzung und Hilfestellung.

    Grüße Markus

    Antworten
  2. Franz Weber sagt:
    21. Juni 2023 um 07:45 Uhr

    Hallo Stefan,
    ich bin ein absoluter Nullinger in Sachen Elektronik. Mir ist bei deinen Schaltkreisen aufgefallen, dass ein schwarzes Kabel (rechts von GPIO13) auf die Plusleitung gelegt worden ist.
    Für mich als Nullinger ist dies sehr irritierend. Warum hast du kein rotes Kabel verwendet ?
    Oder handelt es sich hierbei um einen Fehler in der Abbildung ?

    LG
    FW

    Antworten
    1. Stefan Draeger sagt:
      21. Juni 2023 um 10:35 Uhr

      Hi,

      sorry für die Verwirrung, ja, das schwarze Kabel gehört eine Reihe nach oben. Ich habe die Grafiken nun angepasst.

      Gruß, Stefan

      Antworten

Schreibe einen Kommentar Antworten abbrechen

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

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen

Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}