Das werde ich mal testen.
"Nicht richtig anspringt" kann grundlegend nicht der Fall sein, da ich über die serielle Schnittstelle jeden Schritt nachvollziehen kann und das ab dem ersten Loopdurchgang.
Das werde ich mal testen.
"Nicht richtig anspringt" kann grundlegend nicht der Fall sein, da ich über die serielle Schnittstelle jeden Schritt nachvollziehen kann und das ab dem ersten Loopdurchgang.
Ja, aber z.B. das WiFi-Modul oder andere Bausteine auf dem Modul. Irgendetwas muss es ja sein, was mal einwandfrei und mal nicht einwandfrei funktioniert. Sonst hättest Du keine Probleme damit.
Falls das mit dem manuellen Reset dann einwandfrei funktionieren sollte, dann könntest Du eine extra Reset-Schaltung bauen, die einen sauberen Reset durchführt. Das war die Idee dahinter.
Ansonsten wüsste ich auch nicht, was man da noch machen sollte. Leider habe ich zurzeit zu viel zu tun, als nochmals mit was anderem anzufangen. Sonst hätte ich das selber schon ausprobiert. Es ist ja sowieso schon so eine Sache, dass nur eine Art Rückkehr vom Sleep Mode funktionieren soll, weil die anderen Arten nicht richtig implementiert sind, dass sie einwandfrei anwendbar wären. Oder hat sich das in der Zwischenzeit mal geändert?
MfG
Geändert von Moppi (03.12.2018 um 21:51 Uhr)
Hallo zusammen,
ich möchte mich noch einmal zu meinem Problem melden. Ich habe es nach wie vor nicht zuverlässig geschafft ein einzelnes UDP-Paket zu senden. Es kann ja nicht sein, erst eine Menge Pakete vorab zu schicken um dann immer noch nicht zuverlässig ein Paket zu senden. Sollte es also jemand schaffen, nach dem Bootvogang des ESP8266 bzw. NodeMCU ein einzelnes UDP-Paket zu verschicken, welches auch auf der Gegenseite ankommt, der möge bitte hier seinen Arduino-Sketch posten. Nach Möglichkeit sollte das Sketch nur ein Paket senden und dann wieder den Tiefschlaf aufrufen.
Wie ich mein Problem jetzt gelöst habe:
MQTT
Ich habe einen MQTT-Clienten eingebunden womit ich nun meine Werte an den MQTT-Broker auf den Server sende. Das funktioniert einwandfrei und zuverlässig!
Viele Grüße
Aber MQTT arbeitet ja nun mit TCP. Dennoch geht das ja über WLAN. Und auch hier wirst Du das nodeMCU nach einem Reset neu verbinden müssen oder?
Also meine Erfahrungen mit UDP waren jedenfalls durchweg positiv - zumindest in einem normalen LAN. Da ist nie was abhanden gekommen.
Na, wenigstens hast Du eine Lösung gefunden.
MfG
Geändert von Moppi (05.01.2019 um 16:01 Uhr)
Das mit dem LAN hatten wir ja gemeinsam durch probiert. Daran lag es scheinbar nicht. Neu verbinden muss er sich jetzt auch.
Dann schreib doch bitte mal ein Scetch indem ein einziges UDP-Paket einen String übermittelt und sich dann der ESP eine Minute schlafen legt. Wie gesagt, eigentlich kein Hexenwerk...Zitat von Moppi
![]()
Ich redete von LAN. Habe mal mit Java auf nem Server einen Chat für Browser gebaut, dort habe ich wegen der Einfachheit UDP verwendet. Nicht nur, dass sich das einfach implementieren lies (wie ich fand) es funktionierte dort auch einwandfrei.
Ich hätte das auch mit dem nodeMCU probiert, aber meine Pläne hatten sich zerschlagen. Ich hatte das nodeMCU schon rausgekramt, Maß genommen (Gehäuse) und wollte loslegen. Dann sah ich, dass nur ein Analogeingang da sein soll. Ich dachte an Multiplexen des Aanlog-Eingangs am nodeMCU, mir ist aber keine brauchbare Lösung eingefallen, so dass ich wieder beim ATmega328 hängen geblieben bin. Sonst hätte ich mich schon hier gemeldet, hätte das dann wahrscheinlich auch per UDP versucht.
Ich schaue mal was, hatten wir hier nicht so einige Links von Beispielcodes?
MfG
Ich habe es jetzt mal ausprobiert.
Ich habe dabei auf eine Netzwerkadresse direkt gesendet xxx.xxx.x.1 und auf Broadcast xxx.xxx.x.255. Als Testtool habe ich Packet Sender installiert. UDP-Adresse 58817.
Beim Deep Sleep habe ich einen Wert von 128 eingesetzt. Das sind Abstände von ca. 6 Sekunden in denen er schläft, aufwacht (Reset) und Paket sendet.
Die Pause vor einem Deep Sleep habe ich mit "delay(5000)" gemacht.
Jedes Paket kommt an.
Das Versenden der Pakete dauert durchaus, mit Anmelden am Netzwerk, ein paar Sekunden. Geht das nodeMCU zu schnell in Deep Sleep, wird kein Paket versendet.
Ich habe auch ein nodeMCU, das rumspinnt, weil es ständig Ausnahmefehler produziert und also immer neu startet. Ich habe dann ein anderes nodeMCU genommen, gleiche Sorte (hatte 5 bestellt), das funktioniert scheints einwandfrei.
Jedenfalls, bei diesem ersten Test jetzt kann ich nicht erkennen, dass nichts ankommt, das Gegenteil ist der Fall.
Ich habe die FritzBox Cable 6360.
Ich habe die Sleep-Zeit auf ca. 1min verlängert:
Ich sehe, ob alle Pakete ankommen, weil ich immer nur ein Paket verschicke. Nicht mit mehreren Versuchen (zig Pakete bis eins ankommt).
MfG
PS:
Code:#include <ESP8266WiFi.h> #include <WiFiUDP.h> #define PORT 50000 //ab 50000 ist mir sicherer, habe ich irgendwann mal ausspioniert, untenrum muss man bei Portnummern ggf. mit Kollisionen anderer Programme rechnen WiFiUDP udpServer; const char* ssid = "xxxxxxx"; //SSID WLAN Netz const char* password = "xxxxxxxxxxxxxxxxxxxxxxx"; //Passwort des WLAN Netzes const char* ziel = "192.168.0.255"; //Empfänger Broadcast-Adresse xxx.xxx.x.255 ! void setup() { Serial.begin(115200); delay(10); Serial.println(); Serial.println(); Serial.print("Verbinde mich mit Netz: "); Serial.println(ssid); WiFi.begin(ssid, password); WiFi.config(IPAddress(192,168,0,xx), IPAddress(192,168,0,x), IPAddress(255,255,255,0), IPAddress(192,168,0,x)); //richtige Konfiguration - 192,168,0,x : IP-Adresse der FritzBox //und 192,168,0,xx : IP-Adresse dieses nodeMCU //255,255,255,0 : Subnetzmaske while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi Verbindung aufgebaut"); Serial.print("Eigene IP des ESP-Modul: "); Serial.println(WiFi.localIP()); // UDP Server starten udpServer.begin(PORT); delay(500); if(udpServer.beginPacket(ziel, 58817)==1)Serial.println("beginPacket - ok"); //Zielport muss natürlich stimmen, nicht irgendwo hin schicken - ziel ist hier Broadcast-Addresse (s.o.) //Port: >50000 udpServer.write("Hallo"); udpServer.endPacket(); } void loop() { delay(5000); //extremst wichtig - UDP-Paket muss erst sicher versendet sein! ESP.deepSleep(60*1000000); }
Geändert von Moppi (08.01.2019 um 13:54 Uhr)
Lesezeichen