ESP32: отправлять широковещательную передачу в локальную сеть и получать ее с помощью приложения для Android

#c# #android #arduino #broadcast #esp32

#c# #Android #arduino #широковещательная передача #esp32

Вопрос:

Я написал небольшой набросок, который заставляет ESP создать свою собственную сеть:

 #include <WiFi.h>

void setup() {

  Serial.begin(115200);
 
  WiFi.softAP("MyWiFiSSID", "MyWifiPW");

  IPAddress IP = WiFi.softAPIP();
  Serial.print("AP IP address: ");
  Serial.println(IP);
}
 

Теперь я пытаюсь отправлять только строку «test» каждые 5 секунд в виде широковещательной передачи через эту сеть (на порт 55559).:

 #include <AsyncUDP.h>

AsyncUDP udp;

void loop() {
  String testString = "test";
  udp.broadcastTo(testString.c_str(), 55559);

  delay(5000);
}
 

К сожалению, это, похоже, не работает должным образом.

Чтобы проверить, я написал немного на Xamarin.Android-приложение (язык программирования: C # вместо Java и VisualStudio вместо AndroidStudio, но это более или менее то же самое), которое просто содержит a <Button /> и a <TextView /> , для возможности просто получать и печатать эту трансляцию:

 BroadcastReceiver broadcastReceiver;
private void OnButtonClick(object sender, EventArgs e){
    broadcastReceiver = new BroadcastReceiver();
    broadcastReceiver.ConnectSocket();
    string ip = "";
    while (!broadcastReceiver.GetBroadcast(ref ip)){ }
    FindViewById<TextView>(Resource.Id.txt).Text = broadcastReceiver.BroadcastData;
}
 
 class BroadcastReceiver{
    public string BroadcastData{
        get{
            if (broadcastdatastring == ""){
                return "";
            }
            return broadcastdatastring;
        }
    }

    private IPEndPoint ipe;
    private Socket socket;
    private byte[] Broadcastdata = new byte[110];
    private string broadcastdatastring;

    public void ConnectSocket(){
        ipe = new IPEndPoint(IPAddress.Any, 55559);
        socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp){
            ReceiveBufferSize = 100 * 110
        };
        socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 1000);
        socket.Bind(ipe);
        return;
    }
    public bool GetBroadcast(ref string ip){
        ip = "";
        broadcastdatastring = "";

        if (socket?.Available > 0){
            var ep = (EndPoint)ipe;
            int received = socket.ReceiveFrom(Broadcastdata, ref ep);

            broadcastdatastring = Encoding.ASCII.GetString(Broadcastdata);
            ip = ((IPEndPoint)ep).Address.ToString();
        }
        return ip != "";
    }
}
 

Может кто-нибудь помочь или может сказать мне, почему я не могу получить эту трансляцию? Что-то не так в коде ESP32? Или в моем коде приложения (но при передаче другой широковещательной передачи с помощью C # в сеть приложение отображает ее, без проблем)? Или в чем дело?

Был бы очень рад каждому ответу!

С наилучшими пожеланиями

Комментарии:

1. Вы подключили телефон с приложением к сети Wi-Fi ESP или он все еще подключен к вашей домашней сети Wi-Fi?

2. Привет @ocrdu и большое вам спасибо за ваш ответ, нет, я подключил телефон с приложением к сети Wi-Fi ESP, я уверен ^^