2016-08-21 185 views
0

我使用UDP連接兩個nodemcu模塊。一個節點mcu是無線訪問點,另一個節點mcu連接到訪問點作爲客戶端。ESP8266發送UDP字符串到AP

此代碼發送客戶端的IP地址到AP時,客戶端連接:

Udp.beginPacket("192.168.4.1", UDPPort);//send ip to server 
    char ipBuffer[20]; 
    WiFi.localIP().toString().toCharArray(ipBuffer, 20); 
    Udp.write(ipBuffer); 
    Udp.endPacket(); 
    Serial.println("Sent ip adress to server"); 

但在服務器端,我不收到此數據包。

客戶:

#include <ESP8266WiFi.h> 
#include <WiFiUDP.h> 

unsigned int UDPPort = 2390;  // local port to listen on 

char packetBuffer[255]; //buffer to hold incoming packet 
char replyBuffer[] = "acknowledged";  // a string to send back 

WiFiUDP Udp; 

void setup() { 
    Serial.begin(115200); 
    WiFi.begin("Wi-Fi"); 
    Serial.println(); 
    Serial.print("Wait for WiFi"); 

    while (WiFi.status() != WL_CONNECTED) { 
     delay(500); 
     Serial.print("."); 
    } 
    Serial.println(""); 
    Serial.println("WiFi connected"); 
    Serial.println("IP address: " + WiFi.localIP().toString()); 

    Udp.begin(UDPPort); 

    Udp.beginPacket("192.168.4.1", UDPPort);//send ip to server 
    char ipBuffer[255]; 
    WiFi.localIP().toString().toCharArray(ipBuffer, 255); 
    Udp.write(ipBuffer); 
    Udp.endPacket(); 
    Serial.println("Sent ip adress to server"); 
    } 

void loop() { 

    // if there's data available, read a packet 
    int packetSize = Udp.parsePacket(); 
    if (packetSize) { 
    Serial.print("Received packet of size "); 
    Serial.println(packetSize); 
    Serial.print("From "); 
    IPAddress remoteIp = Udp.remoteIP(); 
    Serial.print(remoteIp); 
    Serial.print(", port "); 
    Serial.println(Udp.remotePort()); 

    // read the packet into packetBufffer 
    int len = Udp.read(packetBuffer, 255); 
    if (len > 0) { 
     packetBuffer[len] = 0; 
    } 
    Serial.println("Contents:"); 
    Serial.println(packetBuffer); 

    // send a reply, to the IP address and port that sent us the packet we received 
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); 
    Udp.write(replyBuffer); 
    Udp.endPacket(); 
    } 

} 

服務器:

#include <ESP8266WiFi.h> 
#include <WiFiUDP.h> 

unsigned int UDPPort = 2390;  // local port to listen on 

char packetBuffer[255]; //buffer to hold incoming packet 
char ReplyBuffer[] = "acknowledged";  // a string to send back 
WiFiUDP Udp; 
void setup() { 
    Serial.begin(115200); 

    WiFi.softAP("Wi-Fi"); 
    Udp.begin(UDPPort); 
    Serial.println(); 
    Serial.println("Started ap. Local ip: " + WiFi.localIP().toString()); 
} 

void loop() { 
    // if there's data available, read a packet 
    int packetSize = Udp.parsePacket(); 
    if (packetSize) { 
    Serial.print("Received packet of size "); 
    Serial.println(packetSize); 
    Serial.print("From "); 
    IPAddress remoteIp = Udp.remoteIP(); 
    Serial.print(remoteIp); 
    Serial.print(", port "); 
    Serial.println(Udp.remotePort()); 

    // read the packet into packetBufffer 
    int len = Udp.read(packetBuffer, 255); 
    if (len > 0) { 
     packetBuffer[len] = 0; 
    } 
    Serial.println("Contents:"); 
    Serial.println(packetBuffer); 
    // send a reply, to the IP address and port that sent us the packet we received 
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); 
    Udp.write(ReplyBuffer); 
    Udp.endPacket(); 
    } 

} 

的另一件事情不工作:如果我從連接到AP nodemcu客戶nodemcu(也連接到AP)其他設備發送數據包,數據包已收到,但我沒有收到確認答覆回設備。

其他一切正常 - 如果我從另一個設備發送一個數據包到AP節點mcu,數據包被接收到,我得到確認。 另外,如果我使用客戶端nodemcu連接到我的家庭Wi-Fi路由器並從我的PC偵聽數據包,則在連接時我會獲取客戶端的IP地址。

+0

請問您的服務器表現出預期的IP地址時,它作爲接入點?您的客戶端是否在同一子網上有IP? – leetibbett

回答

1

我必須更改每個連接的esp8266的端口號。如果ESP的IP是192.168.4.2,我設置端口2302,爲192.168.4.3,我將它設置爲2303 ...

0

我刻意在試圖麻煩拍攝類似的問題...

我也無法得到我的ESP8266發送的任何包裹

我改變了你的路線;

WiFi.softAP(「Wi-Fi」);
to ....
WiFi.mode(WIFI_STA);

現在屢試不爽....沒有丟包..