Ansteuern von WS2812b mit Espressif ESP32

Hallo zusammen,

Ich programmiere nun schon seit einigen Jahren WS2812b LED Streifen. Mit der Zeit werden die Projekte größer und die Codes aufwändiger.
Aktuell habe ich ein Projekt mit einer großen Matrix (38x48 LEDs), und realistischen Feuereffekt, welcher meinem ESP8266 leider zu viel wurde.

Stattdessen bin ich auf einen ESP32 umgestiegen (Espressif ESP32 WLAN Dev Kit Board Development Bluetooth Wifi v1 WROOM32 NodeMCU – MAKERSHOP.DE) . Leider schaffe ich es nicht, diesen zur Ausgabe von einfachen Bespielcodes für die LEDs zu motivieren. Am Pin Ausgang messe ich mit meinem Oszilloskop nur das Netzrauschen von 50Hz.
Als Boardtyp habe ich das ESP32 Dev Module aus dem Espressif Boardverwalter ausgewählt.
Ich nutze Pin 4, wie ich in einem Guide im Netz gelesen habe. Dieser spricht auch auf digitalWrite Befehle an, welche ich auch messen kann.

Der Beispielcode läuft ohne Einschränkungen auf meinem ESP8266 (mit Levelshifter auf 5V).

Ich freue mich sehr über Hilfe, da weder ChatGPT, noch andere Forenbeiträge mir bisher helfen konnten.

Gute Wahl! Ich habe mehrere ESP32 mit LED-Streifen (WS2812, WS2815, APA102) laufen, grundsätzlich geht das also :slightly_smiling_face:

Schmeiß mal des Testprogramm in die Runde, damit wir auf den selben Code sehen :wink:

Danke schon mal für deine schnelle Antwort. Ich habe ein bisschen Resteverwertung betrieben und musste daher für die ersten Spalten einen Weißabgleich machen. Diesen Code habe ich auch zum testen verwendet.

#include <Adafruit_NeoPixel.h>

#define PIN 4                   // Pin, an dem die WS2812B angeschlossen ist
#define NUM_LEDS (5 * 48)         // Anzahl der LEDs insgesamt
#define STANDARD_BRIGHTNESS 72  // Die Helligkeit für Spalten (72,72,72)

Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);

void setup() {
  pinMode(PIN, OUTPUT);
  strip.begin();
  strip.show();  // Setzt alle LEDs auf "aus" zu Beginn
}

void loop() {
  // Hier stellst du die Helligkeit für die Spalten 4-38 (dunklere LEDs) ein
  setColumnBrightness(3, STANDARD_BRIGHTNESS, STANDARD_BRIGHTNESS, STANDARD_BRIGHTNESS);  // Setze für Spalte 4-38 (Index 3) die Helligkeit auf 72,72,72
  setColumnBrightness(4, STANDARD_BRIGHTNESS, STANDARD_BRIGHTNESS, STANDARD_BRIGHTNESS);  // Setze für Spalte 4-38 (Index 3) die Helligkeit auf 72,72,72

  // Teste nun die ersten drei Spalten mit verschiedenen Helligkeitswerten
  setColumnBrightness(0, 20, 20, 20);  // Spalte 1 (erste Spalte)
  setColumnBrightness(1, 35, 30, 30);  // Spalte 2 (zweite Spalte)
  setColumnBrightness(2, 48, 36, 42);  // Spalte 3 (dritte Spalte)
  strip.show();                        // Zeige die Änderungen an
  delay(50);
}

void setColumnBrightness(int columnIndex, int rot, int gruen, int blau) {
  // Die Spalten werden vertikal adressiert, also müssen wir die LEDs von unten nach oben ansteuern
  for (int i = columnIndex * 48; i < (columnIndex + 1) * 48; i++) {
    strip.setPixelColor(i, strip.Color(rot, gruen, blau));  // Setze den Farbwert (RGB)
  }
}
```

Sorry ich bin neu hier, ist es üblich bei Antworten zu zitieren?

Ja, dann weiß ich, worauf Du Dich beziehst. Außerem erhalte ich rechts oben beim Avatar eine Markierung, daß mir jemand geantwortet hat.

Die bekomme ich aber auch, wenn Du unter meinem Beitrag auf "Antworten" klickst oder mich zitierst.

wenn es mehrdeutig ist worauf sich die Antwort beziehen kann dann ja.

#define NUM_LEDS (5 * 48)

bei einigen ESP32 Cores gab es ein Problem mit mehr als 72 Pixel.
Probiers mal mit einem 2.x.x Core.

Der funktioniert bei mir, die Pixel werden weiß. Etwas abgeändert auch rot-grün-blau-weiß:

  setColumnBrightness(0, 20, 0, 0);  // Spalte 1 (erste Spalte)
  setColumnBrightness(1, 0, 30, 0);  // Spalte 2 (zweite Spalte)
  setColumnBrightness(2, 0, 0, 42);  // Spalte 3 (dritte Spalte)

Der Fehler liegt also nicht im Programm :slightly_smiling_face:

Vielen Dank, das bringt mich ein gutes Stück weiter.
Ich habe es gerade mit 48 LEDs probiert. Plötzlich funktioniert es super. Gibt es da einen work-around oder muss ich mir andere Controller bestellen, wenn ich alle 38 Streifen steuern möchte?

Liebe Grüße

Ich nutze den 2.0.18 welche die aktuellste Version sein dürfte. Weißt du von einer anderen, welche mit der Adafruit Neopixel Bibliothek besser läuft?

das ist was altes.
Das Problem trat ab der 3er auf. Schau noch mal genau was du wirklich hast.

Wer lesen kann, ist klar im Vorteil :slight_smile: ich habe den Arduino ESP32 Manager benutzt, mit der von Espressif läuft es. ChatGPT hat mir die 1.0.6 empfohlen. Mit dieser läuft sogar mein Ziel-Code auf den vollen 36*48 LEDs.

Vielen Dank, darauf wäre ich alleine nicht gekommen.

Wenn noch jemand zufällig weiß, wie man es schafft, dass ich mich per BT mit dem Controller verbinden kann und pixels.show() dennoch ausführen kann, bin ich restlos glücklich.