Wemos D1 mini PRO UDP Client problemen

Software vragen voor ESP chip familie
Berichten: 6
Geregistreerd: 25 Feb 2018, 18:23

Wemos D1 mini PRO UDP Client problemen

Berichtdoor mnalxz » 03 Mrt 2018, 18:03

Hallo,
ik heb een probleem met het verzenden van data via een UDP client op een werkend Wemos D1 mini PRO board waarop ook een UDP Server wel succesvol draait.
De bedoeling is om op elk gewenst moment na 1. het drukken op een switch, 2.het optreden van een event of iets dergelijks door middel van een op dat moment te creeren Client en UDP pakket te verzenden naar "ANY" op te geven ip addres met UDP Server en naar "ANY" op te geven poort waarop deze Server luisterd, het wachten op een reply van de server is niet noodzakelijk.
Na het verzenden van het pakket mag de client weer gedestroyed worden.
Ik heb meerdere testen gedaan met een client maar telkens (in elke test met gewijzigde code) wordt als RemoteIP 0.0.0.0 en als remote port 0 weergegeven.
Ik heb geen idee waarom de client na een WifiClient.begin("10.0.0.193". 2101) deze remote waarden terug geeft.
De verzonden pakketten komen dus ook niet aan bij IP 10.0.0.193 op poort 2101.

hieronder een klein stukje code waar de Server uitgeschakeld wordt, en de Client gecreerd, vervolgens de client weer gedestryed en de Server gereenabled.

Client functie :
void SentMessToFamily() {

WiFiUDP UDPClientForFamilyIP;

int BytesSent = 0;
int FunctResult = 0;
String Msg = "SC";
const char* message = Msg.c_str();


// Stop the UDP-Server which is using port 2102
if ((UDPTestServer.operator =(UDPTestServer)) == 1) {
Serial.println("UDPTestServer is running");
} else if ((UDPTestServer.operator =(UDPTestServer)) == 0) {
Serial.println("UDPTestServer is NOT running");
}

Serial.println("UDPTestServer - STOP");
UDPTestServer.stop();

if ((UDPTestServer.operator =(UDPTestServer)) == 1) {
Serial.println("UDPTestServer is running");
} else if ((UDPTestServer.operator =(UDPTestServer)) == 0) {
Serial.println("UDPTestServer is NOT running");
}
Serial.println("***************");

yield();


// Start the UDP-Client using port 2101 for input
if ((UDPClientForFamilyIP.operator =(UDPClientForFamilyIP)) == 1) {
Serial.println("UDPClientForFamilyIP is running");
} else if ((UDPClientForFamilyIP.operator =(UDPClientForFamilyIP)) == 0) {
Serial.println("UDPClientForFamilyIP is NOT running");
}

Serial.println("UDPClientForFamilyIP - START");
FunctResult = UDPClientForFamilyIP.begin(2101); // Port to receive a Reply from a Remote, NOT USED YET for input
if (FunctResult == 1) {
Serial.println("UDPClientForFamilyIP is running");
Serial.println("Reply port set..");
} else if (FunctResult == 0) {
Serial.println("UDPClientForFamilyIP is NOT running");
Serial.println("Reply port NOT set..");
}
Serial.println("***************");

yield();

// Sent a Packet "SC" by this UDP-Client to RemoteIP "10.0.0.193" and RemotePort 2101
FunctResult = UDPClientForFamilyIP.beginPacket("10.0.0.193", 2101);
if (FunctResult == 1) {
Serial.println("beginPacket - Succesful");
} else if (FunctResult == 0) {
Serial.println("beginPacket - NOT Succesful");
} else {
Serial.println("beginPacket - Unknown result");
}

Serial.println("Sent a Packet with the content 'SC' to the Remote");
BytesSent = UDPClientForFamilyIP.write(message, Msg.length());

FunctResult = UDPClientForFamilyIP.endPacket();
if (FunctResult == 1) {
Serial.println("endPacket - Packet Sent was Succesful");
} else if (FunctResult == 0) {
Serial.println("endPacket - Packet Sent was NOT Succesful");
} else {
Serial.println("endPacket - Unknown result");
}

Serial.print("There was a message of ");
Serial.print(BytesSent);
Serial.print(" Bytes sent to the Remote --> content was : ");
Serial.println(message);
Serial.println("***************");

yield();

// Display the information where the message was sent to
Serial.print("Packet was sent to RemoteIP : ");
Serial.println(UDPClientForFamilyIP.remoteIP());
Serial.print("Packet was sent to RemotePort : ");
Serial.println(UDPClientForFamilyIP.remotePort());
Serial.println("***************");

yield();

// Stop the UDP-Client
if ((UDPClientForFamilyIP.operator =(UDPClientForFamilyIP)) == 1) {
Serial.println("UDPClientForFamilyIP is running");
} else if ((UDPClientForFamilyIP.operator =(UDPClientForFamilyIP)) == 0) {
Serial.println("UDPClientForFamilyIP is NOT running");
}

Serial.println("UDPClientForFamilyIP - STOP");
UDPClientForFamilyIP.stop();

if ((UDPClientForFamilyIP.operator =(UDPClientForFamilyIP)) == 1) {
Serial.println("UDPClientForFamilyIP is running");
} else if ((UDPClientForFamilyIP.operator =(UDPClientForFamilyIP)) == 0) {
Serial.println("UDPClientForFamilyIP is NOT running");
}
Serial.println("***************");

yield();

// Restart the UDP-Server again
if ((UDPTestServer.operator =(UDPTestServer)) == 1) {
Serial.println("UDPTestServer is running");
} else if ((UDPTestServer.operator =(UDPTestServer)) == 0) {
Serial.println("UDPTestServer is NOT running");
}

Serial.println("UDPTestServer - START");
UDPTestServer.begin(2102);

if ((UDPTestServer.operator =(UDPTestServer)) == 1) {
Serial.println("UDPTestServer is running");
} else if ((UDPTestServer.operator =(UDPTestServer)) == 0) {
Serial.println("UDPTestServer is NOT running");
}
Serial.println("***************");

yield();
}



