Go Down

Topic: ESP32 WS2812B fehlerhafte Ausgabe (Read 593 times) previous topic - next topic

octarock

@agmue danke für die Erklärung wenn ich wieder was mit LEDs programmieren sollte werde ich es mit FastLED machen nur andere LEDs zu verbauen wird bei mir wie gesagt eher schwierig.
Und OTA wird bei mir auch nicht klappen habe nämlich kein WLAN am PC xD, aber cool danke für den Sketch wenn ich mir mal ne WLAN-Karte kaufe werde ich das ausprobieren ;)

@Tommy56 ah achso jetzt glaube hab ichs, oder?


agmue

#16
Sep 21, 2020, 10:45 am Last Edit: Sep 21, 2020, 12:33 pm by agmue
Meine Tests zu diesem Thema habe ich mit APA-106-F5 (siehe mein Avatar) und WS2815 (12 V Versorgungsspannung) durchgeführt. Beide Typen zeigen Flackern in der Animation. Daher vermute ich, die Diode wird keine relevante Verbesserung bringen. Aber ich irre mich gerne und warte gespannt auf das Ergebnis ;D

Die Begründung für meine Skepsis habe ich verlinkt.

Und OTA wird bei mir auch nicht klappen habe nämlich kein WLAN am PC xD ...
Wäre denn ein Router mit WLAN in der Nähe? Damit geht es auch.

... wenn ich wieder was mit LEDs programmieren sollte werde ich es mit FastLED machen ...
Eine Demo ohne Flackern von Mark Kriegsman mit FastLED und OTA:

Code: [Select]
//#define DEBUGGING             // Auskommentieren wenn keine Serielle Ausgabe erforderlich ist

#ifdef DEBUGGING
#define DEBUG(...) Serial.println(__VA_ARGS__)
#define DEBUG_F(...) Serial.printf("Funktion: %s meldet in Zeile: %d -> ", __PRETTY_FUNCTION__, __LINE__); Serial.println(__VA_ARGS__)
#else
#define DEBUG(...)
#define DEBUG_F(...)
#endif
#include <ArduinoOTA.h>
#include <FastLED.h>

FASTLED_USING_NAMESPACE

// FastLED "100-lines-of-code" demo reel, showing just a few
// of the kinds of animation patterns you can quickly and easily
// compose using FastLED.  
//
// This example also shows one easy way to define multiple
// animations patterns and have them automatically rotate.
//
// -Mark Kriegsman, December 2014

#define DATA_PIN    12
//#define CLK_PIN   14
#define LED_TYPE    WS2812B
#define COLOR_ORDER GRB
#define NUM_LEDS     65
CRGB leds[NUM_LEDS];

#define BRIGHTNESS         100
#define FRAMES_PER_SECOND  120

void setup() {
  delay(3000); // 3 second delay for recovery
  Serial.begin(115200);
  DEBUG_F("\nSketchname: %s\nBuild: %s\t\tIDE: %d.%d.%d\n\n", __FILE__, __TIMESTAMP__, ARDUINO / 10000, ARDUINO % 10000 / 100, ARDUINO % 100 / 10 ? ARDUINO % 100 : ARDUINO % 10);
  const char *ssid = "Esp32AP";             // << kann bis zu 32 Zeichen haben
  const char *password = "12345678";        // << mindestens 8 Zeichen jedoch nicht länger als 64 Zeichen
  WiFi.mode(WIFI_AP);
  if (WiFi.softAP(ssid, password)) {
    DEBUG_F("Verbinde dich mit dem Netzwerk \"%s\"\nGib die IP %s im Browser ein\n\n", ssid, WiFi.softAPIP().toString().c_str());
    DEBUG_F("Hostname des AP = %s\n", WiFi.softAPgetHostname());
    DEBUG("Mac Adresse des AP = " + WiFi.softAPmacAddress());
    DEBUG("Broadcast IP des AP = " + WiFi.softAPBroadcastIP().toString());
  } else {
    DEBUG("Fehler beim Erstellen.");
  }
  ArduinoOTA.begin();
  
  // tell FastLED about the LED strip configuration
  FastLED.addLeds<LED_TYPE,DATA_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
  //FastLED.addLeds<LED_TYPE,DATA_PIN,CLK_PIN,COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);

  // set master brightness control
  FastLED.setBrightness(BRIGHTNESS);
}


// List of patterns to cycle through.  Each is defined as a separate function below.
typedef void (*SimplePatternList[])();
SimplePatternList gPatterns = { rainbow, rainbowWithGlitter, confetti, sinelon, juggle, bpm };

uint8_t gCurrentPatternNumber = 0; // Index number of which pattern is current
uint8_t gHue = 0; // rotating "base color" used by many of the patterns
  
void loop()
{
  ArduinoOTA.handle();
  // Call the current pattern function once, updating the 'leds' array
  gPatterns[gCurrentPatternNumber]();

  // send the 'leds' array out to the actual LED strip
  FastLED.show();  
  // insert a delay to keep the framerate modest
  FastLED.delay(1000/FRAMES_PER_SECOND);

  // do some periodic updates
  EVERY_N_MILLISECONDS( 20 ) { gHue++; } // slowly cycle the "base color" through the rainbow
  EVERY_N_SECONDS( 10 ) { nextPattern(); } // change patterns periodically
}

#define ARRAY_SIZE(A) (sizeof(A) / sizeof((A)[0]))

void nextPattern()
{
  // add one to the current pattern number, and wrap around at the end
  gCurrentPatternNumber = (gCurrentPatternNumber + 1) % ARRAY_SIZE( gPatterns);
}

void rainbow()
{
  // FastLED's built-in rainbow generator
  fill_rainbow( leds, NUM_LEDS, gHue, 7);
}

void rainbowWithGlitter()
{
  // built-in FastLED rainbow, plus some random sparkly glitter
  rainbow();
  addGlitter(80);
}

void addGlitter( fract8 chanceOfGlitter)
{
  if( random8() < chanceOfGlitter) {
    leds[ random16(NUM_LEDS) ] += CRGB::White;
  }
}

void confetti()
{
  // random colored speckles that blink in and fade smoothly
  fadeToBlackBy( leds, NUM_LEDS, 10);
  int pos = random16(NUM_LEDS);
  leds[pos] += CHSV( gHue + random8(64), 200, 255);
}

void sinelon()
{
  // a colored dot sweeping back and forth, with fading trails
  fadeToBlackBy( leds, NUM_LEDS, 20);
  int pos = beatsin16( 13, 0, NUM_LEDS-1 );
  leds[pos] += CHSV( gHue, 255, 192);
}

void bpm()
{
  // colored stripes pulsing at a defined Beats-Per-Minute (BPM)
  uint8_t BeatsPerMinute = 62;
  CRGBPalette16 palette = PartyColors_p;
  uint8_t beat = beatsin8( BeatsPerMinute, 64, 255);
  for( int i = 0; i < NUM_LEDS; i++) { //9948
    leds[i] = ColorFromPalette(palette, gHue+(i*2), beat-gHue+(i*10));
  }
}

void juggle() {
  // eight colored dots, weaving in and out of sync with each other
  fadeToBlackBy( leds, NUM_LEDS, 20);
  byte dothue = 0;
  for( int i = 0; i < 8; i++) {
    leds[beatsin16( i+7, 0, NUM_LEDS-1 )] |= CHSV(dothue, 200, 255);
    dothue += 32;
  }
}
 

Die Warnungen sind unschön, scheinen aber keinen negativen Einfluß zu haben :smiley-sad:

Ein Beispiel mit FastLED und zwei LED-Streifen:

Code: [Select]
#include <ArduinoOTA.h>
#include <FastLED.h>

FASTLED_USING_NAMESPACE

#define DATA_PIN_1  14
#define DATA_PIN_2  12
#define LED_TYPE    WS2812B
#define COLOR_ORDER RGB
#define NUM_LEDS    65
CRGB leds_1[NUM_LEDS];
CRGB leds_2[NUM_LEDS];

void setup() {
  delay(3000); // 3 second delay for recovery
  WiFi.mode(WIFI_AP);
  WiFi.softAP("Esp32AP", "12345678");  // ssid, password
  ArduinoOTA.begin();

  FastLED.addLeds<LED_TYPE, DATA_PIN_1, COLOR_ORDER>(leds_1, NUM_LEDS);
  FastLED.addLeds<LED_TYPE, DATA_PIN_2, COLOR_ORDER>(leds_2, NUM_LEDS);
}

void loop() {
  ArduinoOTA.handle();
  EVERY_N_MILLISECONDS( 20 ) {
    sinelon();
    FastLED.show();
  }
}

void sinelon() {
  fadeToBlackBy( leds_1, NUM_LEDS, 80);
  fadeToBlackBy( leds_2, NUM_LEDS, 80);
  int pos = beatsin16( 13, 0, NUM_LEDS - 1 );
  leds_1[pos] += CHSV( 0, 255, 192);    // Rot
  leds_2[pos] += CHSV( 160, 255, 192);  // Blau
}


Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

octarock

