ESP32 und WS2812B

OP #6490994
Lesenswert?

Hallo

Ich versuche mit dem ESP32 WS2812b LEDs anzusteuern. Ich habe mich schon 
etwas informiert und gesehen das es dabei öfters Probleme gibt. Jedoch 
habe ich keine Lösung für mein Problem gefunden.

Problem: Die LEDs lassen sich grundsätzlich mit dem ESP32 ansteuern 
jedoch will die erste LED in der Reihe nicht so richtig. Ich habe gesamt 
20LEDs angeschlossen.

Wenn ich eine FOR programmiere und alle nacheinander einschalte dann 
leuchtet die erste LED immer in einer anderen Farbe. Ich habe es auch 
schon mit mehreren LEDs getestet (Da ich mehrere Segmente habe) (Die 
beiden im Video sind die beiden der neuesten Generation (Reihenfolge 
egal). Ich habe es allerdings auch schon mit den anderen LEDs getestet.
Ich verwende die FastLED lib da ich mit der Adafruit kein Glück gehabt 
habe.

Code Video:
1
#include <FastLED.h>
2

3
#define NUM_LEDS 20
4

5
#define DATA_PIN 2
6
CRGB leds[NUM_LEDS];
7

8
void setup() 
9
{
10
  FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS); 
11
}
12

13
void loop() 
14
{
15
  for(int i = 0; i <20; i++)
16
  {
17
    leds[i] = CRGB::Red;
18
    FastLED.show();
19
    delay(50);
20
  }
21
  delay(50);
22
  for(int i = 0; i <20; i++)
23
  {
24
    leds[i] = CRGB::Black;
25
    FastLED.show();
26
    delay(50);
27
  }
28
}

Wenn ich zum testen mal nur die erste [0] und die vorletzte [18] 
anschalte dann gibt sich ein komisches verhalten. Wenn ich mache:

leds[0] = CRGB::Red;
leds[18] = CRGB::Red;

dann leuchtet wie im angehängten Bild die Erste in einer anderen Farbe 
und die Vorletzte. Wenn ich mache:

leds[0] = CRGB::Blue;
leds[18] = CRGB::Blue;

Dann leuchtet die zweite und die letzte LED (beide Rot).
Das die Farben nicht mit den Codefarben übereinstimmen ist mir bewusst 
und es ist für mich kein Problem (es ist einfach die Reihenfolge von RGB 
anders)

Mit anderen Farben ergibt sich zum Teil ein noch komischeres Verhalten.

leds[0] = CRGB( 50, 100, 150);
leds[18] = CRGB( 50, 100, 150);

Leuchten dann gleich 4LEds in verschiedenen Farben. (Siehe Bild)

Code Bild:
1
#include <FastLED.h>
2
#define NUM_LEDS 20
3

4
#define DATA_PIN 2
5
CRGB leds[NUM_LEDS];
6

7
void setup() 
8
{
9
  FastLED.addLeds<WS2812B, DATA_PIN, RGB>(leds, NUM_LEDS); 
10
  leds[0] = CRGB::Red;
11
  leds[18] = CRGB::Red;
12
  FastLED.show();
13
}
14

15
void loop() 
16
{
17
 
18
}

Hat jemand eventuell eine Idee?
Angehängte Dateien:
#6491012
Lesenswert?

Hallo,

es gibt über die Zeit intern verschiedenen Versionen der WS2812.
Ich habe auch einen Stripe, der mit dem 3,3V Pegel des ESP32 nicht 
klarkommt.
Also Pegelwandler auf 5V dazwischen.
Auch daran denken, daß der Zustand ESP32 Spannung ist da, 5V für die LED 
aber nicht gern zum Ausfall der ersten LED führt, weil dann über Din und 
die Schutzdioden der Stripe mit dem H-Pegel versorgt werden würde. Dafür 
haben die Schutzdioden und u.U. auch der IO des ESP32 wenig Verständnis.
330 Ohm in Reihe begrenzen den Strom und verhindern das.

Gruß aus Berlin
Michael
OP #6491062
Lesenswert?

Vielen Dank für die schnelle Antwort!

Ich habe nun das Signal mit einem 4Kanal Logic Level Converter auf 5V 
angehoben und das dürfte nun anscheinend alle Probleme behoben haben.

Allerdings kann man den ESP nicht programmieren wenn er an Logic Level 
angeschlossen ist. Mann muss die 3,3V rausziehen bevor man ihn 
Programmieren kann.
Ich habe auch gerade probiert den ESP mittels externen 5V zu versorgen. 
Jedoch funktioniert dies leider nicht. Das Programm starten und die 
ersten 5LEDs leuchten jedoch hängt sich dann der ESP auf und die LED auf 
dem ESP blinkt nur noch. Wenn ich alles über USB betreibe ist es kein 
Problem. Hier geht es aber auch nur wenn ich nicht den GND neben den 5V 
Input benutze.
OP #6491140
Lesenswert?

Ich habe nun nochmal alles neu aufgebaut und getestet. Das mit dem 
Programmieren habe ich leider immer noch. Ist aber jetzt nicht das 
größte Problem. Das mit der externen Versorgung glaube ich habe ich auch 
herausgefunden. Der auf den Pin steht zwar 5V allerdings braucht der ESP 
mehr als 5V ich habe es mal getestet und ab ca. 5,6V hat er 
funktioniert. Die Frage ob die LEDs das aushalten? Laut den Datasheet 
halten die nur 5,3V aus. Sonst muss ich noch extra eine zweite Spannung 
erzeugen. Oder ich nehme ein USB kabel und schneide den einen Stecker ab 
und powere ihn so.
Gast #6491153
Lesenswert?

Es gibt ein paar Pins, die der ESP einliest, wenn er aus dem Reset 
kommt, und anhand derer er entscheidet, was er macht. Vielleicht hast Du 
einen davon erwischt, so dass statt dem seriellen Bootloader etwas 
anderes ausgewählt wird. GPIO2 war wenn ich mich recht erinnere so 
einer.

Das ist vermutlich nur mal ein schnell zur Fehlersuche hingetipptes 
Programm, oder ?
Sonst wäre es ja schade, wenn Du Dein schönes Define NUM_LEDS nicht auch 
in den Abbruchbedingungen der for-Schleifen nutzen würdest.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren