Flash over IP

Hi,
neue Frage/Diskussion:

Das Flashen über den USB-Anschluss ist ja schön und einfach.
Aber die Steuerungen bleiben bei mir ja nicht auf dem Schreibtisch.
Da wäre es dann schön, wenn man nicht mit einem Notebook ran muss, oder den Arduino wieder aus der Schaltung ausbauen muss, wenn man am Programm was ändern will.
Was haben wir für Möglichkeiten:
1.) ein laaaanges USB-Kabel: Spezifikation für USB ist m.E. nur bis 5m. Habs zwar schon mal 10-15 Meter geschafft, aber ist Glücksache und reicht mir auch nicht.
2.) USB-Extender: Muss ich auch extra ein Kabel hinlegen
3.) Flashen über das Ethernet-Shield: Das wär natürlich der Hit (Wenn man ein Shield verbaut hat). Hab aber dazu noch nie was gelesen.
4.) USB over IP: Also noch einen kleinen Switch vor den Arduino (wenn Shield verbaut) und dann einen USB-Server dran. Die kosten halt auch ein paar Euro.

Habt ihr euch dazu auch schon Gedanken gemacht??

Hab zum Punkt 3.) noch was gefunden: Ariadne-Bootloader/README.md at master · codebndr/Ariadne-Bootloader · GitHub

Hab zum Punkt 3.) noch was gefunden: Ariadne-Bootloader/README.md at master · codebndr/Ariadne-Bootloader · GitHub

Genau das hätte ich Dir vorgeschlagen. Bedenke aber, dass dieser Bootloader fast doppelt so gross ist, als der optiboot des UNOs. Falls Du sehr grosse Sketches laden willst, könnte das in's Gewicht fallen. Und zur Zeit musst Du den Arduino noch von Hand resetten, damit der Bootloader überhaupt aktiv wird. Wenn Du das remote machen willst, müsstest Du also noch die entsprechende Möglichkeit in all Deine Sketches einbauen.

Und es gibt ihn leider nur für Uno, 2009. Nicht für meinen MEGA 2560 :frowning:
Das mit dem Reset hab ich mir noch nicht angeschaut.

Momentan verfolge ich mehr die Idee mit dem IP-over-Ethernet.
Ob ich dazu einen Printserver vergewaltigen kann??? hmmmmmm...
Von der Hardware ist das auch nichts anderes, als ein USB-Device-Server. Bräuchte nur eine Software, die mir eine virtuelle COM simuliert.

Und es gibt ihn leider nur für Uno, 2009. Nicht für meinen MEGA 2560

Die Anpassung für den Mega2560 dürften relativ einfach sein, programmiertechnisch sind die Prozessoren ziemlich ähnlich.

Momentan verfolge ich mehr die Idee mit dem IP-over-Ethernet.

Du meintest wohl eher USB-over-IP?

Von der Hardware ist das auch nichts anderes, als ein USB-Device-Server.

Ja, aber software-technisch ist das etwas völlig anderes. Das dürfte massiv mehr Aufwand sein.

Wenn Du Dich aber sowieso mit zusätzlicher Hardware abgefunden hast, wieso nicht einen zweiten Arduino für die Programmierung einsetzen? Damit kannst Du den Reset steuern, eine serielle Schnittstelle steht auch zur Verfügung und die Software dürfte relativ einfach sein.

hi,

es gibt usb-extender über cat6-kabel. übertragung bis 100m. ich verwende in der firma dutzende vga<>cat6-adapter. funktioniert einwandfrei. z.B.:

http://www.gdsys.de/produkte/kvm-extender/signal-extender/usb-extender/?gclid=CKC8_PXVprMCFUFb3god7GoAQg

http://www.delock.de/produkte/F_656_USB-1-1---USB-2-0_61733/merkmale.html

oder gib usb-extender bei ebay oder amzon ein. fängt bei 10-15€ an.

es wäre zu prüfen, wieviele von den acht adern des cat6-kabels wirklich benutzt werden. man kann ja 2 ethernet-verbindungen (10er oder 100er, nicht 1000er) über ein cat6-kabel laufen lassen, weil ethernet nur 4 adern braucht. dazu gibt es kleine peitschen, die das auf beiden seiten aufteilen. wäre möglich, daß man auch ethernet und usb(mit obigem konverter) auf diese art über ein kabel bekommt.

gruß stefan

pylon:

Und es gibt ihn leider nur für Uno, 2009. Nicht für meinen MEGA 2560

Die Anpassung für den Mega2560 dürften relativ einfach sein, programmiertechnisch sind die Prozessoren ziemlich ähnlich.

Mag sein, aber dafür hängt mir die Hose zu tief. Das bring ich nicht.

Momentan verfolge ich mehr die Idee mit dem IP-over-Ethernet.

Du meintest wohl eher USB-over-IP?

Ja sicher, sorry

Von der Hardware ist das auch nichts anderes, als ein USB-Device-Server.

Ja, aber software-technisch ist das etwas völlig anderes. Das dürfte massiv mehr Aufwand sein.
Wenn Du Dich aber sowieso mit zusätzlicher Hardware abgefunden hast, wieso nicht einen zweiten Arduino für die Programmierung einsetzen? Damit kannst Du den Reset steuern, eine serielle Schnittstelle steht auch zur Verfügung und die Software dürfte relativ einfach sein.

Interessanter Ansatz, aber wie soll dass funktionieren?

Eisebaer:
hi,
es gibt usb-extender über cat6-kabel. übertragung bis 100m. ich verwende in der firma dutzende vga<>cat6-adapter. funktioniert einwandfrei. z.B.:

http://www.gdsys.de/produkte/kvm-extender/signal-extender/usb-extender/?gclid=CKC8_PXVprMCFUFb3god7GoAQg
50m USB 1.1 Cat.6 Extender - LINDY DE
http://www.delock.de/produkte/F_656_USB-1-1---USB-2-0_61733/merkmale.html

oder gib usb-extender bei ebay oder amzon ein. fängt bei 10-15€ an.

es wäre zu prüfen, wieviele von den acht adern des cat6-kabels wirklich benutzt werden. man kann ja 2 ethernet-verbindungen (10er oder 100er, nicht 1000er) über ein cat6-kabel laufen lassen, weil ethernet nur 4 adern braucht. dazu gibt es kleine peitschen, die das auf beiden seiten aufteilen. wäre möglich, daß man auch ethernet und usb(mit obigem konverter) auf diese art über ein kabel bekommt.

gruß stefan

Hi, ja kenn ich.
Aaaaaber: Dafür brauchst du ein dediziertes Kabel. Also eine Punkt zu Punkt Verbindung zwischen den beiden Extender-Partnern.
Zwischen dem Arduino und meinem PC liegen aber 2 Switches. Da geht das nicht.
Stimmt, es werden nur 2 Ader-Paare für normales 100BASE-TX verwendet. Aber aufgrund der o.g. Situation bringt mir das auch nichts.

Interessanter Ansatz, aber wie soll dass funktionieren?

Ganz einfach. Du nimmst einen zweiten Arduino mit Ethernet-Anschluss (Arduino Ethernet oder einen UNO mit Ethernet-Shield). Den schliesst du über gekreuzte RX/TX-Leitungen (Pins 0 und 1) plus z.b. Pin 5 an Reset an Deinen eigentlich Arduino an. Der Sketch dort drauf muss jetzt nur noch ein avrdude simulieren (den kompilierten Sketch seriell übertragen), fertig ist der Remote-Update.
Dies wird noch einfacher, wenn Du dem Programmier-Arduino eine SD-Karte spendierst. Dann kannst Du den neuen Sketch dort zwischenspeichern und bist während dem Upload auf den "Haupt"-Arduino nicht mit Netzwerkverkehr beschäftigt.
Alternativ könntest Du den Bootloader auch umgehen und per SPI direkt ICSP-Programmer spielen, aber das dürfte dann schon ein bisschen komplizierter sein.

Hi,

die Idee mit dem USB over IP kann ich wohl in die Tonne treten.
Hab das mit einigen Herstellern diskutiert. Diese Geräte sind nur dafür da, um Drucker oder Speichermedien ans Netzwerk zu binden.

Ganz einfach. Du nimmst einen zweiten Arduino mit Ethernet-Anschluss (Arduino Ethernet oder einen UNO mit Ethernet-Shield). Den schliesst du über gekreuzte RX/TX-Leitungen (Pins 0 und 1) plus z.b. Pin 5 an Reset an Deinen eigentlich Arduino an. Der Sketch dort drauf muss jetzt nur noch ein avrdude simulieren (den kompilierten Sketch seriell übertragen), fertig ist der Remote-Update.

Wenn ich da jetzt weiterdenke: Programm seriell übertragen.... Ich hab noch einen COM-Port-Server rumliegen. Wenn ich den jetzt zur Datenübertragung an RX und TX hänge.
Dann müsste nur noch irgendwie der ResetPin angesteuert werden, damit der Bootloader anspringt. Vllt. geht das ja mit einer der Steuerleitungen (DTR oder so....)
Kann an dann auch die Arduino IDE verwenden? Wenn ich den COM-Port des Servers einstelle, dann sollten doch die Daten an die richtige Stelle kommen oder?
Oder ich klemm noch einen seriellen ISP-Programmieradapter dazwischen.

Ich hab noch einen COM-Port-Server rumliegen. Wenn ich den jetzt zur Datenübertragung an RX und TX hänge.

Das sollte gehen und DTR geht an Reset, dann wird auch zur richtigen Zeit "geresettet". Allerdings sind diese Geräte meist auf den RS232-Standard ausgerichtet und der macht den Arduino mit seinen +/- 15V sehr schnell kaputt. Du müsstest also einen Konverter wie MAX232 vorne dran hängen, aber dann sollte das funktionieren.

Kann an dann auch die Arduino IDE verwenden?

Solange Du die Software hast, die Dir einen serielle Schnittstelle simuliert (für die Windows-Fraktion: COM-Port), müsste das möglich sein.

pylon:

Kann an dann auch die Arduino IDE verwenden?

Solange Du die Software hast, die Dir einen serielle Schnittstelle simuliert (für die Windows-Fraktion: COM-Port), müsste das möglich sein.

Jetzt hab ich noch was nicht ganz verstanden:

Plan 1.) Serieller COM-port Server, dann Pegelwandler und dann auf RX und TX vom Arduino
Plan 2.) Serieller COM-port Server, dann RS232-ISP-Programmer und dann auf die ISP-Schnittstelle.
Sind ja zwei Paar Stiefel.
Gehen beide Möglichkeiten aus der Arduino IDE? Und auf welchen Programmer muss ich dann die Arduino IDE einstellen, wenn ich das vorhabe?

Wobei: Gibts eigentlich noch RS232-ISP-Programmer, die auch einen MEGA2560 programmieren können?

Plan 1.) Serieller COM-port Server, dann Pegelwandler und dann auf RX und TX vom Arduino

Sollte gehen, aber DTR mittels Kondensator (Impuls) nach RESET nicht vergessen. Und ich gehe davon aus, dass der Pegelwandler ein MAX232 oder ähnliches ist.

Plan 2.) Serieller COM-port Server, dann RS232-ISP-Programmer und dann auf die ISP-Schnittstelle. Sind ja zwei Paar Stiefel.

Beides sollte möglich sein. Als Programmer müsstest Du den verwendeten einstellen (für den ist es egal, ob er direkt von einer seriellen Schnittstelle angesprochen wird, oder ob das über den COM-Server-Zwischenschritt geht).

pylon:

Plan 2.) Serieller COM-port Server, dann RS232-ISP-Programmer und dann auf die ISP-Schnittstelle. Sind ja zwei Paar Stiefel.

Beides sollte möglich sein. Als Programmer müsstest Du den verwendeten einstellen (für den ist es egal, ob er direkt von einer seriellen Schnittstelle angesprochen wird, oder ob das über den COM-Server-Zwischenschritt geht).

OK. reden wir mal von Plan 2. Ganz bin ich noch nicht klar.
Ich habe noch ein altes Pollin Eval-board gefunden.
Das hat einen RS232-ISP-Programmierer on Board. Also einen ohne zwischengeschalteten µC, nur Widerstände, Z-Diode und nen Transistor.
Was muss ich für so einen Programmer bei Arduino einstellen? -> AVRISP???

Was muss ich für so einen Programmer bei Arduino einstellen? -> AVRISP???

Ich kenn solche Teile nicht, aber ich habe meine Zweifel, dass dies funktionieren wird. Der ICSP ist mehr oder weniger ein SPI-Bus mit Reset-Leitung. Wie bekommst Du von der seriellen Schnittstelle das Clock-Signal des SPI?
Ich verwende einen USB-TinyISP, der ist in der Liste aufgeführt.

