Das kann's eigentlich nicht geben. Wenn Du nur jedesmal nur 1 LED anschaltest dann müssen alle LED gleich verhalten egal ob es das erste, 10, 20, oder 59. LED ist.
Ich habe zu dem Verhalen keine Erklährung.
Ich würde den Ratschlag "versuch's mit einem neuen LED-Streifen" als in diesem Fall Zielführend erachten.
"Neu" meine ich diesmal, einen anderen 12V Streifen mit dem WS2811 von einem anderen Versender.
Maschinenbauer und Elektrotechniker haben viele Gemeinsamkeiten, während des Studiums auch einen vergleichbaren Bierkonsum
Das ist gut, dann benötigst Du keine hohe Framezahl.
Abweichend von Uwe empfehle ich Dir WS2815 IP65 wegen 12 V und weniger Strom (kleiner 15 mA je Pixel), dadurch dünnere Versorgungsleitungen. Die Ansteuerung ist allerdings genauso empfindlich wie bei WS2812.
Beim UNO benötigst Du noch eine RTC DS3231 für eine recht gute Genauigkeit. Wobei ein UNO schön zum Einstieg mit einem Steckbrett geeignet ist, sonst würde ich zu den kleineren Nanos oder ProMinis (328P 5V 16MHZ) greifen. Ohne Löten geht es nicht zuverlässig. StepDown 12 V auf 5 V nicht vergessen.
Den ESP32 kannst Du nahe am Streifen plazieren und Over The Air (OTA) programmieren. Neben einem StepDown auf 5 V ist dann nichts notwendig.
Programm aus meinem Fundus, leicht abgeändert auf sekündlichen Frabwechsel:
// ESP32
#include <FastLED.h>
FASTLED_USING_NAMESPACE
#define DATA_PIN 23
#define LED_TYPE WS2812
#define COLOR_ORDER GRB
#define NUM_LEDS 68
CRGB leds[NUM_LEDS];
#include <ArduinoOTA.h>
#include <Wire.h>
#include <U8g2lib.h>
U8G2_SSD1306_128X64_NONAME_F_HW_I2C oled(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
#include "zugangsdaten.h"
const char * sta_ssid = STA_SSID; // << kann bis zu 32 Zeichen haben
const char * sta_password = STA_PASSWORD; // << mindestens 8 Zeichen jedoch nicht länger als 64 Zeichen
#define LED_BUILTIN 13
#include "time.h"
struct tm zeit;
/* wird in der Bibliothek festgelegt
struct tm
{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
*/
bool getTime() { // Zeitzone einstellen https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
configTzTime("CET-1CEST,M3.5.0/02,M10.5.0/03", "fritz.box"); // dein NTP Server
if (!getLocalTime(&zeit)) return false;
return true;
}
void setup() {
FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
oled.begin();
pinMode(LED_BUILTIN, OUTPUT);
WiFi.mode(WIFI_STA);
WiFi.begin(sta_ssid, sta_password);
while (WiFi.status() != WL_CONNECTED) {
digitalWrite(LED_BUILTIN, 1);
delay(250);
digitalWrite(LED_BUILTIN, 0);
delay(250);
if (millis() > 10000) {
ESP.restart();
}
}
ArduinoOTA.begin();
getTime();
}
void loop() {
ArduinoOTA.handle();
anzeigeOLED();
}
void anzeigeOLED() {
uint32_t jetzt = millis();
static uint32_t vorhin = 0;
char buf[30] = {'\0'};
if (jetzt - vorhin >= 1000) {
vorhin = jetzt;
oled.clearBuffer(); // Speicher im µC löschen
snprintf( buf, sizeof(buf), "IP %s", WiFi.localIP().toString().c_str() );
oled.setFont(u8g2_font_t0_12_mr); // passenden Font wählen
oled.drawStr(0, 8, buf);
getLocalTime(&zeit, 50);
strftime( buf, sizeof(buf), "%T %d.%m.%Y", &zeit ); // http://www.cplusplus.com/reference/ctime/strftime/
oled.drawStr(0, 18, buf);
snprintf( buf, sizeof(buf), "%2u:%02u:%02u", zeit.tm_hour, zeit.tm_min, zeit.tm_sec );
oled.setFont(u8g2_font_inb16_mf); // passenden Font wählen
oled.drawUTF8(0, 63, buf);
oled.sendBuffer(); // Speicher im µC an Display übertragen
animation();
}
}
void animation()
{
uint8_t gHue = zeit.tm_sec * 255 / 59;
fill_solid( leds, NUM_LEDS, CHSV(gHue, 255, 255) );
FastLED.show();
}
Als NTP-Server für die Zeit habe ich meine Fritz!Box genutzt. Die wird nur einmalig nach Reset abgefragt, danach läuft sie mit der nicht besonders genauen internen Zeit des ESP32. Einmal am Tag stellen, sollte genügen.
Später könntest Du eine HTML-Datei zur Konfiguration nutzen. Die Ideen wachsen schneller als Bäume
Ich möchte Dich zu nichts überreden. Kaufe eventuell erstmal einen neuen LED-Streifen, damit Du wieder Vertrauen faßt.
Die Links sind keine Kaufempfehlungen und dienen nur der Illustration!
Da ich sowas in der Art noch hier rumzuliegen hatte...
Vielleicht mag ja @agmue daraus den relevanten Teil übernehmen.
Der Code ist jetzt komplett ohne Uhr und macht nur im SekTakt ein ++ auf den Sekunden und rechnet damit...
const uint32_t intervall = 1000;
uint32_t laufzeit;
uint16_t uhrzeit; // Die uhrzeit in sekunden - kann voreingestellt werden
uint16_t minute;
uint16_t sekunde;
uint8_t r, g, b;
void setup()
{
Serial.begin(115200);
Serial.println(F("Start..."));
}
void loop()
{
if (millis() - laufzeit >= intervall)
{
laufzeit += intervall;
uhrzeit++;
minute = uhrzeit / 60 % 60; // Ermitteln der tatsächlichen Zeit
sekunde = uhrzeit % 60;
// AB HIER Berechnung der Farben
uint16_t schaltzeit = minute * 60 + sekunde;
if (minute < 20) // Bedingung Zeit
{
r = map(schaltzeit, 0, 20 * 60, 255, 0);
g = map(schaltzeit, 0, 20 * 60, 0, 255);
b = 0;
}
else if (minute < 40)
{
r = 0;
g = map(uhrzeit, 20 * 60, 40 * 60, 255, 0);
b = map(uhrzeit, 20 * 60, 40 * 60, 0, 255);
}
else if (minute < 60)
{
r = map(uhrzeit, 40 * 60, 60 * 60, 0, 255);
g = 0;
b = map(uhrzeit, 40 * 60, 60 * 60, 255, 0);
}
// Ende Berechnung der Farben
SerialDebug();
}
}
void SerialDebug()
{
if (uhrzeit < 10)
{
Serial.print(' ');
}
if (uhrzeit < 100)
{
Serial.print(' ');
}
if (uhrzeit < 1000)
{
Serial.print(' ');
}
Serial.print(uhrzeit);
Serial.print(' ');
if (minute < 10)
{ Serial.print('0'); }
Serial.print(minute);
Serial.print(':');
if (sekunde < 10)
{ Serial.print('0'); }
Serial.print(sekunde);
Serial.print(F(" - "));
if (r < 100)
{ Serial.print(' '); }
if (r < 10)
{ Serial.print(' '); }
Serial.print(r);
Serial.print(", ");
if (g < 100)
{ Serial.print(' '); }
if (g < 10)
{ Serial.print(' '); }
Serial.print(g);
Serial.print(", ");
if (b < 100)
{ Serial.print(' '); }
if (b < 10)
{ Serial.print(' ');}
Serial.println(b);
}
Hallo zusammen,
sorry für die Unterbrechung, ich konnte mich unter der Woche leider nicht weiter darum kümmern.
mir klingt diese Lösung sinnvoll, und ich denke, ich bin hier auch in guten Händen. Ich hoffe, ich darf euch noch etwas länger mit meinen Problemen nerven. Dann trau ich mich da auch ran
Bevor ich jetzt einkaufe würde ich gerne kurz nochmal klären, was ich alles brauche, und ob das, was ich ausgesucht habe, geeignet ist.
Könnte das bitte jemand bestätigen?
Esp32:
Ihr sagt, das Dings lässt sich OTA programmieren. Geht das auch beim ersten mal schon, oder brauche ich dafür doch erstmal ein Kabel? ist das ein normales micro USB, das hätte ich nämlich hier herumliegen?
Steckbrett zum aufbauen
Der Strip sagt laut Produktdetails 90Watt, bei 12V sind das dann 7,5A. Das bekommt mein kleines Netzteil nicht her, deswegen ists glaube ich notwendig, direkt mein bereits genanntes Computernetzteil anzuzapfen.
Hier habe ich nun aber das Problem wie. Was für einen Adapter brauche ich, um an mein BeQuiet Pure Power 11CM den Strip anzuschließen? Im Foto sind die Ausgänge zu sehen, bei denen ich leider nichtmal herausgefunden habe, wie die sich nennen.
Und das gleiche Problem hab ich mit dem ESP32 ja dann auch nochmal. ich hab hier noch ein Power supply modul mit Uin 12V gefunden. Theoretisch könnte ich das mit meinem kleinen Netzteil nutzen, um den ESP32 zu betreiben. Idealer fände ich es allerdings, wenn ESP32 und LED-Strip auf einer gleichen Stromversorgung hiengen und bestenfalls auch noch gemeinsam mit einem Schalter zu schalten sind.
Wisst ihr hierfür eine sinnvolle Lösung für mich?
einen 330Ohm Widerstand für die Datenleitung habe ich.
Brauche ich dann sonst noch was?
Fragen dazu:
Du weisst das, um das Ding StandAlone betrieben zu können, etwas Umbau notwendig ist?
Die Netzteile brauchen ggfls. eine gewisse Grundlast.
Hast Du den Kabelbaum dazu nicht mehr?
Das Abnehmen der 12V könnte dann an den P4-Steckern erfolgen.
Das war das, was oben meine erste Frage war: Die Dinger kann man am 24pol-ATX-Stecker über Pin 16 einschalten und an Pin 8 muss +5V anliegen. Aber das muss eben erstmal machen...
Du brauchst ein Kabel. OTA funktioniert nur mit den Anmeldedaten Deines Routers, die der Hersteller des ESPs hoffentlich nicht kennt. Daher ist ein Blinksketch drauf.
Auf das paßt der ESP32 Dev Kit C V4 nicht drauf, ich habe daher zwei andere (SYB-46) kombiniert, siehe #22.
Welcher Typ, wie viele Pixel?
StepDown von 12 V auf 5 V, beim ESP32 an den 5V-Pin. Nicht gleichzeitig mit USB, daher Steckbrücke oder dergleichen vorsehen.
GN auf GND stimmt. Läuft bei mir schon Jahre als Experimentiernetzteil.
Man sollte sich Sicherungen gönnen. 40+ A können Leitungen ganz schön aufheizen
Moderne Netzteile haben auch im Aus-Zustand (also nur Netzstecker) 5V für USB.
Das könnte (9) +5 VSB sein. Muss man testen. Mein altes Netzteil hat das noch nicht.