Forum: PC-Programmierung Visual Basic + UPD + ESP8266


von MOBA 2. (Gast)


Lesenswert?

Hallo zusammen,

ich habe folgenden Aufbau: ESP8266 läuft mit UDP Socket auf PORT 3030 
(hier x)
VB-Programm auf den PC mit Sende UDPClient und Empfangs UDPClient auch 
auf PORT 3030 (hier y)


Ich kann von y -> x senden (ESP Empfang), sowohl auf die IP als auch 
global (224.0.0.1)
Ich kann von x -> y senden (PC Empfang), wenn ich dies auf die IP von y 
tue. Wenn ich beim ESP als IP 224.0.0.1 angebe (broadcast) dann geht es 
nicht. Jetzt die Frage warum nur?!

So konfiguriere ich den ESP für broadcast senden:
AT+CIPSTART="UDP","224.0.0.1",3030,3030,0


Das ist der VB-Code
1
//Variablen/Instanzen
2
Dim udpClient As New UdpClient(0)
3
Dim rec_udpClient As New UdpClient(3030)
4
Dim ep As IPEndPoint = New IPEndPoint(IPAddress.Any, 0)
5
6
//Sendefunktion (funktionsfähig)
7
udpClient.Connect(Form1.IP_GLOBAL_CALL, 3030)
8
Dim byteCommand As Byte() = New Byte() {}
9
byteCommand = Encoding.ASCII.GetBytes(buf_name)
10
udpClient.Send(byteCommand, byteCommand.Length)
11
12
//Empfangsroutine (broadcast geht nicht!), 100ms ticking
13
Private Sub UDP_RECEIVE_HANDLER_Tick(sender As Object, e As EventArgs) Handles UDP_RECEIVE_HANDLER.Tick
14
        Dim str As String = Encoding.ASCII.GetString(rec_udpClient.Receive(ep))
15
16
        If Not str = "" Then
17
            MsgBox(str)
18
        End If
19
End Sub


Weiß jmd. woran das liegen kann?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hast Du noch einen PC? Dann versuch mal, von dem einen Broadcast zu 
senden, wenn Dein VB-Programm den empfangen kann, liegt das Problem bei 
Deinem ESP8266, wenn es ihn aber nicht empfangen kann, liegt das Problem 
bei Deinem VB-Programm.

Das dürfte eine wichtige Fallunterscheidung für die weitergehende 
Fehlersuche sein.

Ansonsten ist die von Dir verwendete Adresse 224.0.0.1 eine 
Multicast-Adresse; wenn Du nur innerhalb Deines Netzwerkes einen 
UDP-Broadcast senden willst, solltest Du als Zieladresse die Adresse 
Deines Netzwerks nehmen und im letzten Byte 255 eintragen.

Wenn Dein Netzwerk beispielsweise 192.168.0.xxx lautet, ist die 
Broadcastadresse 192.168.0.255.

von MOBA 2. (Gast)


Lesenswert?

Rufus Τ. F. schrieb:
> Hast Du noch einen PC? Dann versuch mal, von dem einen Broadcast zu
> senden, wenn Dein VB-Programm den empfangen kann, liegt das Problem bei
> Deinem ESP8266, wenn es ihn aber nicht empfangen kann, liegt das Problem
> bei Deinem VB-Programm.
>
> Das dürfte eine wichtige Fallunterscheidung für die weitergehende
> Fehlersuche sein.
>
> Ansonsten ist die von Dir verwendete Adresse 224.0.0.1 eine
> Multicast-Adresse; wenn Du nur innerhalb Deines Netzwerkes einen
> UDP-Broadcast senden willst, solltest Du als Zieladresse die Adresse
> Deines Netzwerks nehmen und im letzten Byte 255 eintragen.
>
> Wenn Dein Netzwerk beispielsweise 192.168.0.xxx lautet, ist die
> Broadcastadresse 192.168.0.255.


Danke werde ich testen. PC = Laptop (ist für mich ugs trotzdem nen PC 
:))

Also wenn ich vom PC aus an multicast sende, Empfang er selbst auch 
nichts. Ich denke das liegt irgendwie am VB Programm nur warum.

Kann man eigentlich eine der beiden (Broadcast oder multicast) 
weiterleiten durch forwarding für Fernzugriff?

von MOBA 2. (Gast)


Lesenswert?

Ich habe es getestet mit Broadcast (hinten 255). Das geht.
Warum geht Multicast nicht?!

von Planlos (Gast)


Lesenswert?

Multicast ist mehr als nur "UDP mit Adresse aus 224.0.0.0 .. 
239.255.255.255"

Würde dir vorschlagen, die zugehörigen RFCs oder wenigstens die 
Wikipedia-Seiten dazu zu lesen.

Marius D. schrieb:
> Kann man eigentlich eine der beiden (Broadcast oder multicast)
> weiterleiten durch forwarding für Fernzugriff?

Broadcast: Nein.
Multicast: Jein. 224.0.0.1 ist aber explizit "All Systems on this 
Subnet", also auch extra ohne Weiterleitung.

Andere Multicasts lassen sich routen, aber da wird sich dein 
Internet-Provider vermutlich querstellen, und Multicast, wenn überhaupt, 
nur "in die Andere Richtung" zulassen.

Als Start müsstest du dir eine Multicast-IP reservieren lassen, laut der 
Liste hier:
http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml
geht das scheinbar auch für Privatpersonen.

Einfacher: Fernzugriff per VPN.

Noch einfacher, aber das willst du ja nicht hören: MQTT :)

von Normal Z. (normalzeit)


