Laden...

Wie kann ich alle Mikrocontroller im Netzwerk suchen?

Erstellt von Lucky_001 vor 3 Jahren Letzter Beitrag vor 3 Jahren 807 Views
L
Lucky_001 Themenstarter:in
15 Beiträge seit 2020
vor 3 Jahren
Wie kann ich alle Mikrocontroller im Netzwerk suchen?

Hallo,

ich habe mehrer mikrocontroller die via DHCP in meinem Netzwerk sind. Da ich in meiner Software am PC die IP adressen nicht alle manuell eingeben möchte, möchte ich gerne in meinem PC programm nach den mikrocontrollern suchen können. Heißt also, dass ich sie über einen bestimmten port ansteuere und damit quasi abfrage ob es ein mikrocontroller ist oder nicht. Leider ist auch genau da mein Problem. Ich habe noch nicht so viel mit Ethernet gemacht und habe daher nicht wirklich einen plan wie ich das umsetzten soll.

Ich danke im vorraus für alle Antworten!

MfG
Daniel S.

H
48 Beiträge seit 2020
vor 3 Jahren

das nennt sich discovery und muss das gerät unterstützen indem es zum beispiel auf ein broadcast im netzwerk hört. fertig gibt es das nicht.

T
708 Beiträge seit 2008
vor 3 Jahren

Aber halbfertig gibt es das.

Per UDP-Broadcast kannst Du alle Geräte in einem Netzwerk anfragen, welche in einer IP-Range liegen und auf einen Port lauschen.
.Net-Seitig z.B. der UdpClient.

Seitens des µC (ich nehme mal an ein ESP32 oder8266) gibt es WiFiUDP.

Dann sendest Du eine Nachricht raus und Deine Mikrocontroller antworten entsprechend darauf.

Oder man schaut sich z.B. an wie die OTA Update-Libraries das machen.
Dabei meldet sich auch jeder ESP im Netzwerk bei der Arduino-IDE und sie erscheinen in der COM-Port Liste (Mit MAC-Adresse und Namen).

L
Lucky_001 Themenstarter:in
15 Beiträge seit 2020
vor 3 Jahren

Ich habe mir mal das zum UdpClient durchgelesen. Nun hab ich aber noch ein paar fragen:

  1. Was ist der Host? Ist das das gateway sprich der router z. b.?

  2. Der port spielt doch keine Rolle, solange ich bei meinen Microcontrollern diesen port für Udp eingerichtet habe, oder?

  3. Ich habe zwei UdpClients in meinem Programm, der eine zum Zuhören, der ander zum Schreiben, richtig?

Und als mikrocontroller verwende ich selbstgebaute Microcontroller der Firma wo ich arbeite. Der Prozessor ist ein ATmega328PB-AU und die Ethernet verbindung wird über einen WIZnet W5500 (wie bei dem Ethernetshield des Arduinos) realiesiert.

Bei den Microcontrollern weiß ich auch noch nicht wie ich das genau machen soll.

P
441 Beiträge seit 2014
vor 3 Jahren

Wenn deine µC sich per DHCP eine IP holen... kannst du die Informationen evtl. von deinem DHCP Server auslesen?
Eine z.B. Fritzbox hat dazu eine passende API: https://avm.de/service/schnittstellen/
Gibt auch hier im Forum jemanden, der eine passende Bibliothek geschrieben hat, ob die die notwendige Heimnetzgeräte API implementiert kann ich dir aber nicht sagen.

T
708 Beiträge seit 2008
vor 3 Jahren
  1. Was ist der Host? Ist das das gateway sprich der router z. b.?

Nein, Du hast einen Sender und einen (oder mehrere) Empfänger.
Oder Master/Slave, Host/Client, wie auch immer man es nennen mag.

Sprich: Einer muss ja den Broadcast initiieren und jemand anderes diese Nachricht empfangen und beantworten.
In Deinem Fall wird die Software am PC der Host sein und die Mikrokontroller die Empfänger.
Der Router macht wie er heißt: Er routet den Weg zwischen den Geräten.

  1. Der port spielt doch keine Rolle, solange ich bei meinen Microcontrollern diesen port für Udp eingerichtet habe, oder?

Wenn Du den Port angibst, spielt er doch bereits eine Rolle!
Die Broadcast-Nachricht soll ja nicht alle Geräte im Netzwerk ansprechen, sondern nur Deine. Stell es Dir als eine Art Filter vor!

  1. Ich habe zwei UdpClients in meinem Programm, der eine zum Zuhören, der ander zum Schreiben, richtig?

Das ist etwas irreführend, da die Klasse UDPCLient heißt. Sie kann aber sowohl Sender als auch Empfänger sein.

Prinzipiell macht es das Beispiel von Microsoft ja genau so:
Nachricht an einen Port senden, optimaler weise mit einer IP ala 192.168.2.255 damit alle IP´s in der Range angesprochen werden.
Dann wartet dieser auf einen Reponse, also die Rückantwort. Diese enthält dann die IP des antwortenden Gerätes. Und was auch immer Du in die Nachricht schreibst.

Dann obliegt es Dir, nochmal eine weitere Direkt-Verbindung mit diesem einen Gerät aufzumachen oder ob Dir die Antwort schon reicht.

Du solltest dann natürlich berücksichtigen, dass Du bei mehreren Geräten im Netzwerk auch mehrere Antworten bekommen wirst.

PS: Bei den ATmega´s wird der Speicher natürlich schnell knapp.
Je nach dem was Du da überhaupt vor hast, würde ich ggf. einen anderen Weg einschlagen.