- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 10 von 48

Thema: NodeMCU UDP Paket senden + deepsleep

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2013
    Beiträge
    19
    Danke Moppi für deine Mühe. Mein Code ist genau an diesem Beispiel angelehnt. Um aber nicht doch irgend etwas vermurkst zu haben, habe ich diesen noch mal verwendet und habe dabei alles was mit dem Empfang zu tun hat, raus geschmissen.

    Sieht dann so aus:
    Code:
    #include <ESP8266WiFi.h>
    #include <WiFiUdp.h>
    
    const char* ssid = "SSID";
    const char* password = "password";
    
    WiFiUDP Udp;
    unsigned int localUdpPort = 4210;  // local port to listen on
    char incomingPacket[255];  // buffer for incoming packets
    char  replyPacket[] = "Hi there! Got the message :-)";  // a reply string to send back
    
    IPAddress IPudp (255, 255, 255, 255); // <--- wird benötigt, da jetzt kein RemoteIp mehr abgefragt werden kann
    unsigned int sendUdpPort = 5005; // <---- wird benötigt, da jetzt kein RemotePort mehr abgefragt werden kann
    
    void setup()
    {
      Serial.begin(115200);
      Serial.println();
    
      Serial.printf("Connecting to %s ", ssid);
      WiFi.begin(ssid, password);
      while (WiFi.status() != WL_CONNECTED)
      {
        delay(500);
        Serial.print(".");
      }
      Serial.println(" connected");
    
      Udp.begin(localUdpPort);
      Serial.printf("Now listening at IP %s, UDP port %d\n", WiFi.localIP().toString().c_str(), localUdpPort);
    }
    
    
    void loop()
    {
      
        Udp.beginPacket(IPudp, sendUdpPort);
        Udp.write(replyPacket);
        Udp.endPacket();
        delay(5000);
     
    }
    Daher willst Du das Paket mit was Anderem empfangen, als einem nodeMCU z.b. oder?
    Richtig, daher sollte das auf meinem Laptop, später auf dem Server, sichtbar sein.

    Wenn ich richtig gelesen habe, kommen nicht alle Pakete an? Also kommen welche an. Wenn welche ankommen, funktioniert auch der Versand. Mal anders gefragt, woher weißt Du, dass nicht alle ankommen, vielleicht wurden nicht so viele verschickt, wie Du glaubst?
    Richtig, es kommen nicht alle an. Das sehe ich daran, dass der serielle Monitor des Arduino mir brav mitteilt, das ein Paket erfolgreich verschickt wurde (bei meinem Code aus dem ersten Beitrag). Im Netzwerksniffer Wireshark, sowie per Terminalbefehl "netcat -ul 5005" kommen diese Pakete aber nur spradisch an. Laut angehängtem Code sollten das alle 5sek(+Durchlaufzeit) sein. Am NodeMCU sehe ich auch die blaue LED im richtigen Intervall aufleuchten. Das WiFi.disconnect() war eine Idee, dem Accesspoint mitzuteilen, dass die Verbindung beendet wird um nach der Schlafzeit diese wieder korrekt aufzubauen. Auch das yield() ist nur ein Versuch dem Prozessor Zeit zu geben, Hintergrundprozesse wie das Senden, beenden zu können.

    Klicke auf die Grafik für eine größere Ansicht

Name:	udp.png
Hits:	3
Größe:	105,9 KB
ID:	33789

    Hier sieht man die Zeitabstände von Paket zu Paket.

    - - - Aktualisiert - - -

    Neue Erkenntnis:
    Ich habe soeben mal drei Pakete unmittelbar hintereinander geschickt:

    Code:
    udp.beginPacket(IPudp,sendUdpPort1);
      udp.write(UnitID);
      udp.write(" ");
      udp.write("10000");
      udp.write(" ");
      udp.write("44.4");
      udp.write(" ");
      udp.write(rssi);
      sendingStat == udp.endPacket();
      
      udp.beginPacket(IPudp,sendUdpPort2);
      udp.write(UnitID);
      udp.write(" ");
      udp.write("20000");
      udp.write(" ");
      udp.write("44.4");
      udp.write(" ");
      udp.write(rssi);
      udp.endPacket();
        
      udp.beginPacket(IPudp,sendUdpPort3);
      udp.write(UnitID);
      udp.write(" ");
      udp.write("30000");
      udp.write(" ");
      udp.write("44.4");
      udp.write(" ");
      udp.write(rssi);
      udp.endPacket();
    Demnach ist zu erkennen, dass das erste Paket fast nie ankommt, aber häufig Paket 2+3. Aber auch bei Paket2+3 sind manchmal 2-3 Codeschleifen (ca.9sek/loop) durchlaufen, ohne das diese ankommen.
    Hier sieht man anhand des Ports, welche Pakete ankommen:
    Klicke auf die Grafik für eine größere Ansicht

