Hallo zusammen,
ich versuche folgendes Projekt.
Auf einem ESP8266 soll ein AccessPoint erstellt werden. Dieser soll beim
aufrufen der "192.168.1.1" eine Webseite mit einem RGB Slider anzeigen.
Diese soll dann auf einen WS2812LED Streifen übertragen werden.
Dieser Teil funktioniert schon problemlos.
In einem weiteren Schritt wollte ich nun einen zweiten ESP8266 mit dem
ersten ESP (also dem AP) verbinden.
Dies habe ich mit einer fixen IP gemacht. 192.168.1.101
Später sollen es mal 3 oder 4 Sein (192.168.1.102 / 192.168.1.103
Diese sollen genau die gleiche Farbe anzeigen wie der erste Strip.
Dazu sende ich nun die RGB Farben des ersten ESP (AP) per HTTP.GET an
den zweiten ESP bzw. später auch an die anderen.
Nun kommt folgendes Problem.
Wenn ich im Serial Monitor die beiden ESP beobachte und mir die
übertragenen RGB Werte anzeigen lasse, dann klappt das Problemlos.
Sobald ich aber den Befehl strip.show() beim zweiten ESP ausführe hängt
sich dieser auf und auch der AP (erste ESP) nimmt die Befehle nur noch
ca. alle 2 Sekunden an.
Mir wurde in einem anderen Forum gesagt es kann daran liegen, dass die
WS2812 beim ESP auf der RX Leitung liegen. Somit habe ich die Ausgabe
der Seriellen Daten aus meinem Code entfernt und nun läuft auch durch
nur leider leuchtet beim zweiten ESP keien LED.
Habt ihr eine Idee woran es liegen könnte?
Ich hänge mal alles an.
AccessPoint AP, erster ESP
1
#include"index.h"
2
#include<ESP8266WiFi.h>
3
#include<DNSServer.h>
4
#include<ESP8266WebServer.h>
5
#include<NeoPixelBus.h>
6
#include<ESP8266HTTPClient.h>
7
8
constStringClient1="http://192.168.1.101";
9
constStringClient2="http://192.168.1.102";
10
constStringClient3="http://192.168.1.103";
11
12
intredINT;
13
intgreenINT;
14
intblueINT;
15
byteCL2CL3_R;
16
byteCL2CL3_G;
17
byteCL2CL3_B;
18
19
20
#define PixelCount 4 // Number of leds on stick
21
#define PixelPin 0 // "NodeMCU pin 2 (RX) connected to Digital In of Pixel Stick"
Michael87 schrieb:> Auf einem ESP8266 soll ein AccessPoint erstellt werden. Dieser soll beim> aufrufen der "192.168.1.1" eine Webseite mit einem RGB Slider anzeigen.
Im AP Modus hat der ESP normalerweise die Adresse 192.168.4.1 und alle
damit verbundenen Clients haben eine Adresse aus dem Bereich
192.168.4.x. Welchen Grund hast du, dies zu ändern?
Du wirfst die Begriffe "Server" und "Client" durcheinander. Zu einem
Client kann man keinen HTTP GET Request senden.
Warum hast du da Code für DNS drin, obwohl alles mit festen IP Adressen
passiert?
> Mir wurde in einem anderen Forum gesagt es kann daran liegen,> dass die WS2812 beim ESP auf der RX Leitung liegen.
Die sie verkabelt sind, solltest du selbst doch 100% wissen und und auch
mitteilen. Wie sollen wir Dir sonst helfen? Zeige deinen Schaltplan.
> Sobald ich aber den Befehl strip.show() beim zweiten ESP> ausführe hängt sich dieser auf...und nun läuft auch durch> nur leider leuchtet beim zweiten ESP keien LED.
Ich würde Dir vorschlagen, zuerst die Ansteuerung der LED Streifen ganz
ohne Netzwerkkommunikation ans Laufen zu bringen. Zum Beispiel bunt
blinken lassen.
1
voidhandleRoot()
2
{
3
webServer.send(200,"text/html",s);//Send web page
4
5
if(WebServerArgDecission=="C")
6
{
7
...
8
}
9
else
10
{
11
}
12
webServer.send(200,"text/html",s);
13
}
Da ist etwas doppelt gemoppelt.
> const char MAIN_page[] PROGMEM = R"=====(> <html lang="en">
Da stimmt wahrscheinlich etwas mit den Anführungsstrichen nicht.
Hänge das ganze Programm in compilierbarer Form an und bringe die
grausame Formatierung in Ordnung! Dass Dir da nicht einmal die gröbsten
Fehler auffallen, ist kein Wunder.
Hallo Michael,
um die Daten per HTTP an die "clients" oder sagen wir eher Slaves zu
übertragen, müssen diese als Webserver laufen. Der Master sendet seinen
Request mit den neuen Daten dann an jeden Slave. Das bringt jede Menge
Overhead, und wenn ein Slave nicht erreichbar ist hängt die
Kommunikation zumindest bis ein Timeout zuschlägt.
Ich würde vorschlagen die Verteilung der Daten an die Slaves per UDP zu
machen, da kannst du die Daten an die Slaves senden und wenn die mal
offline sind passiert auch nichts da nicht auf irgendwelche
Bestätigungen gewartet werden muss. Per UDP kannst du sogar per
Broadcast senden, dann brauchst du die Daten nur 1x senden und alle
verbundenen Slaves empfangen das Paket. Um einen nachträglich
verbundenen Slave auf den aktuellen Stand zu bringen kann der einfach
ein UDP-Paket an den Master senden, bzw sollte es am Master auch die
Möglichkeit geben einen neu verbundenen Slave über den Netzwerkstack zu
erkennen.
Sascha