Probleme mit Arduino und NeoPixel

Guten Tag an alle,
ich habe eine Frage bezüglich eines Arduino R3 und der maximalen LED Anzahl.
Ich möchte gern eine Treppenstufenbeleuchtung programmieren.
Hier die Details:

Stufen 13 a 48 SK6812 LED´s = 624 LED
2 PIR (oben/unten)
1 LDR

Ich habe mit zum Testen der Stufen einen einfachen Code geschrieben der sequenziel jede Stufe ansteuern soll. Dies funftioniert auch bis zu einer LED Anzahl von 430 und danach leuchtet keine mehr. Ich habe mir zur "Überprüfung" einen ESP32 mit WLED fertig gemacht, dieser kann alle LED´s Problemlos ansteuern. Jetzt hätte ich 2 Fragen diesbezüglich.

1.Kann der Arduino nur eine begrenzte Anzahl an NeoPixel?
2. Wenn ja, ist es möglich (möchte kein Code oder ähnliches da ich es selber lernen möchte) den Arduino mit dem WLED ESP zu verbinden?

Mein Gedanke dahinter ist den Arduino mit dem Code für die PIR und den LDR zu beschreiben so das er nur ein Befehl an den ESP mit WLED sendet und dieser dann die Stufen zuschaltet in jeglicher Form.

Ich bedanke mich schonmal und hoffe,dass mir jemand bei dem Problem helfen kann.
Anbei der Code für den Funktionstest

#include <Adafruit_NeoPixel.h>
#ifdef __AVR__
#include <avr/power.h> 
#endif
#define PIN        5 
#define NUMPIXELS 432 
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRBW + NEO_KHZ800);
               
#define RED      0     
#define GREEN    0
#define BLUE     10
#define WHITE    10

void setup() 
{
  pixels.begin(); 

}


void loop() {
    
    //Stufe 1
    
  for (int count = 0; count < 48; count = count + 1) 
    pixels.setPixelColor(count, pixels.Color(RED,GREEN,BLUE,WHITE));
    pixels.show();
    delay(500);
    
    //Stufe 2
   
  for (int count = 48; count < 96; count = count + 1) 
    pixels.setPixelColor(count, pixels.Color(RED,GREEN,BLUE,WHITE));
    pixels.show();
    delay (500);

    //Stufe 3

  for (int count = 96; count < 144; count = count + 1) 
    pixels.setPixelColor(count, pixels.Color(RED,GREEN,BLUE,WHITE));
    pixels.show();
    delay (500);

    //Stufe 4

  for (int count = 144; count < 192; count = count + 1) 
    pixels.setPixelColor(count, pixels.Color(RED,GREEN,BLUE,WHITE));
    pixels.show();
    delay (500);
   
    //Stufe 5

  for (int count = 192; count < 240; count = count + 1) 
    pixels.setPixelColor(count, pixels.Color(RED,GREEN,BLUE,WHITE));
    pixels.show();
    delay (500);

    // Stufe 6

  for (int count = 240; count < 288; count = count + 1) 
    pixels.setPixelColor(count, pixels.Color(RED,GREEN,BLUE,WHITE));
    pixels.show();
    delay (500);

    //Stufe 7

  for (int count = 288; count < 336; count = count + 1) 
    pixels.setPixelColor(count, pixels.Color(RED,GREEN,BLUE,WHITE));
    pixels.show();
    delay (500);
    
    //Stufe 8

  for (int count = 336; count < 384; count = count + 1) 
    pixels.setPixelColor(count, pixels.Color(RED,GREEN,BLUE,WHITE));
    pixels.show();
    delay (500);
    
    //Stufe 9
  
  for (int count = 384; count < 432; count = count + 1) 
    pixels.setPixelColor(count, pixels.Color(RED,GREEN,BLUE,WHITE));
    pixels.show();
    delay (500);
    pixels.clear(); 
    
    //Stufe 10
    
  for (int count = 432; count < 480; count = count + 1) 
    pixels.setPixelColor(count, pixels.Color(RED,GREEN,BLUE,WHITE));
    pixels.show();
    delay (500);
    pixels.clear();
    
    //Stufe 11

  for (int count = 480; count < 527; count = count + 1) 
    pixels.setPixelColor(count, pixels.Color(RED,GREEN,BLUE,WHITE));
    pixels.show();
    delay (500);
    pixels.clear(); 
    
    //Stufe 12

  for (int count = 528; count < 576; count = count + 1) 
    pixels.setPixelColor(count, pixels.Color(RED,GREEN,BLUE,WHITE));
    pixels.show();
    delay (500);
    pixels.clear(); 

    //Stufe13

  for (int count = 576; count < 624; count = count + 1) 
    pixels.setPixelColor(count, pixels.Color(RED,GREEN,BLUE,WHITE));
    pixels.show();
    delay (500);
    pixels.clear();
 }

Jede NeoPixel benötigt ungefähr 3 Bytes RAM ➜ 3 x 624 = 1872 Bytes
Ein Arduino UNO R3 hat nur 2048 Bytes RAM.... Die Bibliothek allokiert den Speicher dynamisch, was bedeutet, dass dieser Bedarf nicht während der Kompilierung berücksichtigt wird.

1 Like

ja , das ist so. Jedes Pixel braucht 3 byte RAM und das RAM ist auf 2024 Byte begrenzt. Da der Controller etwas RAM auch für andere Zwecke braucht ist das limit so um die 400 Neopixel.

Was ist WLED ESP?

Ja, es ist möglich Daten vom Arduino über eine Schnittstelle (Serial, I2C, SPI) zu einem ESP zu schicken. Du mußt aber beachten, daß die beiden Systeme verschiedene Versorgungsspannugen haben.

Grüße Uwe

1 Like

Vielen Dank für die schnellen Antworten.
Also würde es bedeuten,dass ich den Arduino nicht alleine dafür nutzen kann.

Ich weiss nicht ob ich ich hier ein externen Link setzen darf, darum erkläre ich es.
WLED ist eine eigene Firmware für ein ESP32 womit man diverse LED Stripes und Matrix steuern kann. Dieser funktioniert mit den Stufen einwandfrei und da kam mir der Gedanke den Arduino als Steuerung zu nutzen und den ESP ,mit WLED drauf, als "Ausgabeeinheit". Ich hoffe, dass ich es so gut wie möglich beschreiben konnte.

Gruß Stefan

und was soll der Arduino noch machen, wenn es ohnehin einen ESP32 gibt? Der ESP32 kann sich um die ganze Ansteuerung kümmern - der hat genug Speicher.

Vielen Dank für den "Gedankenschubbs" mit dem ESP32.Habe mich gerade in diversen "WLED" Foren belesen und dort gibt es mit der passenden Firmware auch eine Ansteuerung für PIR als Trigger womit man auch eine Treppensteuerung realisieren kann.

Mein Gedanke war, dass der Arduino Steuerung der PIR und des LDR übernimmt und per Ausgang ich nenne es jetzt mal simpel gesagt ein Signal an den mit "WLED" programmierten ESP32 sendet. Je nach Signal (PIR oben erkennt etwas z.B.) Szenario 1 wird ausgeführt usw..

Mit freundlichen Gruß
Stefan

PIR und LDR kann man sicher auch an den ESP32 anschließen.
Der Neopixel Code vom UNO wird auch am ESP32 laufen.

Ernsthaft, es braucht nur einen Microcontroller, es braucht nur ein Programm. WLED braucht es in der Regel nicht.

Gut zu Wissen :slight_smile: Ich glaube das ich da etwas zu kompliziert gedacht habe mit den Kombinieren.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.