Arduino ESP32 - не может отправлять UDP-пакеты - PullRequest
0 голосов
/ 23 мая 2019

Я хочу отправить широковещательное сообщение со своего компьютера, а затем ответить на него с ESP32 Мне удается получить широковещательное сообщение, но я не могу отправить ответное сообщение (я не вижу его в Wireshark компьютера)

Я использовал популярную версию из Интернета, поэтому код должен быть в порядке, но я не понимаю, в чем дело.

Я довольно новичок в Arduino, поэтому не совсем понимаю все аспекты

это код, который я использую.

Возможно, стоит упомянуть, что я использую компьютер и Wi-Fi ESP32 на своей горячей точке iPhone.

Я попытался отправить UDP-сообщение на ESP32 самому себе, и это сработало, поэтому проблема должна заключаться в том, что ESP32 не может отправлять сообщения в сеть.


#include "WiFi.h"
#define led 2
#include <Thread.h>
#include <WiFiUdp.h>

const char* ssid = "ssid";
const char* password = "password";
char packetBuffer[255];
WiFiUDP Udp;
WiFiServer wifiServer(10100);
Thread myThread = Thread();

void setup() {
  pinMode(led, OUTPUT);
  digitalWrite(led, LOW);
  Serial.begin(115200);
  myThread.enabled = true;
  myThread.setInterval(10);
  myThread.ThreadName = "myThread tag";
  myThread.onRun(listen_broad);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi..");
  }
  Serial.println("Connected to the WiFi network");
  Serial.println(WiFi.localIP());
  wifiServer.begin();
  Udp.begin(10100);
}

void listen_broad(){
  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());
    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());
    int i = 0;
    char ReplyBuffer[] = "ACK"; 
    while (ReplyBuffer[i] != 0) 
    Udp.write((uint8_t)ReplyBuffer[i++]);
    Udp.endPacket();
  }
}

void loop() {
  if(myThread.shouldRun()){
    myThread.run();
  }

  WiFiClient client = wifiServer.available();
  if (client) {
    client.write("nonono");
    while (client.connected()) {
      while (client.available()>0){
        char c = client.read();
        Serial.write(c);
        switch (c) {
          case '1':
            //TOGGLE LIGHT//
            if(digitalRead(led)){
              Serial.write("Turning OFF");
              digitalWrite(led, LOW);
            }
            else{
              Serial.write("Turning ON");
              digitalWrite(led, HIGH);
            }
            break;
            /////////////////
          case '2':
            //CLOSE////////
            client.stop();
            break;
            ////////////////
          default:
            Serial.write("DEF");
            break;
        }
      }
      delay(10);
    }
    Serial.println("Client disconnected");    
  } 
}
...