Resultaat van de logging :
UDPTestServer is running
UDPTestServer - STOP
UDPTestServer is NOT running
***************
UDPClientForFamilyIP is NOT running
UDPClientForFamilyIP - START
UDPClientForFamilyIP is NOT running
Reply port NOT set..
***************
beginPacket - Succesful
Sent a Packet with the content 'SC' to the Remote
endPacket - Packet Sent was Succesful
There was a message of 2 Bytes sent to the Remote --> content was : SC
***************
Packet was sent to RemoteIP : 0.0.0.0
Packet was sent to RemotePort : 0

***************
UDPClientForFamilyIP is running
UDPClientForFamilyIP - STOP
UDPClientForFamilyIP is NOT running
***************
UDPTestServer is NOT running
UDPTestServer - START
UDPTestServer is running
***************

Advertisement

Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: Wemos D1 mini PRO UDP Client problemen

Berichtdoor zuid » 16 Apr 2018, 11:34

Ik ben nu bezig met een project waarbij ik een Wemos D1 V2 afwisselend (via een soft AP) wil kunnen koppelen met twee verschillen WiFi netwerken hier bij mij thuis. In de software gebruik ik de udp optie om de interne klok op de juiste tijd te kunnen zetten. Ook ik heb/had problemen met de udp client na het wisselen van netwerk. Ook bij mij is dan het IP adres plotseling nul. Deels heb ik het kunnen oplossen door de server en de udp client niet af te sluiten en opnieuw te starten. Zelf een udp.stop() en daarna een esp.restart gaf meestal problemen met de udp verbinding. Het lijkt er op dat bij het afsluiten van sommige WiFi componenten in de esp8622 intern iets fout gaat.

Gebruikers-avatar
Berichten: 241
Geregistreerd: 22 Jan 2013, 16:40

Re: Wemos D1 mini PRO UDP Client problemen

Berichtdoor zuid » 17 Apr 2018, 06:39

Ik heb nog eens rond gekeken op internet naar voorbeelden van udp communicatie. Ik heb het idee dat je oplossing eenvoudiger is dan nu geprobeerd te maken. Je hebt een werkende UDP server op bijvoorbeeld IP 10.0.0.190 luisterend naar poort 2102.
Je software werkt voor binnenkomende berichten.
Ik neem aan dat je ook eventueel een antwoord op een binnenkomen bericht kan geven.
Dit zou er dan ongeveer zo uit zien:
// send back a reply, to the IP address and port we got the packet from
UDPTestServer.beginPacket(Udp.remoteIP(), Udp.remotePort());
UDPTestServer.write(replyPacket);
UDPTestServer.endPacket();
//
Bovenstaande zit in de loop "wacht op pakket".
Nu wil je onafhankelijk van een binnen komend pakket een bericht sturen naar 10.0.0.193 op poort 2101.
Dit zou er zo uit kunnen zien (als onderdeel van de server loop):
//
if (event x of switch a){
UDPTestServer.beginPacket("10.0.0.193", "2101"); //IP adres en poort uiteraard in het juiste formaat
UDPTestServer.write(eventPacket);
UDPTestServer.endPacket();
}
//

Dus zonder afsluiten van de server en opstarten van een client.
(Of had je het inmiddels al opgelost :) )

Terug naar ESP Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten