Hallo, ich habe ein Problem bei der Kommunikation zwischen einem ESP8266 und meinem PC. Die beiden sollen mit dem UDP Protokoll miteinander Kommunizieren.
Ich habe mein Problem weiter Analysiert und folgendes herausgefunden:
Der PC kann eine Nachricht an seine eigene IP Adresse über das UDP-Protokoll senden und empfängt diese dann auch. Der PC kann auch eine Nachricht über das UDP-Protokoll an den ESP8266 senden und dieser Empfängt sie. Jedoch kann der ESP8266 sich selber keine Nachricht über das UDP-Protokoll senden(der ESP behauptet die Absendung war erfolgreich, doch empfangen tut er diese Nachricht nicht). Wenn der ESP Versucht eine Nachricht über das UDP-Protokoll an den PC zu schicken kommt diese auch nicht an, trotz, dass er die Nachricht als erfolgreich abgesendet ausgibt.
Meine Vermutungen, wo der Fehler liegen könnte sind:
-Der ESP8266 ist in gewisser Weise kaputt, aber da der ESP32 es auch nicht hinkriegt ist diese Vermutung unwahrscheinlich.
-Die nächste Vermutung wäre, dass der ESP8266 durch das WLAN geblockt wird, aber ich habe auch teste mit einem ESP32 als Soft Access Points versucht und dies hat auch nicht funktioniert.
-Es gäbe noch die Möglichkeit, dass der ESP8266 vom PC geblockt wird, das würde aber nicht erklären, weshalb der ESP8266 sich selbst keine Nachricht zukommen lassen könnte.
-Das Wahrscheinlichste Problem ist ein Problem nach der Absendung, da der ESP8266 ausgibt das die Absendung erfolgreich war, aber es gibt keine Möglichkeit herauszufinden, ob Sie auch ihr Ziel erreicht hat. Es kann entweder daran liegen, das irgendwie die IP Adresse nicht gefunden wird oder der Port falsch ist(dies habe ich beides aber mehrfach kontrolliert), oder das generell etwas nach der Absendung schief geht.
Also ist am Wahrscheinlichsten das nach der Absendung etwas schief läuft, oder?
Also Kommunikation PC → WLAN–>PC und PC–>WLAN–>ESP8266 funktioniert.
Nicht funktionieren tut ESP8266 → WLAN–>ESP8266 und ESP8266 → WLAN–>PC.
Mein PC gibt lediglich die Empfangene UDP Nachricht aus und das Programm funktioniert auch
Der ESP8266 wird über die ArduinoIDE programmiert und hat folgenden Code:
noiasca:
Schritt 1 würde ich mal exakt das Beispiel aus der IDE probieren.
ESP8266Wifi / UDP
im Kopf steht:
UDPSendReceive.pde:
Ich habe es mal so ausprobiert bzw. etwas umgeändert. Der ESP sendet sich selber jetzt jede Sekunde “Hallo World”.
#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#ifndef STASSID
#define STASSID "XXXX"
#define STAPSK "XXXXXXXXX"
#endif
unsigned int localPort = 8888; // local port to listen on
// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE + 1]; //buffer to hold incoming packet,
char ReplyBuffer[] = "Hallo World!"; // a string to send back
WiFiUDP Udp;
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(STASSID, STAPSK);
while (WiFi.status() != WL_CONNECTED) {
Serial.print('.');
delay(500);
}
Serial.print("Connected! IP address: ");
Serial.println(WiFi.localIP());
Serial.printf("UDP server on port %d\n", localPort);
Udp.begin(localPort);
}
void loop() {
// if there's data available, read a packet
int packetSize = Udp.parsePacket();
if (packetSize) {
Serial.printf("Received packet of size %d from %s:%d\n (to %s:%d, free heap = %d B)\n",
packetSize,
Udp.remoteIP().toString().c_str(), Udp.remotePort(),
Udp.destinationIP().toString().c_str(), Udp.localPort(),
ESP.getFreeHeap());
// read the packet into packetBufffer
int n = Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
packetBuffer[n] = 0;
Serial.println("Contents:");
Serial.println(packetBuffer);
}
else
{
// send a reply, to the IP address and port that sent us the packet we received
Udp.beginPacket(WiFi.localIP(), Udp.localPort());
Udp.write(ReplyBuffer);
Udp.endPacket();
Serial.println("Antwort:");
Serial.println(ReplyBuffer);
delay(1000);
}
}
Dies ist die Ausgabe des Monitors:
13:08:58.184 → …Connected! IP address: 192.168.10.125
13:09:01.970 → UDP server on port 8888
13:09:01.970 → Antwort:
13:09:01.970 → Hallo World!
13:09:02.952 → Antwort:
13:09:02.986 → Hallo World!
13:09:03.966 → Antwort:
13:09:03.966 → Hallo World!
Der ESP8266 empfängt also die Nachrichten noch nicht, habe ich da was falsch verändert?
Und danke für die schnelle Rückmeldung
Danke für die ganze schnelle Hilfe.
Ich habe eure Vorschläge alle ausprobiert und habe herausgefunden, dass der ESP8266 vollkommen in Takt ist, er hat perfekt mit dem ESP32 kommunizieren können. Mit sich selber hat er nicht Kommunizieren können, wo ich ja jetzt weiß das das auch gar nicht gehen kann.
Der Fehler lag am Code auf dem PC ich habe ein Programm geschrieben mit zwei UDPs in VB, einen zum Empfangen, einen zum Senden. Aus Ratlosigkeit habe ich einfach mal einen der beiden UDPs herraus gelöscht und diesen dann für Empfangen und Senden verwendet, dann funktionierte alles.
Wieso weiß ich nicht, aber alles läuft wieder.