ESP32 WS2812B fehlerhafte Ausgabe

Hallo Community,

ich habe ein ESP32 und versuche damit ein WS2812B LED-Strip anzusteuern. Weil mein ESP32 fest verbaut ist habe ich zuvor das Sketch auf den Arduino Nano getestet. Dort läuft das Sketch super und die LED-Strips werden richtig angesteurt, aber wenn ich nun das Sketch auf den ESP32 lade werden die LED-Strips zwar angesteuert aber es passiert null was eigentlich passieren soll. Alles leuchtet Bund und es ist fast nix mehr von der eigentlichen Animation zu erkennen. Anbei das Sketch:

#include <Adafruit_NeoPixel.h>

Adafruit_NeoPixel strip1 = Adafruit_NeoPixel(65 , 14 , NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel strip2 = Adafruit_NeoPixel(65 , 12 , NEO_GRB + NEO_KHZ800);

//Helligkeit des jeweiligen Lichpuntes in der Schlange in Prozent
float Helligkeit[10]={};
//Absolute Helligkeit des ersten Lichtpunktes der Schlange
int Summe_Farbe1 = 100;
//Absolute Helligkeit des letzten Lichtpunktes der Schlange
int Summe_Farbe2 = 100;
//pysische Position der LED auf dem LED-Stip
int LEDid;
//Position der LED auf virtuellen Bereich (0-53)
int pos;
//gibt die Richtung an in die die Schlange wandert
String Richtung;

int leange;

// Speichert die Farbe für die jeweilige Stelle in der "Schlange"
// probeweise befüllt da ColorTable auskommentiert (eigentlich von dieser Funktion befüllt)
int rot[10]   = {0,    51, 77,  76, 51};     
int gruen[10] = {255, 153, 77,  26,  0};  
int blau[10]  = {255, 204,153, 102, 51};  
                                

void setup() {
  //Resetet beide Stips
  strip1.begin();
  strip1.show();
  strip2.begin();
  strip2.show(); 

  Serial.begin(115200);

  // Schlange beginnt links und soll nach rechts wandern
  pos = 0;
  Richtung = "right";
  // Schlange soll aus 5 Lichpunkten bestehen und mit Farbe1 beginnen und mit Farbe2 enden
  leange=6;
  int Farbe1[] = {0,255,255};
  int Farbe2[] = {255,0,255};

}

//////////////////////////////////////////////////////////////////////////////////

void loop() {
  MoveDot();
  delay(20);
}

//////////////////////////////////////////////////////////////////////////////////





//Schaltet LED an der angegeben Position in der Farbe an, die in "place" angegeben wird
//übersetzt die Positionen 0-53 in die LEDid des jeweiligen LED-Bands
//zudem sind zu klein/große Eingaben für die Position nicht möglich (werden nicht beachtet)
//Position von 0-53
//Laufbahn links->rechts: strip1 LEDs 18-44; strip2 LEDs 44-18
void ShowDot(int posLED, int place) {
  //entscheidet ob linkes oder rechtes LED-Band bzw. ob im gültigen Bereich
  if (posLED <= 26 && posLED >= 0){
    LEDid = posLED + 18;
    strip1.setPixelColor(LEDid, strip1.Color(rot[place],gruen[place],blau[place]));
    strip1.show();
    Serial.print("(1)LEDid: ");
    Serial.println(LEDid);
    Serial.print("(1)place: ");
    Serial.println(place);
  }
  else if (posLED >= 27 && posLED <= 53){
    LEDid = 44 - (posLED-27);
    strip2.setPixelColor(LEDid, strip2.Color(rot[place],gruen[place],blau[place]));
    strip2.show();
    Serial.print("(2)LEDid: ");
    Serial.println(LEDid);
    Serial.print("(2)place: ");
    Serial.println(place);
  }
  else{Serial.println("(1)Show: Input außerhalb des Bereiches");}
}

//schaltet LED an angegebener Position aus
//Falsche Positionen (<0 || >53) werden nicht beachtet
//nötig, da wenn Schlange eins weiter gewandert Schlangenende von vorheriger Position sonst weiterleuchten würde
void ClearDot(int posLED){
  //entscheidet ob linkes oder rechtes LED-Band bzw. ob im gültigen Bereich
  if (posLED <= 26 && posLED >= 0){
    LEDid = posLED + 18;
    strip1.setPixelColor(LEDid, strip1.Color(0,0,0));
    strip1.show();
    Serial.print(LEDid);
    Serial.println(" cleared(1)");
  }
  else if (posLED >= 27 && posLED <= 53){
    LEDid = 44 - (posLED-27);
    strip2.setPixelColor(LEDid, strip2.Color(0,0,0));
    strip2.show();
    Serial.print(LEDid);
    Serial.println(" cleared(2)");
  }
  else{Serial.println("(2)Clear: Input außerhalb des Bereiches");}
}



//Erzeugt einen Punkt mit Schwanz abhängig von der Ausrichtung
//Zeigt diese Schlange an und schaltet die LED nach Schwanzende aus 
void Dot_Strait() {
  if (Richtung == "right"){ // bewegt sich nach rechts
    for (int i=0; i<leange; i++){
      ShowDot(pos-i, i);
    }
    ClearDot(pos-leange);
  }
  else{ //bewegt sich nach links
    for (int i=0; i<leange; i++){
      ShowDot(pos+i, i);
    }
    ClearDot(pos+leange);
  }
}



//Pos und Richtung müssen in Form einer Variable, welche in Setup deklariert wurde, eingegeben werden
//läast die Schlange abhängig von der Ausrichtung wandern
void MoveDot(){
  Serial.println(Richtung);
  if (Richtung == "right"){
    //Solange Dot mit Schwanz noch im Sichtbaren immer eins nach rechts verschieben
    if (pos < 53+leange){
      Dot_Strait();
      pos += 1;
      //Schlange läuft eigentlich weiter  im ungültigen Bereich -> verschwindet allmählich
      //Rand LED immer in Farbe Place[0], sodass Schlange optisch in Punkt Zusammenläuft
      if (pos >= 54){ 
        ShowDot(53,0);
      }
    }
    //wenn in einen Punkt zusammengelaufen ändert die Richtung und Position von Startpunkt 
    //(ist vorher ja in den ungültigen Bereich weiter gelaufen)
    else{Richtung = "left"; pos = pos-leange;}
  }

  else{ //bewegt sich nach links
  //Solange Dot mit Schwanz noch im Sichtbaren immer eins nach links verschieben
    if (pos > 0-leange){ 
      Dot_Strait();
      pos -= 1;
      //Schlange läuft eigentlich weiter  im ungültigen Bereich -> verschwindet allmählich
      //Rand LED immer in Farbe Place[0], sodass Schlange optisch in Punkt Zusammenläuft
      if (pos <= -1){ 
        ShowDot(0,0);
      }
    }
    //wenn in einen Punkt zusammengelaufen ändert die Richtung und Position von Startpunkt 
    //(ist vorher ja in den ungültigen Bereich weiter gelaufen)
    else{Richtung = "right"; pos = pos+leange;}
  }   
}

Etwas wirr der Code, deshalb erkläre ich mal was er machen soll. Ich habe in meinen Tisch zwei LED-Bänder verbaut und eine Schlange (mit Farbverlauf und Helligkeitsabfall hin zum Schwanz der Schlange) soll von links nach rechts wandern. Eigentlich berechnen mehrere funktionen den Farbverlauf und so aber ich hab die alle der länge wegen gelöscht und Beispielwerte in die Arrays rot,gruen und blau gepackt. Der Code funktioniert auch auf den Nano und selbst mal probeweise auf den ESP8266 (ob der gekürzte geht kp).
Ich habe keinen Plan wieso das nun auf den ESP32 nicht geht (auch bei mein anderes ES32 ensteht das selbe Problem). Ich hoffe ihr könnt mir weiter helfen :smiley:

Gruß Octarock

Bisher habe ich keine Erfahrung mit den WS2812B am ESP32, vermute aber, es liegt an der falschen Ansteuerung.
Du nimmst 3,3 V um 5V LEDs zu steuern.

Miss mal die Spannung an den LED. Wenn die > 4,7 V ist, erreicht der ESP mit seinen 3,3V nicht die 0,7 * Vcc, die normalerweise als High erkannt wird.

Abhilfe: Levelshifter oder die 1. WS2812 über eine Diode betreiben, die deren Betriebsspannung um ca. 0,7V verringert. Diese regeneriert dann das Signal für den Rest des Stripe.

Gruß Tommy

An den LEDs liegt sogar eine Spannung von 5,3V an was mich wundert da ich die 5V-Schiene meines PCs anzapfe und das sollte ja eigentlicg genauer sein, naja kann das der Grund für die Fehler sein?

octarock:
An den LEDs liegt sogar eine Spannung von 5,3V an was mich wundert da ich die 5V-Schiene meines PCs anzapfe und das sollte ja eigentlicg genauer sein, naja kann das der Grund für die Fehler sein?

Der Grund wurde dir doch genannt.
Sogar wie du es umgehen kannst.

octarock:
Alles leuchtet Bund und es ist fast nix mehr von der eigentlichen Animation zu erkennen.

Ich sehe sowas wie eine Kometenschweif hin- und herlaufen. Ist das die gewünschte Animation?

WS2812B sind kritisch in der Ansteuerung und trotz Levelshifter (74LS245) sehe ich Störungen.

Dies habe ich gerade probiert und funktioniert bei mir: ESP32: timing error every 1ms corrupts LED pixel data

Bessere Ergebnisse liefert die Bibliothek FastLED, da bekomme ich nur Störungen durch WiFi, die ich dann durch Nutzung von OTA, also Spannung vom Netzteil, verhindere.

Wups habe mich verlesen ("<" statt “>”) ok ja dann danke für die Lösungsbeschreibung @Tommy56 ich kann nur keine Diode anlöten, weil die Strips in einen Infinity Mirror verbaut sind und das sähe dann schon blöd aus. Jetzt habe ich nur keine Idee was ein Levelshifter ist und wie man den verbaut?
@agume jap so soll das aussehen :D, aber wenn bei dir Störungen auftreten was kannst du mir empfehlen (Hardwareseitig) bzw. was ist OTA, weil das müsste ich dann machen, denn eigentlich will ich den ESP dann noch mal über das WLAN ansteuern können.

Ich bin zwar der Meinung, dass man die Diode auch geschickt anbauen kann, dass sie optisch nicht stört, schließlich musst Du auch die Zuleitungen verbauen.
Du kannst aber auch eine zusätzliche WS2812 vorschalten. Die kannst Du im Hintergrund verbauen und dann immer dunkel steuerst.

Gruß Tommy

oh das mit der LED zuvor schalten ist eine super Idee, muss ich bei der Diode auf irgendetwas achten?

Sie muss den Maximalstrom der LED (also 60 mA bei RGB) aushalten. Auch wenn sie im Normalfall dunkel ist, kann man Programmfehler nicht ausschließen und dann soll es ja nicht rauchen :wink:

Gruß Tommy

Sorry aber das verstehe ich jetzt nicht xD meinst du schon eine Diode, die nicht leutet oder was genau meinst du mit "sie im Normalfall dunkel ist" und wie muss ich die eigentlich verlöten, ich finde keine Anleitungen im Netz

Du hängst eine zusätzliche WS2812 davor.
IN über 220 Ohm an den ESP
OUT an den in der ersten WS2812 Deines Spiegels
Vcc über die Diode (Kathode an die zusätzliche Diode, Anode an Deine 5,3V) anschließen
GND mit den anderen GND verbinden

Wenn Du diese zusätzliche WS2812 nicht für andere Anzeigen nutzen willst, wird sie die Farbe 0, also nicht leuchtend bekommen. Die soll nur das Signal anpassen.

Gruß Tommy

wenn das so ist und ich es richtig verstanden habe, kann ich es dann auch so machen ?

octarock:
… was kannst du mir empfehlen (Hardwareseitig)

Anderen LED-Typ wie APA102 verwenden, da sind Takt und Daten getrennt und daher darf ein Interrupt die Übertragung unterbrechen.

Sonst eben FastLED verwenden. Siehe auch ESP32: FastLED vs. NeoPixelBus vs. NeoPixel Library

octarock:
… was ist OTA

Programmübertragung over the air anstelle USB. ESP32 als Access Point mit OTA einrichten. Das sind nur ein paar Zeilen.

Aus meiner Bastelkiste:

//#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 <Adafruit_NeoPixel.h>

#define NUM_LEDS  144 // Number of LEDs in strip
#define DATAPIN    12
//#define CLOCKPIN   14
Adafruit_NeoPixel strip(NUM_LEDS, DATAPIN, NEO_GRB + NEO_KHZ800);

void setup() {
  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();

  strip.begin(); // Initialize pins for output
  strip.show();  // Turn all LEDs off ASAP
}

void loop() {
  ArduinoOTA.handle();
  theaterChase(0xff, 0, 0, 100);
}

void theaterChase(byte red, byte green, byte blue, int SpeedDelay) {
  static uint32_t vorhin = 0;
  static uint16_t led = 0;
  if (millis() - vorhin >= SpeedDelay) {
    vorhin = millis();
    if (led < 4) {
      setPixel(0, red, green, blue);  //turn every third pixel on
    } else {
      setPixel(0, 0, 0, 0);
    }

    showStrip();

    for (uint16_t j = NUM_LEDS; j > 0; j--) {
      strip.setPixelColor(j, strip.getPixelColor(j - 1));
    }
    led = (1 + led) % 10;
  }
}

void showStrip() {
  strip.show();
}

void setPixel(int Pixel, byte red, byte green, byte blue) {
  strip.setPixelColor(Pixel, strip.Color(red, green, blue));
}

void setAll(byte red, byte green, byte blue) {
  for (int i = 0; i < NUM_LEDS; i++ ) {
    setPixel(i, red, green, blue);
  }
  showStrip();
}

PC beim Access Point anmelden und in der IDE dann den Port wechseln.

Entscheidend ist vermutlich keine Spannungversorgung über USB. Ob es bei Dir geht, mußt Du probieren.

octarock:
wenn das so ist und ich es richtig verstanden habe, kann ich es dann auch so machen ?

Tommy sprach davon, das nur die erste Led des Stripes über die Diode versorgt wird.
Also du hast einen Stripe mit 100 Leds, die erste davon wird über die Diode versorgt, die darauf folgenden 99 Leds werden direkt mit den 5 Volt verbunden.
Das gilt dann für beide Stripes, ok ?

@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 :wink:

@Tommy56 ah achso jetzt glaube hab ichs, oder?

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.

octarock:
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.

octarock:
… 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:

//#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 :slightly_frowning_face:

Ein Beispiel mit FastLED und zwei LED-Streifen:

#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
}

Ä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?

octarock:
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!

octarock:
was muss ich in Arduino IDE einstellen um dannach uber OTA Sketches hochzuladen?

Sieht bei mir so aus:

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 :slight_smile:
Ä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?