Forum: Mikrocontroller und Digitale Elektronik Zwei ESP32 an der gleichen WS2812b-Stripe möglich?


von Hans M. (inso)


Lesenswert?

Grüße,

Die Frage in aller kürze:
kann ich (gleiches Netzteil) einfach zwei ESP32er nehmen und einen ihrer 
Pins mit einer WS2812B Stripe verbinden, und sie so abwechselnd (bzw. im 
schlimmsten Falle parallel) steuern, oder könnte das zu einem 
Hardwaredefekt an einem der Teile führen?

Hintergrund:
ich habe WS2812b Stripes hinter meinen Monitoren angebracht, die ich 
über einen ESP32 steuere.
Nun würde ich gern einen Monitor zwischendurch mit Hyperion (Ambilight) 
betreiben, und dafür natürlich die gleichen Stripes nutzen.
Es gibt auch schon fertigen Code für einen ESP32. Den würde ich nun aber 
ungern in meinen bestehenden Code einpflegen. Also ist die Idee einfach 
einen zweiten ESP für das Ambilight zu bespielen, und ihn parallel zum 
ersten ESP an den gleichen Eingang der Stripe hängen. Alles am gleichen 
Netzteil.
Dadurch würde aber natürlich alles was der eine ESP ausgibt am Pin des 
anderen ESP ankommen. Im schlimmsten Fall würden beide ESPs gleichzeitig 
ein Signal ausgeben.
Dass die LED dann nur irgendeinen Mist anzeigt ist mir in dem Fall dann 
egal. Wichtig ist nur dass dabei nichts kaputt geht.

Kann ich das ohne weiteres machen, oder spricht etwas dagegen?

von mIstA (Gast)


Lesenswert?

Hans M. schrieb:
> Im schlimmsten Fall würden beide ESPs gleichzeitig
> ein Signal ausgeben.

Genau so ist es; wobei das noch nicht wirklich schlimm wäre, solange 
beide ESPs dasselbe Signal ausgeben (also beide immer gleichzeitig High 
oder Low). Aber was passiert, wenn einer Low (0V) und der andere 
gleichzeitig High (3.3V) ausgeben?

Klingt irgendwie nach Kurzschluß?! - Da gibts dann keinerlei Garantie, 
ob bzw. wie lange das beide Ausgängspins bzw. deren ESPs überleben.

Die einfachste Lösung (abgesehen davon doch nur einen ESP zu verwenden 
und den Ambilight-Code doch mit Deiner SW zu fusionieren) wäre ein 
simpler mechanischer Umschalter mit dem Du auswählen kannst, welcher ESP 
die LEDs steuern soll.

Falls Dir das händische Umschalten zu umständlich ist, kannst Du statt 
des Umschalters auch ein Relais mit einem Umschaltkontakt verwenden, das 
der ESP mit Deiner SW drauf ansteuert, wenn er die Kontrolle über die 
LEDs übernehmen will; im nicht angesteuerten Fall hat dann der Ambilight 
ESP die Kontrolle.

Vollelektronische Lösungen fangen mit zwei simplen (Schottky)dioden an, 
die Du jeweils zwischen ESP-Ausgang und WS2812-Eingang schaltest. Damit 
verhinderst Du jedenfalls einen Kurzschluß zwischen den beiden 
Ausgangspins und so kann zumindest nix mehr kaputt gehen; aber obs 
funktioniert ist - falls Du die LED-Streifen mit 5V betreibst - leider 
mehr oder weniger Glückssache.

Strenggenommen ist es nämlich eigentlich schon Glückssache, wenn sich 
mit 5V betriebene WS2812 überhaupt von einem mit 3,3V laufenden ESP 
ansteuern lassen. Laut Datenblatt brauchen WS2812 am Eingang nämlich 
mindestens 0,7 x Vcc um sicher ein High zu erkennen, macht bei 5V 
Versorgung also min. 3,5V; die 3,3V des ESP reichen also theoretisch 
dafür nicht aus, in der Praxis klappts meistens trotzdem.

Wenn aber jetzt der Spannungsabfall der Diode (0,3V bei einer Schottky) 
auch noch dazu bzw. wegkommt, dann wirds natürlich noch deutlich 
kritischer und Du brauchst wahrscheinlich entweder einen Pegelwandler 
oder Du senkst die Versorgungsspannung der LED-Streifen etwas ab 
(theoretisch auf 4,25V, praktisch werden wohl zumindest 4,5V auch noch 
gehen).

von Matthias 🟠. (homa)


Lesenswert?


von Wolfgang (Gast)


Lesenswert?

Hans M. schrieb:
> Kann ich das ohne weiteres machen, oder spricht etwas dagegen?

Nein
JA

> Dadurch würde aber natürlich alles was der eine ESP ausgibt am Pin des
> anderen ESP ankommen. Im schlimmsten Fall würden beide ESPs gleichzeitig
> ein Signal ausgeben.

Der schlimmste Fall tritt nicht ein, wenn beide ESPs gleichzeitig ein 
Signal ausgeben, sondern wenn sie entgegengesetzte Pegel ausgeben (-> 
Kurzschluss).
Eine von den Datenpegeln saubere Lösung wäre, beide Signal mit einem 
ODER-Gatter zu verknüpfen, das gleichzeitig als Pegelwandler dient, z.B. 
ein 74HCT1G32

Kauderwelsch gibt es trotzdem, wenn beide ESP32 etwas ausgeben. Um das 
zu vermeiden, bräuchtest du ein zusätzliches Umschaltsignal

von Karl (Gast)


Lesenswert?

Warum nicht einfach WLED als SW nutzen?

von Wolfgang (Gast)


Lesenswert?

Matthias 🟠. schrieb:
> und warum nicht einfach ein ODER ?
> 
https://www.reichelt.de/vierfache-2-eingangs-exklusiv-oder-gatter-2--6-v-dil-14-74hc-86-p3300.html?search=oder+gatter

Weil ein 74HC86 den 3.3V-Ausgangspegel der ESP nicht an die 5V-Pegel der 
WS2812B anpasst.

von Matthias 🟠. (homa)


Lesenswert?

Wolfgang schrieb:
> Matthias 🟠. schrieb:
>> und warum nicht einfach ein ODER ?
>>
> 
https://www.reichelt.de/vierfache-2-eingangs-exklusiv-oder-gatter-2--6-v-dil-14-74hc-86-p3300.html?search=oder+gatter
>
> Weil ein 74HC86 den 3.3V-Ausgangspegel der ESP nicht an die 5V-Pegel der
> WS2812B anpasst.

Ok, ich streiche meinen Vorschlag und frage einfach: Und warum nicht ein 
geeignetes ODER Gatter?

von Hans M. (inso)


Lesenswert?

Grüße,

erstmal vielen Dank für die ganzen Antworten - klar, ein Oder-Gater, da 
bin ich beim ersten Durchdenken gar nicht drauf gekommen :D

Sprich statt dem Modul kann ich ja dann an einem ESP zwei Eingangspins 
und einen dazugehörigen Ausgangspin definieren und den Task der das Oder 
auswertet entsprechend hoch priorisieren.. oder einfach einen Arduino 
zum Oder-Auswerter machen, den hab ich eh noch hier rum fliegen. Und da 
kann ich dann auch setzen dass der eine Eingang direkt ignoriert wird, 
wenn der andere aktuell was rein bekommt. Perfekte Lösung und schnell 
umgesetzt - Danke nochmal!

Kurz zu den anderen Sachen:
Hochpegeln auf 5V ist bei meinen 2812ern von BTF Lighting nicht nötig, 
selbst wenn ich sehr schnelle Abläufe programmiere. Hab einige Meter 
davon an verschiedenen ESP32-Controllern im Einsatz, laufen alle 1a. 
Seither kaufe ich auch nur noch die, über Aliexpress mit ~20€ für 5m/60 
auch absolut im Rahmen. Und haben im Gegensatz zu den günstigen sogar 
nen ziemlich ordentlicher Blauton.

@Karl WLED wäre auch wieder eine Implementierung. Mein 2812er Code ist 
relativ komplex da er delays für WakeLight, SleepLight, Rainbow über 
mehrere Controller hinweg und langsames Dimmen mit berechnet und auch 
mit x von 10-Leds schalten arbeitet. Hintergrund ist dass die Leds bspw. 
bei R:G:B 20:5:0 und 200:50:0 trotz dem gleichen Verhältnis nicht die 
exakt gleiche Lichtfarbe haben. Um im Raum dann die gleiche Farbe zu 
haben nehme ich die also den höchsten Wert den ich irgendwo im Raum 
setze, und schalte dann (teils auch passend zum Lux Sensor in bestimmten 
Ecken) nur x von 10 LEDs an und die anderen aus. Dabei wird immer 
geschaut dass alle LEDs ca gleich lang an sind, damit sie gleichmässig 
"abgenutzt" werden. Die Berechnungen werden dabei alle in den ESPs 
selbst gemacht.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Oder ein Mini-Relais oder zwei Mini-Reed ...

von Sebastian (Gast)


Lesenswert?

Reichen nicht einfach zwei Ausgangswiderstände je an den beiden Ports? 
Wie kurzschlussfest sind die ESP?

LG, Sebastian

von Markus M. (adrock)


Lesenswert?

Hans M. schrieb:

> auswertet entsprechend hoch priorisieren.. oder einfach einen Arduino
> zum Oder-Auswerter machen, den hab ich eh noch hier rum fliegen. Und da

Du willst nicht ernsthaft ein ODER-Gatter auf einem Arduino 
programmieren? Das toppt ja noch das Led-Blinken per Software :D

Was für ein Gatter Du nehmen kannst hängt auch ein wenig davon ab, 
welchen Pegel das Ausgangssignal des ESP im Ruhezustand hat. Nach meinem 
Verständnis des WS28xx Protokolls sollte es LOW sein, das dürfte auch 
der Fall sein wenn der ESP garkeine Spannung bekommt. Notfalls noch 
einen sanften Pulldown (z.B. 10kOhm) nach Masse vorsehen.

Wenn also der Ausgang des ESPs im Ruhezustand LOW ist, würdest Du 
tatsächlich ein ODER-Gatter nehmen, und zwar am besten eines in HCT 
Ausführung, wenn Du das dann mit 5V versorgst (anstatt der 3,3V) hast Du 
auch gleich noch einen Pegelwandler. Das muss vlt. nicht unbedingt sein, 
kann aber auch nicht schaden. Und einen 100 Ohm Widerstand zwischen den 
Ausgang des ODER-Gatters und dem Stripe sollte man auch machen zur 
Sicherheit.

Ein 74HCT32 (4x ODER Gatter) als DIP kostet bei Reichelt 65 ct. Dafür 
lohnt es sich nichtmal an etwas anderes zu denken.

von Falk B. (falk)


Lesenswert?

Früher (tm) hätte man einen einfachen Wechselschalter genommen. Die 
Logikvariante ohne Mechanik heißt Multiplexer, z.B. 74HC153. Für einen 
Kanal kann man das auch aus einem 74HC00 basteln. Denn dann ist 
GARANTIERT immer nur eine Datenquelle am Ausgang aktiv, egal was die 
andere macht! Ein ODER-Gatter ist Unfug.

von Hans M. (inso)


Lesenswert?

@Markus M.:
Bei Reichelt kommen halt noch 5,95€ Versandkosten hinzu, und auch in der 
Bucht lieg ich selbst bei einem einzelnen Bauteil bei gut drei Euro, 
während die Arduninos hier haufenweise rum fliegen. Ausserdem hab ich 
schon fertige Gehäuse für den Arduino gedruckt und muss nicht noch ein 
neues Design erstellen, vom Zusammenlöten der Schaltung ganz zu 
schweigen.
Wenn ich den Pin 2 und 3 am Arduino nehme und ihn nach x Sekunden ohne 
Signal in den Sleep gehen lasse ist er auch was Strom angeht ein 
Fliegengewicht.

Daher verstehe ich natürlich was du meinst, habe aber auch meine Gründe 
hier auf die Kanonen-Lösung zu setzen :)

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Da man beim Kauf von LED Streifen meisten nicht weiß, ob man die zu 3,3V 
kompatible Version bekommen wird, würde ich sowieso einen Pegelwandler 
empfehlen. Den kann man auch gleich als ODER Gatter auslegen, das wäre 
ein 74LVC1G32.

Bei Aliexpress bekommst du 10 Stück davon für 5 Euro (incl. Versand)

von Stefan F. (Gast)


Lesenswert?

Hans M. schrieb:
> oder einfach einen Arduino zum Oder-Auswerter machen, den
> hab ich eh noch hier rum fliegen

Ist ein Argument. Ich hätte das allerdings nicht hier hin geschrieben, 
denn es hat zu viel Shitstorm Potential.

von Hans M. (inso)


Lesenswert?

Stefan F. schrieb:
> Da man beim Kauf von LED Streifen meisten nicht weiß, ob man die zu 3,3V
> kompatible Version bekommen wird, würde ich sowieso einen Pegelwandler
> empfehlen.

Ich kauf seit gut fünf Jahren die WS2812b (und andere) von BTF Lighting 
bei Aliexpress. Egal ob pro Meter 30, 60, 72 oder die 8x32 Matrix, alle 
haben die gleiche Farbe, alle laufen perfekt mit den 3,3V von den 
ESP32ern. Mit den 72ern hab ich mehrere Lavalampen gebastelt wo die 
verschiedenen Modi die Farben durchgehend ändern, da sind null Fehler zu 
sehen.
BTF ist aber auch nicht nur ein Händler sondern stellt seine 2812er 
selbst her.

Bei anderen Herstellern / Händlern unbedingt Pegelwandler dazwischen, 
klare Sache :)

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Hans M. schrieb:
> Sprich statt dem Modul kann ich ja dann an einem ESP zwei Eingangspins
> und einen dazugehörigen Ausgangspin definieren und den Task der das Oder
> auswertet entsprechend hoch priorisieren..

Hans M. schrieb:
> Daher verstehe ich natürlich was du meinst, habe aber auch meine Gründe
> hier auf die Kanonen-Lösung zu setzen :)

Ein Grund, den du in deine Überlegung mit einbeziehen solltest, ist die 
Spezifikation für den physical Layer des Datenprotokolls für die 
Steuerung der LED-Controller. Die Zeiten von unter einer Mikrosekunde 
mit Toleranzen von 150ns wirst du wohl kaum per Soft-ODER-Gatter 
umgesetzt kriegen.

von Stefan F. (Gast)


Lesenswert?

Wolfgang schrieb:
> Die Zeiten von unter einer Mikrosekunde
> mit Toleranzen von 150ns wirst du wohl kaum per Soft-ODER-Gatter
> umgesetzt kriegen.

MacGyver würde sich davon nicht aufhalten lassen.

von Hans M. (inso)


Lesenswert?

Wolfgang schrieb:
> Ein Grund, den du in deine Überlegung mit einbeziehen solltest, ist die
> Spezifikation für den physical Layer des Datenprotokolls für die
> Steuerung der LED-Controller. Die Zeiten von unter einer Mikrosekunde
> mit Toleranzen von 150ns wirst du wohl kaum per Soft-ODER-Gatter
> umgesetzt kriegen.

Guter Hinweis, dann wird der Arduino das Absenden über die FastLED 
übernehmen und ich schaufel nur die Arrays zu ihm rüber, das ist ja fix 
eingebaut. Danke dir.

von Matthias 🟠. (homa)


Lesenswert?

Falk B. schrieb:
> Früher (tm) hätte man einen einfachen Wechselschalter genommen. Die
> Logikvariante ohne Mechanik heißt Multiplexer, z.B. 74HC153. Für einen
> Kanal kann man das auch aus einem 74HC00 basteln. Denn dann ist
> GARANTIERT immer nur eine Datenquelle am Ausgang aktiv, egal was die
> andere macht! Ein ODER-Gatter ist Unfug.

Gute Idee! Wieder was gelernt. Danke.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.