Name:	udp.png
Hits:	3
Größe:	144,2 KB
ID:	33791
    Geändert von d2x (15.11.2018 um 13:46 Uhr)

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Das ist in der Tat merkwürdig. Aber aus Erfahrung weiß ich: Du bist einen Schritt weiter.
    Ich bin nahe dran, den Code selber auf ein nodeMCU zu packen und es auszuprobieren. Es wäre möglich, das WiFiUdp.h Schuld daran ist, dass manche Pakete nicht ankommen. Aber nun gilt es, den Haken zu suchen, wo es hängt. Ist immer dasselbe Spiel: Fehler einkreisen, auch wenn es manchmal sehr mühevoll ist.
    Der Code, den Du oben hier reingestellt hast, ist der vollständig, dass man den einfach ausprobieren kann?
    Trotzdem würde ich ein zweites nodeMCU nutzen, um das auszuprobieren, ob dort auch nur die Pakete ankommen, die Du in den Tools bei Dir auch sehen kannst. Das müsste ja dann identisch sein.

    MfG

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2013
    Beiträge
    19
    Trotzdem würde ich ein zweites nodeMCU nutzen, um das auszuprobieren, ob dort auch nur die Pakete ankommen, die Du in den Tools bei Dir auch sehen kannst. Das müsste ja dann identisch sein.
    Vollkommen identisch. Dieser NodeMCU ist sogar aus einer anderen Lieferung. Den Tipp mit der WiFiUdp.h finde ich gut! Ich werde mal sehen ob eine neue Version zu finden ist und werde berichten

  4. #4
    HaWe
    Gast
    fangen wir doch mal ganz elementar an:
    welche Versionen hast du?
    Arduino IDE (1.8.6 ?)
    welches nodeMCU board (nodeMCU 1.0 = ESP-12E?)
    welche esp8288 board core Version (2.4.0 oder 2.4.2 ?) ( <<< 2.4.2 funktioniert bei mir nicht, nur 2.4.0)
    hast du die neuesten libs für #include <ESP8266WiFi.h> und #include <WiFiUdp.h> ? https://github.com/esp8266/Arduino/t...SP8266WiFi/src

    kannst du auch dieses (umgekehrte) Besipiel aus 6/2018 probieren : https://github.com/esp8266/Arduino/b...p-examples.rst ?

    falls wir hier nicht weiter kommen:
    poste mal deinen issue hier bei den Fachleuten/Entwicklern: https://github.com/esp8266/Arduino/issues

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2013
    Beiträge
    19
    Arduino IDE 1.8.3
    nodeMCU Board ist das ESP-12E
    ESP8266 Board Core Version : Wo kann ich die Versionsnummer checken?
    Die lib ESP8266WiFi von Ivan Grokhotkov ist Ver 1.0 und beinhaltet scheinbar auch die WiFiUdp.h . Über die Biblithekenverwaltung nicht updatebar.

    Ich habe das Beispiel 1:1 probiert und bekomme immer zuverlässig eine Antwort !!!

    Ich fürchte wir kommen weiter

    Was ist jetzt der Unterschied? Im Großen und Ganzen würde ich sagen, arbeitet das Beispielscetch mit remoteIP() und remotePort() ... ich hatte in meinem Code auch eine direkte IP (allerdings vom Router) getestet, habe aber auch das Problem gehabt. Ich versuche mal die IP vom Laptop. Bisher dachte ich eigentlich immer das sei egal.... ich probiere es mal.

    EDIT:

    Fehler gefunden!
    Es muss scheinbar die richtige Adresse der Gegenstelle, in meinem Fall die des Laptops, angegeben werden. Es kommt dann jedes Paket an. Kann mir jemand erklären wieso ich die Pakete nicht zuverlässig / vollständig sehen kann wenn diese an Broadcast oder an eine andere IP adressiert sind ? Was macht "Broadcast" denn dann für ein Sinn, wenn es nicht ankommt?

    EDIT2:

    Mein Code aus dem 1.Beitrag läuft damit allerdings immer noch nicht zuverlässig.....
    Es scheint am deepSleep zu liegen. Ohne geht es und mit kommt wieder nur ab und zu ein Paket an.
    Geändert von d2x (15.11.2018 um 21:36 Uhr)

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Mit dem Deep Sleep ist das so eine Sache. Es gibt verschiedene Schlaf-Modi, auch das Netztwerkmodul vom nodeMCU kann abgeschaltet werden. Er benötigt Zeit um alles wieder in Betrieb zu nehmen und die Verbindung muss wieder hergestellt werden. Vielleicht bist Du an irgendeiner Stelle einfach zu schnell. Musst überall zum Probieren mal längere Pausen einbauen und gucken, ob es dann funktioniert. Dann rausfummeln, wo er mehr Zeit benötigt, als Du dachtest.

    Deine Daten waren:
    Code:
    IPAddress IPudp (255, 255, 255, 255);
    IPAddress IPlocal (192, 168, 10, 201);
    IPAddress IPdns (192, 168, 10, 1);
    IPAddress IPgateway (192, 168, 10, 1);
    IPAddress IPsubnetmask (255, 255, 255, 0);
    Dein Netz ist 192.168.10. Dein Paket sollte per Broadcast an 192.168.10.255 gesendet werden, damit es innerhalb DEINES Netzes an jeden Teilnehmer verteilt wird. Ich glaube, Du bringst den Router ganz schön durcheinander.

    MfG
    Geändert von Moppi (16.11.2018 um 06:53 Uhr)

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    24.02.2013
    Beiträge
    19
    Guten Morgen Moppi,

    das war tatsächlich anfangs so. Ich habe mir das auch für die Fehlerbehebung irgendwo abgeguckt.

    Ich habe jetzt noch mal getestet:

    -ohne deepSleep an 192.168.10.255 -> Pakete kommen nur sporadisch an
    -ohne deepSleep an 192.168.10.68 -> Pakete kommen alle an.

    -mit deepSleep muss noch etwas anderes faul sein. Was, muss ich noch herausfinden....
    Die Resetleitung ist aber angeschlossen, so viel kann ich schon mal sagen
    Geändert von d2x (16.11.2018 um 07:39 Uhr)

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Guten Morgen auch!

    Wenn die Pakete an eine bestimmte Adresse alle ankommen, werden sie auch alle vom nodeMCU verschickt. Egal, ob sie nach .68 oder nach .255 verschickt werden, sie werden immer alle verschickt. Das nodeMCU ist nicht für die Verteilung zuständig.

    Die Resetleitung ist aber angeschlossen, so viel kann ich schon mal sagen
    Vielleicht stehst Du auf selbiger

    Gibt es beim Router oder was Du verwendest Einstellungen zu Broadcast-Nachrichten oder etwas, das was mit Broadcast zu tun hat? Zeitliche Limits oder irgend etwas?

    Normalerweise hat man in einem Netzwerk ja mehrere Teilnehmer. Was passiert, wenn Du nur noch einen Empfänger für die UDP-Pakete hast? Kommen dann alle Pakete dort an?

    MfG
    Geändert von Moppi (16.11.2018 um 08:16 Uhr)

Ähnliche Themen

  1. Welches Paket für "Atom" installieren?
    Von RoboTrader im Forum Arduino -Plattform
    Antworten: 9
    Letzter Beitrag: 18.11.2017, 13:30
  2. nodeMCU zu nodeMCU: keine Kommunikations-Verbindung mehr nach wenigen Minuten
    Von HaWe im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 0
    Letzter Beitrag: 02.10.2017, 14:01
  3. Deepsleep oder Sleep
    Von hubert_K im Forum PIC Controller
    Antworten: 1
    Letzter Beitrag: 02.09.2010, 12:32
  4. 1 Befehl für ein Paket von Befehlen?
    Von stani im Forum AVR Hardwarethemen
    Antworten: 12
    Letzter Beitrag: 10.10.2009, 11:42
  5. Keine RP6-CD im paket
    Von WarChild im Forum Robby RP6
    Antworten: 10
    Letzter Beitrag: 17.04.2009, 18:48

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen