Hallo! Ich habe einen autonomen Roboter gebaut, der einen Raspberry Pi (Modell B) und ein "Arduino Mega 2560"-Board besitzt. Der Raspi, der einen WLAN-Stick hat und daher über ein Ad-Hoc-Netzwerk über SSH oder Remote-Desktop für meinen Laptop erreichbar ist, soll im Wesentlichen das Kamerabild auswerten und das Arduino-Board, welches natürlich sein USB-Port hat, kümmert sich um alles andere an dem Roboter. Jetzt wollte ich den Raspi und das Arduino via USB miteinander verbinden, damit die beiden so einiges an Daten hin- und hertauschen können, während der Roboter gerade in Betrieb ist (der Raspi hat übrigens einen USB-Hub). Da dachte ich mir folgendes: Den Raspi programmiere ich über SSH über das Ad-Hoc-Netz, ganz bequem drahtlos. Da der ohnehin mit dem Arduino über USB verbunden ist, könnte ich doch das Arduino-Programm auch von dem Raspi über USB auf den Arduino schreiben lassen. Dazu hatte ich folgende Ansätze: 1. Die Arduino-IDE auf dem Raspi installieren und über Remote-Desktop programmieren. Leider wird das Bild, das ich über Remote-Desktop (ich nutze xrdp) bekomme, sehr langsam aktualisiert, das macht nicht so richtig Spaß... 2. Den Raspi irgendwie so konfigurieren, dass er den seriellen Port des Arduinos über das Ad-Hoc-Netzwerk bereitstellt. Leider habe ich so überhaupt gar keine Ahnung davon, wie oder ob das funktionieren könnte. 3. Selber ein Skript für meinen Laptop schreiben, das durch das Makefile aufgerufen wird und dann die *.hex-Datei via FTP oder SFTP auf den Raspi überträgt und dort läuft noch ein Skript oder ein richtiges Programm, das dann den avrdude mit der entsprechenden *.hex-Datei in der Parameterliste aufruft. Das kommt mir ein bisschen übertrieben vor, ist als Notlösung aber vlt. noch denkbar. 4. Über SSH den Arduino-Code schreiben und auch über SSH compilieren und übertragen. Allerdings dürfte der Arduino-Code bald mehrere tausend Zeilen lang werden (es wird ein sehr komplexer Roboter) und dann wäre eine IDE mit mehreren Quellcode-Dateien in verschiedenen Tabs ganz praktisch. Was haltet ihr von den Ansätzen? Welche sind gut umsetzbar und wenig fehleranfällig? Falls Variante 2 sinnvoll ist, wie könnte das gehen? Gibt es noch andere/bessere Lösungsansätze? Viele Grüße, Fabian P.S.: Zur Not könnte ich natürlich auch zu jedem Übertragen des Arduino-Programms den USB-Stecker vom Raspi herausnehmen, den vom Laptop hineinstecken, übertragen und die Stecker wieder zurückstecken, aber das wäre mir auf Dauer etwas nervig...
Die Ansätze 2 und 3 erscheinen mir am sinnvollsten, da beide nur wenige Ressourcen auf dem Raspi erfordern. Zu 2: Mit socat kannst du auf dem Raspi den seriellen Port (/dev/ttyUSB0) mit einem TCP-Socket verbinden. Auf dem Laptop verbindest du den TCP-Socket mit einem PTY. Die TCP läuft entweder direkt und unverschlüsselt zwischen Raspi und Laptop oder getunnelt über die SSH-Verbindung, die du auch auch als interaktive Verbindung zum Raspi nutzt. Zu 3: Du musst auf dem Raspi nur den Avrdude installieren. Die zu programmierende Hex-Datei musst du nicht unbedingt per FTP auf den Raspi spielen, du kannst sie auf Laptop-Seite in den SSH-Aufruf umleiten und auf Raspi-Seite vom Avrdude über Stdin lesen lassen. Ich habe das Ganze nicht ausprobiert, deswegen kann ich nicht garantieren, dass nicht noch irgendwo ein Haken versteckt ist. Aber eigentlich bin ich mir ziemlich sicher, dass es so gehen müsste.
Danke erstmal für die sehr hilfreichen Antworten! Ich habe mir jetzt einen Befehl zusammengebastelt, der via SSH den avrdude aufruft, der dann über stdin seine Datei bekommt. sshpass -p 'mein_tolles_passwort' ssh -l pi 192.168.3.1 avrdude -P /dev/ttyACM0 -p m2560 -c stk500v2 -U flash:w:-:i < test.hex Da mein Raspi sich neuerdings nicht mehr mit seinem zweiten WLAN-Stick mit dem WLAN verbinden will, um den avrdude zu installieren, muss ich nachher mal das Ethernetkabel heraussuchen. Ich bin aber zuversichtlich, dass das mit dem Befehl etwas wird!
Unglaublich! Es funktioniert! Das hier habe ich eben in meiner Konsole erhalten: fabian@ROSIS-PC:/media/Daten/Arduino/Neu$ sshpass -p 'mein_passwort;)' ssh -l pi 192.168.2.1 avrdude -P /dev/ttyACM0 -p m2560 -c stk500v2 -V -U flash:w:-:i < test.hex avrdude: AVR device initialized and ready to accept instructions Reading | ################################################## | 100% 0.01s avrdude: Device signature = 0x1e9801 avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed To disable this feature, specify the -D option. avrdude: erasing chip avrdude: reading input file "<stdin>" avrdude: writing flash (262106 bytes): Writing | ################################################## | 100% 16.37s avrdude: 262106 bytes of flash written avrdude done. Thank you. fabian@ROSIS-PC:/media/Daten/Arduino/Neu$ Vielen Dank für eure Hilfe! Das Problem wäre damit gelöst!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.