Ich verstehe auch nicht, wieso Du den komplizierten Weg über den ISP gehen willst, das bringt tendenziell nur mehr Probleme. Dein Plan 1 ist einfacher und zuverlässiger zu implementieren. Plan 2 bringt Dir nur Vorteile, wenn Du den Bootloader auch von remote wechseln willst.

Jetzt hab ich noch mal was altes ausgegraben:

pylon:

Interessanter Ansatz, aber wie soll dass funktionieren?

Ganz einfach. Du nimmst einen zweiten Arduino mit Ethernet-Anschluss (Arduino Ethernet oder einen UNO mit Ethernet-Shield). Den schliesst du über gekreuzte RX/TX-Leitungen (Pins 0 und 1) plus z.b. Pin 5 an Reset an Deinen eigentlich Arduino an. Der Sketch dort drauf muss jetzt nur noch ein avrdude simulieren (den kompilierten Sketch seriell übertragen), fertig ist der Remote-Update.
Dies wird noch einfacher, wenn Du dem Programmier-Arduino eine SD-Karte spendierst. Dann kannst Du den neuen Sketch dort zwischenspeichern und bist während dem Upload auf den "Haupt"-Arduino nicht mit Netzwerkverkehr beschäftigt.

Hat das schon mal jemand gemacht? Oder gibts da einen fertigen Sketch dafür???
Würd mich brennend interessieren :fearful: :fearful: :fearful:

Nick Gammon (aktiver Forum-Teilnehmer) hat sowas ähnliches schon mal gemacht, allerdings nicht über die serielle Schnittstelle, sondern als Programmer (ICSP). Aber grundsätzlich sollte das für Dich keinen grossen Unterschied machen.

Hi pylon,

ja, das hatten wir vor kurzem schon mal in einem Thread.
Aber dies beschreibt einen Upload von einer SD-Karte und nicht über Ethernet.

Aber dies beschreibt einen Upload von einer SD-Karte und nicht über Ethernet.

Jetzt kombinierst Du das mit einem kleinen Webserver-Upload, wie z.B.

und Du hast die Möglichkeit, Deine Updates einfach per Webformular hochzuladen.

pylon:
Jetzt kombinierst Du das mit einem kleinen Webserver-Upload, wie z.B.
GitHub - ovidiucp/TinyWebServer: Small web server for Arduino, fits in 10KB ROM, less than 512 bytes RAM
und Du hast die Möglichkeit, Deine Updates einfach per Webformular hochzuladen.

Ok, hört sich gut an. Hab mir das ganze mal bei github gezogen.
Aber so ganz ans Ziel komm ich mit dem Upload nicht.

  • Ich hab den Sketch FileUpload verwendet.
  • Dann noch die Flash4.0-Lib "installiert"
  • Den Sketch an mein Netzwerk angepasst, und dann auf nen Uno mit Ethernet-Shield geladen.
  • Nach dem Start sieht es eigentlich erfolgreich aus:
    Console:
Free RAM: 601
Setting up SD card...
Setting up the Ethernet card...
Web server starting...
Ready to accept HTTP requests.

Aber wie soll das mit dem File-Upload jetzt funktionieren?
Da steht zwar, man soll "curl" verwenden

You can now test uploading a file using curl:
Note that since the handler in the source looks like this:
{"/upload/" "
", TinyWebServer::PUT, &TinyWebPutHandler::put_handler }
you must ensure that the path '/upload/' is in your submitted URL
curl -0 -T index.htm http://my-arduino-ip-address/upload/

Aber damit hab ich noch nie was gemacht.

Und dann fürchte ich, dass mir wohl bald der Speicher zu klein wird. Das FileUpload hat jetzt 26k. Wenn ich dann noch den Hex-Uploader dazuwerfe, dann wirds wohl eng.
Vllt. kann man das FileUpload ja noch etwas abspecken, aber dazu muss ich es erst mal verstehen. Und da ich nicht so der Profi bin, klappt so was erst, wenn ich es mal am Laufen habe.

OK. klappt jetzt.
Muss man auch erst mal wissen, dass curl nicht in die Browserzeile eingetippt werden muss, sondern daß es ein Kommandozeilen-Tool ist. :* :* :*