Emma2
(Themenstarter)
Anmeldungsdatum: 28. Dezember 2018
Beiträge: 306
|
Die Datenmenge ist überschaubar, es geht nur um ein paar Bytes, und ich sehe mir das gern an. Danke. Nur "eigentlich" sollte es doch auch über den USB-Port (oder gar alle?) funktionieren. Oder mache ich einen Denkfehler?
|
kB
Supporter, Wikiteam
Anmeldungsdatum: 4. Oktober 2007
Beiträge: 7546
Wohnort: Münster
|
Emma2 schrieb: […] Raspberry Pi über USB mit dem PC verbinden
So etwas geht seit 2005 über den Kernel-Modul usbnet, ist aber in der Praxis nicht ganz so einfach. Das liegt an der Natur von USB, welches nur unsymmetrische Verbindungen zwischen einem steuernden (host, master, controler) und einem gesteuerten (slave, device, gadget) Gerät kennt und eben keine Host-Host-Verbindungen. Für letztere benötigt man ein spezielles aktives Host-Host-Kopplungskabel mit einem Knubbel in der Mitte. Dieser Knubbel enthält Elektronik, welche sich nach beiden Seiten als USB-Gadget ausgibt. Alternativen zu so einem Spezialkabel sind:
Wenn man solche Spezialkabel oder Konverter einsteckt, werden automatisch die benötigten Module geladen und es erscheint eine Softwareschnittstelle usb0 oder eth0 . Mit einem normalen passiven USB-Kabel, auch unter kreativer Verwendung nicht normgerechter Stecker- und Adern-Verschaltung, geht es nicht.
|
Emma2
(Themenstarter)
Anmeldungsdatum: 28. Dezember 2018
Beiträge: 306
|
Danke. Das ist zwar unbefriedigend, erklärt es aber. Heißt das denn, dass der Vorschlag von seahawk1986 mir auch nicht weiterhilft, weil ich dann ja immer noch auf beiden Seiten USB habe?
Umgekehrt schließe ich aber, wenn ich ein Host-to_host-Kabel habe, dann kann ich "ganz normal" mit Socket-Kommunikation zwischen beiden arbeiten? Oder gibt es andere, bessere Möglichkeiten? Ich will vom PC aus eine Aktion auf dem Pi anstoßen und von dort dann ein Ergebnis zurückschicken, mehr nicht. Wenn das im Gadget-Modus funktioniert, wäre mir das ja auch recht...
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10940
Wohnort: München
|
Emma2 schrieb: Heißt das denn, dass der Vorschlag von seahawk1986 mir auch nicht weiterhilft, weil ich dann ja immer noch auf beiden Seiten USB habe?
Auf der Seite vom Raspberry Pi hast du eine einfache serielle Verbindung über die GPIO-Pins und auf der Seite des PCs den USB-Serial Adapter, der das ganze vom 3,3V Logiklevel des Raspberry Pi konvertiert und die Daten auf auf einen USB-Endpoint bringt (und umgekehrt). Darüber kann man auch mit Hilfe des Point-to-Point_Protocol eine Netzwerkverbindung aufspannen. Umgekehrt schließe ich aber, wenn ich ein Host-to_host-Kabel habe, dann kann ich "ganz normal" mit Socket-Kommunikation zwischen beiden arbeiten?
Ja, wenn du eines findest, für das es auch Linux-Treiber gibt. Ich hatte sowas mal zur Zeiten von USB 1.1 Oder gibt es andere, bessere Möglichkeiten? Ich will vom PC aus eine Aktion auf dem Pi anstoßen und von dort dann ein Ergebnis zurückschicken, mehr nicht. Wenn das im Gadget-Modus funktioniert, wäre mir das ja auch recht...
Wäre Bluetooth eine Option? Darüber kann man u.a. auch eine serielle Verbindung oder PPP laufen lassen.
|
Emma2
(Themenstarter)
Anmeldungsdatum: 28. Dezember 2018
Beiträge: 306
|
seahawk1986 schrieb: Auf der Seite vom Raspberry Pi hast du eine einfache serielle Verbindung über die GPIO-Pins und auf der Seite des PCs den USB-Serial Adapter, der das ganze vom 3,3V Logiklevel des Raspberry Pi konvertiert und die Daten auf auf einen USB-Endpoint bringt (und umgekehrt). Darüber kann man auch mit Hilfe des Point-to-Point_Protocol eine Netzwerkverbindung aufspannen.
Sieht das dann auf beiden Seiten wie eine "einfache serielle Verbindung" (wie z.B. früher RS-232) aus? seahawk1986 schrieb: Wäre Bluetooth eine Option? Darüber kann man u.a. auch eine serielle Verbindung oder PPP laufen lassen.
Eher nicht, denn ich weiß nicht, ob das auf dem Zielsystem vorhanden ist.
Zur Erläuterung: Ich muss ein Gerät bauen, das an den PC gestöpselt wird und dann "ein bisschen" mit ihm kommuniziert. Da das Gerät selbst rechnen muss, habe ich einen Pi Zero ins Auge gefasst. (Kann zur Zeit aber nur mit einem Pi 4 testen, da der Zero kaum zu haben ist.) Mittlerweile ist mir dafür der Gadget-Mode sympathisch, denn dann kann mein Gerät einfach angestöpselt werden und zieht seinen Strom vom PC ohne eigene Versorgung. Dafür muss ich jedoch rausfinden, ob bzw. wie der Pi im Gadget-Mode selbst rechnen kann oder nur "passiv" ist (was blöd wäre und deshalb unwahrscheinlich ist).
Fazit: Es scheint aber wohl so, als würde dieser Ansatz https://raspberrypi.stackexchange.com/questions/112240/communication-between-raspi-and-another-computer-over-usb gar nicht funktionieren können, oder? Oder zumindest schreibt der Autor nichts über ein spezielles Host-to-Host-Kabel (was mir aber nach der obigen Bemerkung einleuchtet).
Auf alle Fälle danke ich Euch allen! Die Diskussion scheint mich auf den richtigen Weg zu führen! ♥
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 10940
Wohnort: München
|
Emma2 schrieb: seahawk1986 schrieb: Auf der Seite vom Raspberry Pi hast du eine einfache serielle Verbindung über die GPIO-Pins und auf der Seite des PCs den USB-Serial Adapter, der das ganze vom 3,3V Logiklevel des Raspberry Pi konvertiert und die Daten auf auf einen USB-Endpoint bringt (und umgekehrt). Darüber kann man auch mit Hilfe des Point-to-Point_Protocol eine Netzwerkverbindung aufspannen.
Sieht das dann auf beiden Seiten wie eine "einfache serielle Verbindung" (wie z.B. früher RS-232) aus?
Ja, auf dem Rpi hast du ein /dev/ttyAMA0 und am PC ein /dev/ttyUSB0 oder ähnliches (je nach eingesetztem USB-Seriell Adapter) und wie es aussieht, ist Raspbian lite so vor konfiguriert, dass man sich da direkt auf einer seriellen Konsole am System anmelden kann (was man über raspi-config abschalten kann):
pi@rpi1:~ $ cat /proc/cmdline
coherent_pool=1M snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 video=HDMI-A-1:1280x1024M@60 vc_mem.mem_base=0x1ec00000 vc_mem.mem_size=0x20000000 console=ttyAMA0,115200 console=tty1 root=PARTUUID=2eee37f1-02 rootfstype=ext4 fsck.repair=yes rootwait
AFAIK kann man Systemd-Units auch so konfigurieren, dass sie sich da an einem TTY vordrängeln und das für Input/Output nutzen: https://www.freedesktop.org/software/systemd/man/systemd.exec.html# (ich habe noch nicht ausprobiert, ob das auch klappt, wenn die Konsole per Kernel-Parameter gesetzt ist).
|
Emma2
(Themenstarter)
Anmeldungsdatum: 28. Dezember 2018
Beiträge: 306
|
Ohje... ich weiß jetzt wieder, wieso ich eigentlich ein Softwaremann bin... 😎 Sobald Hardware ins Spiel kommt, wird es immer eklig...
Mein Pi ist nun im "Gadget-Mode" gestartet- und zwar "einfach dadurch", dass ich ein Kabel vom PC (USB-A) am Pi (USB-C) angestöpselt habe. (Offenbar geht es nur an diesem Port... was aber auch Sinn macht, denn ein "Gadget" bezieht ja seinen Strom vom Host.) Allerdings - und das steht auch so in manchen Beiträgen - kommt es auf das verwendete Kabel an. Bei mir geht es nur mit einem "Entwicklerkabel", aber sobald ich das in eine Verlängerung (USB-A auf USB-A-Buchse) stecke, um nicht immer hinten am PC runfummeln zu müssen, geht es eben nicht mehr. Es funzt nur, wenn ich das Kabel direkt einstecke. (Vielleicht fällt auch die Spannung in der 1-m-Verlängerung zu sehr ab, ich habe keine Ahnung.)
Aber das Gute ist: Ich sehe den Pi jetzt auf dem PC, und ich sehe die Netzwerkkarte auch auf dem Pi, und der Pi ist "ganz normal" bedienbar! 😀 Mit anderen Worten: Die vorher von mir zitierten Beiträge nutzen wohl alle (ohne das zu schreiben) auch den Gadget-Mode, denn ur so funzt es. (Ich werde nun zusehen, dass ich die Konfiguration abschließe und das Ergebnis der Vollständigkeit halber hier posten. Vielen Dank für Eure Hilfe und Tipps!)
|
Emma2
(Themenstarter)
Anmeldungsdatum: 28. Dezember 2018
Beiträge: 306
|
Update: Es funktioniert! ... wenn auch nicht auf Anhieb.
Für den Fall, dass es interessiert oder sonst noch jemand nach der Lösung sucht: 1. Die Vorbereitungen auf dem Raspberry Pi müssen gemacht werden, wie es in verschiedenen Beiträgen zu finden ist, z.B. in https://raspberrypi.stackexchange.com/questions/112240/communication-between-raspi-and-another-computer-over-usb 2. Der Raspberry Pi muss über seine POWER-Buches (USB-C) an den PC angeschlossen werden, wobei nicht alle Kabel funktionieren, man muss also probieren. 3. Wird der Pi dann neu gebootet, sollte er "normal" nutzbar sein, aber auch auf dem PC als USB-Gerät (Gadget) auftauchen. 4. Auf dem Pi selbst gibt es dann ein Netzwerkgerät, das z.B. usb0 heißt, für das muss man zumindest IP und Maske konfigurieren, bei mir 192.168.10.222/24. 5. Auf dem PC ist es vielleicht einfach... vielleicht aber auch nicht... 5.1.1. Auf virtualisiertem Windows 10 wird das Gerät (nach Zuweisung des USB-Anschlusses an die VM) in der Regel als "COM-Port" erkannt und lässt sich auch nicht so einfach umkonfigurieren. Ein einziger Treiber scheint zu funktioonieren, wie hier beschrieben ist: https://www.factoryforward.com/pi-zero-w-headless-setup-windows10-rndis-driver-issue-resolved/. 5.1.2. Danach muss diese Netzwerkkarte auch auf Windows 10 mit IP/Maske konfiguriert werden. (Achtung: CONTROL.EXE als Admin ausführen! ... ist unter Win10 "aus Sicherheitsgründen" leider nicht mehr so einfach...) 5.1.3. Danach kann tatsächlich endlich einfach auf den Pi zugegriffen werden, z.B. mit ssh pi@192.168.10.222. 5.2.1 Auf meinem Linux wollte es erst nicht so richtig laufen: Ich konnte das Gerät als Netzwerkkarte sehen, aber trotz (ich meine:) korrekt zugewiesener IP, konnte ich nicht auf den Pi pingen oder mit ssh verbinden. Ich ziehe aber in Erwägung, dass ich irgendwo einen Tippfehler hatte, denn: 5.2.2 Als Zwischenschritt habe ich es unter Windows 10 zum Laufen gebracht (5.1) 5.2.3 Als ich es danach erneut unter Linux versucht habe, hat es auf Anhieb geklappt. Falls mir noch etwas auffällt, werde ich es nachliefern. Fürs Erste werde ich diesen Thread jedoch als gelöst kennzeichnen.
Nochmals ganz lieben Dank an alle!
|
Emma2
(Themenstarter)
Anmeldungsdatum: 28. Dezember 2018
Beiträge: 306
|
... jetzt habe ich doch noch einen Nachbrenner (der aber eher aus meinen mangelnden Linux-Kenntnissen resultiert): Wenn ich den Pi ab- und wieder anstöpsele, dann erkennt mein Linux eine neue Netzwerkverbindung und nutzt nicht die alte, eingerichtete erneut. Die neue Verbindung ist aber per Default als DHCP eingerichtet, ich muss also wieder in die Einstellungen und sie neu konfigurieren. Kann ich das irgendwie ändern? Kann ich die Netzwerkverbindung persistent machen? (Ich gebe zu, dass ich das später für Windows brauche, aber auch jetzt unter Linux wäre das schon eine schöne Sache... ich nehme also gern Lösungen für beide Systeme 😎) Update: Hat sich erledigt, bzw. konnte ich lösen: Ich habe auf dem Pi ein dnsmasq eingerichtet, so dass der PC als "Client" nun immer von dort eine IP-Adresse bekommt.
|