Lesenswert?

Rufus Τ. F. schrieb:
> Wenn Dein Netzwerk beispielsweise 192.168.0.xxx lautet, ist die
> Broadcastadresse 192.168.0.255

Nicht unbedingt! Das hängt auch noch von der verwendeten Netzmaske ab. 
Dein Broadcast gilt so nur in einem /24 Netz.

Gruss

NormalZeit

von MOBA 2. (Gast)


Lesenswert?

Gerhard J. schrieb:
> Rufus Τ. F. schrieb:
>> Wenn Dein Netzwerk beispielsweise 192.168.0.xxx lautet, ist die
>> Broadcastadresse 192.168.0.255
>
> Nicht unbedingt! Das hängt auch noch von der verwendeten Netzmaske ab.
> Dein Broadcast gilt so nur in einem /24 Netz.
>
> Gruss
>
> NormalZeit

Hatte ich auch gelesen hier: 
https://en.wikipedia.org/wiki/Broadcast_address

Meine Netzmask ist: 255.255.255.0. Jetzt die Frage, wie die Broadcast 
berechnet wird. Das habe ich nicht ganz verstanden.

von MOBA 2. (Gast)


Lesenswert?

> Andere Multicasts lassen sich routen, aber da wird sich dein
> Internet-Provider vermutlich querstellen, und Multicast, wenn überhaupt,
> nur "in die Andere Richtung" zulassen.
>
> Als Start müsstest du dir eine Multicast-IP reservieren lassen, laut der
> Liste hier:
> http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xhtml
> geht das scheinbar auch für Privatpersonen.
>
> Einfacher: Fernzugriff per VPN.
>
> Noch einfacher, aber das willst du ja nicht hören: MQTT :)


Ja ich weiß. 224.0.0.1 ist alle System im Netz. Genau das will ich ja. 
In die eine Richtung klappt es, aber nicht in die andere. Ich weiß nur 
nicht warum. Wenn ich den Packet Sender nutze, kann ich auf 224.0.0.1 
auch nichts empfangen.

Wenn Multicast bidirektional läuft, dann kann ich eine Frage senden und 
ALLE Geräte antworten mit NAME+IP. Und dann läuft der Rest auch wie 
gehabt.

Optional wäre nun die Möglichkeit Broadcast zu nutzen, allerdings wie 
Normalzeit geschrieben hat, ist das nicht so statisch wie die Multicast. 
Die muss erst berechnet werden....

von Planlos (Gast)


Lesenswert?

Marius D. schrieb:
> Meine Netzmask ist: 255.255.255.0. Jetzt die Frage, wie die Broadcast
> berechnet wird. Das habe ich nicht ganz verstanden.

Alle Bits, die nicht in der Netmask gesetzt sind, auf 1.

von MOBA 2. (Gast)


Lesenswert?

Ich habe übrigends auch mal Packet Sender, mein Terminal und ESP am 
laufen. Dort sehe ich ebenfalls folgendes: Per Multicast empfängt NUR 
der ESP. Selbst der Packet Sender bekommt keine Daten...

von MOBA 2. (Gast)


Lesenswert?

Planlos schrieb:
> Marius D. schrieb:
>> Meine Netzmask ist: 255.255.255.0. Jetzt die Frage, wie die Broadcast
>> berechnet wird. Das habe ich nicht ganz verstanden.
>
> Alle Bits, die nicht in der Netmask gesetzt sind, auf 1.

Und dann mit der IP OR, richtig? Das käme hin...

von Planlos (Gast)


Lesenswert?

Zu Multicast:

Die ESP-SDK(*) (auf der auch die AT-Firmware, die du verwendest, 
aufbaut) bietet die API-funktionen igmp_joingroup und igmp_leavegroup, 
um den ESP in eine Multicast-Gruppe aufzunehmen bzw wieder zu entfernen.

Ob und wie du diese Funktionen über AT-Befehle erreichen kannst, musst 
du selber gucken.


*) Kommen eigentlich aus dem LWIP-Stack, sind also nicht ESP-Spezifisch.


Zu Broadcast: ja.

broadcast = ( IP & maske ) | ~maske;

von MOBA 2. (Gast)


Lesenswert?

Planlos schrieb:
> Zu Multicast:
>
> Die ESP-SDK(*) (auf der auch die AT-Firmware, die du verwendest,
> aufbaut) bietet die API-funktionen igmp_joingroup und igmp_leavegroup,
> um den ESP in eine Multicast-Gruppe aufzunehmen bzw wieder zu entfernen.
>
> Ob und wie du diese Funktionen über AT-Befehle erreichen kannst, musst
> du selber gucken.
>
>
> *) Kommen eigentlich aus dem LWIP-Stack, sind also nicht ESP-Spezifisch.
>
>
> Zu Broadcast: ja.
>
> broadcast = ( IP & maske ) | ~maske;


Wozu brauche ich das mit dem Aufnehmen der Adresse beim ESP?
Ich habe diese Funktion aber gerade auch bei VB gefunden, vll. liegt es 
daran, dass er nicht auf Multicast reagiert?! Broadcast musste man 
nämlich auch aktivieren.

von MOBA 2. (Gast)


Lesenswert?

Jetzt geht es am Terminal mit multicast. Mann musste erst joinen.
Allerdings wenn ich vom ESP sende mit der Konfig 
"AT+CIPSTART="UDP","224.0.0.1",3030,3030,0" geht es nicht. Liegt aber 
jetzt am ESP, auf der Terminalseite geht alles.

Empfangen macht er komischer weise über multicast, nur senden wohl 
nicht...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.