#17
Sep 21, 2020, 12:57 pm Last Edit: Sep 21, 2020, 01:03 pm by octarock
Ähm ich würde jetzt nur ungern meinen ganzen Tisch zerlegen um etwas einzubauen was dann nicht zwingend funktioniert... Könnte ich eigentlich auch einen StepDown einbauen und so eine Spannung von 4,7 erreichen? (wäre für mich deutlich einfacher da ich das einfach noch im PC machen könnte und sowas habe ich auch rum fliegen)
Danke für die Sketches probiere ich gleich mal aus und wenn auch ein anderes Wlan geht müsste OTA auch funktionieren
Wie funktioniert das dann eigentlich mit OTA also wenn ich das Sketch hochgeladen habe was muss ich in Arduino IDE einstellen um dannach uber OTA Sketches hochzuladen?

agmue

#18
Sep 21, 2020, 01:18 pm Last Edit: Sep 21, 2020, 01:19 pm by agmue
Könnte ich eigentlich auch einen StepDown einbauen und so eine Spannung von 4,7 erreichen?
Wenn der genügend Strom liefern kann, ja. Da sind dann die Widerstände an DIN wichtig!

was muss ich in Arduino IDE einstellen um dannach uber OTA Sketches hochzuladen?
Sieht bei mir so aus:



Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

octarock

ja für den Anfang zum ausprobiern, sollte der StepDown schon reichen, aber ok werden dann schon ne Diode brauchen. Und Wiederstände am Din habe ich schon :)
Ähhmm bei mir sieht das nicht so aus xD ich vermute mal weil du im Hotspot des ESP32 bist oder? Bei mir kann ich nur die normalen USB-Ports auswählen.
Ich habe gerade dein Sketch mit den zwei LED-Strips ausprobiert und da läuft jetzt das linke aber das rechte zuckt nur etwas und in beiden treten Feler auf, zumindest aber lange nicht so schlimm wie bei der alten Bibliotek.
Würde sich das Problem dann mit einer Diode lösen lassen?
Und wieso geht eigentlich mein Sketck, wenn ich es auf einen ESP8266 lade aber nicht wenn ich es auf den ESP32 lade?

agmue

Ähhmm bei mir sieht das nicht so aus xD ich vermute mal weil du im Hotspot des ESP32 bist oder?
Erst nach Anmeldung von Win10 am AP des ESP32 erkennt die IDE die Verbindung. Den USB-Port sieht man ja auch nur, wenn er verbunden ist :)

Mit dem ESP8266 habe ich mich nicht mehr beschäftigt, sondern vor Kurzem gleich mit dem ESP32 gestartet. Meine Gehirnkapazität ist beschränkt.

Auch die WS2812B habe ich als Fehlkauf an einen ProMini zur Animation der Kellerbar gehängt. Das selbe Schicksal wird den WS2815 widerfahren, sobald es die mit Takt und Daten getrennt gibt. Der fC wird die schon noch irgendwann auf den Markt bringen.

Wenn Du die 5,3 V verringern möchtest, warum nicht eine einfache Diode anstelle StepDown verwenden, auch für den ganzen Streifen. Hast Du einen Kondensator nahe am Streifen verwendet?

Da sich die LED-Streifen von unterschiedlichen Herstellern unterscheiden können, hilft nur Probieren.

Warum verwendest Du den Nano eigentlich nicht weiter? Ohne WLAN macht der ESPxx eigentlich doch keinen Sinn, oder?

Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

octarock

ja aber ich kann mich ja nicht mit den Wlan des ESp verbinden habe ja keine Wlan-Karte im PC...

Ich mach das jetzt mit den Dioden, fahre gleich noch zum Conrad und probiere es damit dann aus.
Und ne nen Kondensator habe ich nicht, ich dachte das braucht man nicht bei modernen Netzteilen und meins ist von BeQiuet von 2019. Wieso wäre das überhaupt wichtig?

Und ich vernwende den nano nicht weiter, weil ich die Beleuchtung zukünftig über ein Webinterface steuern möchte und dafür brauch ich nunmal nen Wlan und den ESP32 habe ich schon festverbaut im PC.

agmue

... den ESP32 habe ich schon festverbaut im PC.
Wie geht das denn?

Und ne nen Kondensator habe ich nicht, ich dachte das braucht man nicht bei modernen Netzteilen ...
Gedanklich sind Leitungen für Dich nicht existent, also unendlich kurz.

Reale Leitungen haben Induktivitäten, Kapazitäten und ohmsche Widerstände, die sich manchmal dem Stromhunger von ICs mit PWM-Ansteuerung von LEDs entgegensetzen. Daher können scheinbar überflüssige Bauteile machmal wahre Wunder bewirken. Aber das ist ein sehr weites Feld.

Daher liebe ich meine Bastelkiste, aus der ich einen Elektrolyt-Kondensator von 470 µF zaubern könnte, um dessen Wirkung mal zu probieren. Auch Conrad hat 100 bis 1000 µF 16 V für Dich im Angebot.

Wenn es nichts bringt, freut sich Deine Bastelkiste :D

Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

octarock

Wie man seinen ESP32 fest verbaut? 3D Drucker, Plexigals, Schrauben und Kabel ;)

Ok ja dann nehme ich noch Kondensatoren mit, welche empfiehlst du und wie muss ich die dann verlöten?

octarock

ich hab jetzt alles verlötet und dennoch nix geht  :smiley-cry:
Das Beispielprogram, welches auf FastLED basiert funktioniert jetzt bein beiden aber immer noch mit Fehlern, und mein eigentliches Program spielt noch genauso verrückt wie zuvor und wie zuvor beim ESP8266 geht alles, ich weiß echt nicht mehr weiter

agmue

Wie man seinen ESP32 fest verbaut? 3D Drucker, Plexigals, Schrauben und Kabel ;)
Das kann ich mir immer noch nicht vorstellen :smiley-confuse:

Es geht beispielsweise um Kabellängen, nicht um die Farbe des Gehäuses ;)

ich hab jetzt alles verlötet und dennoch nix geht  :smiley-cry:
Das Beispielprogram, welches auf FastLED basiert funktioniert jetzt bein beiden aber immer noch mit Fehlern, und mein eigentliches Program spielt noch genauso verrückt wie zuvor und wie zuvor beim ESP8266 geht alles, ich weiß echt nicht mehr weiter
Das ist wirr geschrieben, was geht, was geht nicht?

Ich verwende Levelshifter 74LS245, Du auch?

Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

octarock

#26
Sep 23, 2020, 01:56 am Last Edit: Sep 23, 2020, 02:49 am by octarock
ich habe egal bei welchen Skripten, immer noch Fehler. Bei Sketchen mit FastLED funktioniert es nur manchmal ohne Fehler und dann auch nicht für sehr lange bis wieder durchgehend Fehler auftreten, also eine Verbesserung aber auch keine große. Mein eigentliches Sketch auf Adafruit_NeoPixel-Basis geht immer noch garnicht :(, ich werde jetzt mal einen StepDown ausprobieren.
Un ne ich nutze keinen Levelshifter wie du.
Die Kabellängen belaufen sich auf ca. 1-2 Meter pro Strip, und mir ist aufgefallen, dass der ESP32 vergleichsweise warm wird, wenn ich ein Sketch mit FastLED drauf spiele

agmue

Un ne ich nutze keinen Levelshifter wie du.
Das kann ein Problem sein, da Du die LEDs außerhalb der Spezifikation betreibst.

Die Kabellängen belaufen sich auf ca. 1-2 Meter pro Strip, ...
Auch das kann ein Problem sein.

... und mir ist aufgefallen, dass der ESP32 vergleichsweise warm wird, wenn ich ein Sketch mit FastLED drauf spiele
Wenn der ESP32 sendet, braucht das schon etwas Energie. Solange Du Dir nicht die Finger verbrennst, sollte das OK sein.

Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

octarock

#28
Sep 23, 2020, 11:02 pm Last Edit: Sep 23, 2020, 11:06 pm by octarock
Das Demoprogramm von FastLED läuft jetzt auf beiden und das schon seit 2h ohne Fehler, fingers crossed.
Der ESP32 wurde zwar nie wärmere als 34°C aber ich habe jetzt dennoch zwei Heatspreader auf die Vorder- und Rückseite geklebt, weil der Sketch immer erst nach ca.30min auf dem linken Strip zu Fehlern geführt hat, wenn ich dann aber das Board neustarte, traten die Fehler sofort wieder auf. Wenn ich den ESP, aber vorm Reset abkühlen lassen, hat er dann wieder für eine halbe Stunde funktioniert. Und jetzt mit Kühlung scheint es ja zu funktionieren!?
Kann das wirklich das Problem sein? Das der ESP32 um 7°C zu warm wird (aktuell bei 27°C)? Kann sich das jemand erklären?

agmue

Kann sich das jemand erklären?
Elektronik ist immer temperaturabhängig. Irgendwo bist Du außerhalb der Spezifikation, was bei niedrigen Temperaturen gerade so funktioniert, bei wärmeren dann gerade nicht mehr. Bei mir wäre jetzt das Kältespray im Einsatz, dann hätte ich Gewißheit.

Die Vorstellungskraft ist wichtiger als Wissen, denn Wissen ist begrenzt. (Albert Einstein)

Go Up