ESP32:将广播发送到本地网络,并使用Android应用程序进行接收



我写了一个小草图,它使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);
}

现在我正试图将字符串";测试";每5秒通过该网络(在55559端口上(进行广播:

#include <AsyncUDP.h>
AsyncUDP udp;
void loop() {
String testString = "test";
udp.broadcastTo(testString.c_str(), 55559);
delay(5000);
}

不幸的是,这似乎无法正常工作。

为了检查一下,我写了一个Little Xamarin.Android-App(编程语言:C#而不是Java,VisualStudio而不是AndroidStudio,但它或多或少是一样的(,它只包含一个<Button /><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#向网络进行另一次广播时,应用程序会显示它,没有问题(?或者是怎么回事?

我真的很高兴得到每一个答案!

向致以最良好的问候

我认为ESP32代码并不完整。我使用这个代码,在ESP32和ESP12:之间运行良好

#include <WiFiUdp.h>
String broadcastIp;
WiFiUDP Udp;
IPAddress broadcast_Ip;
bool x= broadcast_Ip.fromString(broadcastIp);
Serial.printf("Reconectando antenas desde la WEB. %s:%dn", broadcast_Ip.toString().c_str(), localPort);    
if (broadcast_Ip.toString().c_str() == "0.0.0.0")
{
broadcastIp = "192.168.4.255";
bool x= broadcast_Ip.fromString(broadcastIp);
}
Udp.beginPacket(broadcast_Ip, localPort);
Udp.print("OKr");
Udp.endPacket();

相关内容

最新更新