#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, я уверен ^^