2016-08-21 2 views
0

Я использую UDP для подключения двух модулей nodemcu. Один nodemcu - точка беспроводного доступа, а другой nodemcu подключается к точке доступа в качестве клиента.ESP8266 отправить строку UDP в AP

Этот код отправляет IP-адрес клиента к точке доступа, когда клиент подключается:

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 nodemcu, пакет получает и получает подтверждение. Кроме того, если я подключаюсь к домашнему wi-fi-маршрутизатору с клиентским nodemcu и прослушиваю пакет с моего компьютера, я получаю IP-адрес клиента при его подключении.

+0

Проявляется ли ваш сервер ожидаемого IP-адрес, когда он действует в качестве точки доступа? У вашего клиента есть IP-адрес в той же подсети? – leetibbett

ответ

1

Мне пришлось менять номера портов для каждого подключенного esp8266. Если IP ВСД был 192.168.4.2, я поставил порт 2302, для 192.168.4.3, я поставил его в 2303 ...

0

Я старательно пытался неприятности снимать подобную проблему ...

Я тоже не мог получить пакеты, отправленные моим ESP8266's

Я изменил вашу линию;

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

работает каждый раз в настоящее время .... без потери пакетов ..

Смежные вопросы