# Java und Arduino



## Meeresgott (4. Jan 2016)

Hallo Java Forum,

ich programmiere zurzeit ein System das auf einem Raspberry Pi laufen soll. An diesem habe ich einen Arduino angeschlossen, um Messungen zu machen, die ich mit dem Pi so nicht machen kann. Für die Kommunikation zwischen den beiden benutze ich die RXTX Bibliothek (rxtx.qbang.org). Klappt auch soweit wunderbar. 
Nun möchte ich allerdings via Java den Arduino neuen Code übermitteln also Updaten können. Da der Pi über einen Internetzugang verfügt und mein Java Programm Zugriff auf einen Server hat und sich auch bei diesem Updates für sich selber holt. Muss es ja möglich sein den Code, den das Programm vom Server holt, an den Arduino zu übertragen.
Programmiert wird dieser schließlich auch über die Serielle-Schnittstelle als muss es auch mit Java klappen. 

Hat jemand einen Ansatz ? Oder selbst ähnliches probiert ?
vielleicht sogar schon gemacht ?

Danke schon mal für Antworten


----------



## Meeresgott (5. Jan 2016)

Hat hier keiner ähnliches gemacht oder eine Idee ? :/ 

Bin ich vielleicht auch im falschen Forum ?

Grüße Meeresgot


----------



## InfectedBytes (5. Jan 2016)

musst du dafür wirklich einen Arduino benutzen? Der Pi hat ja selbst genug GPIO pins mit denen du machen kannst was du willst.
Ansonsten könnte dir vielleicht dies hier etwas helfen:
https://learn.sparkfun.com/tutorials/installing-an-arduino-bootloader
Kategorie: Uploading Code the hard way


----------



## Tobse (6. Jan 2016)

@InfectedBytes Der Paspberry Pi kann mit einen GPIOs meines Wissens nach nur Digitale Signale verarbeiten, keine analogen. Daher wirds schwer mit dem Raspberry einen elektrischen Wiederstand oder eine Spannung zu messen.

@Meeresgott Ich denke du bist auf dem richtigen Weg. Ich kann mir gut vorstellen, dass es ein Kommandozeilen-Programm gibt, welches diese Schnittstelle bedient und mit dem man code auf den Arduino laden kann. Da kann es hilfreich sein, mal genauer nachzulesen, was die Arduino IDE so macht, wenn man code hochlädt.
So ein Tool vorausgesetzt ist es dann ein leichtes, vom Raspberry Code auf den Arduino zu schieben. Du müsstest nur ggf. mit den GPIOs vom Raspberry den Reset-Schalter vom Arduino ansprechen.


----------



## InfectedBytes (6. Jan 2016)

das stimmt natürlich, allerdings kann man mehrere pins des PIs zusammen als einen analog reader nutzen. Dafür braucht man aber natürlich auch wieder sowas wie einen ADC. 
https://www.adafruit.com/products/856
oder direkt https://learn.adafruit.com/reading-...g-audio-volume-with-the-raspberry-pi/overview

Ansonsten kannst du direkt den avrdude nutzen:
http://www.mikrocontroller.net/articles/AVRDUDE


----------



## Meeresgott (6. Jan 2016)

@Tobse genau aus dem Grund benutze ich ein Arduino  
   hast du vielleicht eine Ahnung welches Kommandozeilen-Programm ich benutzen kann ?
   bin auf AVRDude gestoßen. Kennst du dich damit aus ? Alle Beiträge zu dem Thema sin allerdings meistens von 2010. Und eine .exe konnte ich auch nirgends finden

@InfectedBytes Ich möchte den Arduino als Erweiterung generell nutzen. Mir ist klar das ich einen AD-Wandler benutzen kann. Aber ich habe mich bewusst dafür entschieden es so zu machen. Nur hätte ich nicht gedacht das ich so bald auf ein Probleme Stoße das mich derart aufhält. auf AVRDUDE bin ich auch gekommen aber wo kann ich dieses Downloaden ? Finde nur Seiten die erklären wie man es anwendet.

Als Zwischenergebnis die Arduino IDE kann man via Kommandozeile steuern. Benötigt aber eine GUI. Da ich auf meinem PI keinen X-Server laufen habe um Ressourcen zu sparen fällt dies schon mal weg


----------



## InfectedBytes (6. Jan 2016)

http://download.savannah.gnu.org/releases/avrdude/


----------



## Tobse (6. Jan 2016)

Meeresgott hat gesagt.:


> hast du vielleicht eine Ahnung welches Kommandozeilen-Programm ich benutzen kann ?



Wie gesagt: schau mal, was die Arduino IDE macht. Die lädt ja den Code auch direkt auf den Mikrocontroller. Meine IDEs (NetBeans, IntelliJ, VisualStudio, u.s.w) zeigen bei allem, was sie machen (Kompilieren, Exportieren, Unit-Tests, ...) ein Konsolenfenster an, mitsamt dem Befehl, der das bezweckt:


----------



## Meeresgott (6. Jan 2016)

Die Arduino IDE läßt sich zwar über die Kommandozeile aufrufen. Aber Sie baut leider für Fehlermeldungen im Hintergrund eine GUI auf die dann auf meinem PI eine HeadlessException wirft. Außer ich starte den X-Server aber dies will ich vermeiden.

@InfectedBytes Vielen Dank ich werde jetzt auch in diese Richtung weiter schauen können


----------



## InfectedBytes (6. Jan 2016)

Meeresgott hat gesagt.:


> Die Arduino IDE läßt sich zwar über die Kommandozeile aufrufen. Aber Sie baut leider für Fehlermeldungen im Hintergrund eine GUI auf die dann auf meinem PI eine HeadlessException wirft. Außer ich starte den X-Server aber dies will ich vermeiden.


Die meisten Programme haben für sowas eine "nogui" option (oder ähnliches) 
Google einfach mal nach möglichen argumenten, vielleicht hat die Arduino IDE soetwas auch


----------



## Hans_G (7. Jan 2016)

Eine Möglichkeit wäre, Arduino-Makefile https://github.com/sudar/Arduino-Makefile fürs Compilieren und für den Upload zu nehmen.

Von Java aus könnte man über ProcessBuilder http://docs.oracle.com/javase/8/docs/api/java/lang/ProcessBuilder.html make und make upload ausführen.


----------



## Meeresgott (7. Jan 2016)

@InfectedBytes Habe auf der Webseite von Arduino nachgeschaut leider gibt es keine "nongui" Option. 

@Hans_G habe den Arduino-Makefile jetzt nur kurz überflogen aber abreitet dieser nicht zusammen mit der Arduino IDE oder sind sie von einander unabhängig ?

In diesem Tutorial unter dem Punkt "Global variables" wird ein Path zur Arduino IDE verlangt. Wenn das Programm die IDE per Kommandozeile nutzt habe ich wieder das selbe Problem...


----------



## Tobse (7. Jan 2016)

Also wenn das CLI-Tool eine HeadlessException wirft, ist es in Java geschrieben. Ergo vermute ich, dass man die Quelldateien irgendwo finden kann. Damit könntest du dann die Fehlermeldungen ggf. ins STDOUT leiten - je nachem wie das Teil programmiert ist. Das wird aber sicher kein Spaß... eher den X11 aktivieren :S


----------



## Hans_G (7. Jan 2016)

Arduino-Makefile braucht m. W. die IDE nur für Treiber und Bibliotheken. Die GUI der IDE wird jedenfalls nicht gestartet. Durch Zufall habe ich aber möglicherweise genau das gefunden, was Du suchst:
http://playground.arduino.cc/Learning/CommandLine
(hier insbesondere der 1. Eintrag)


----------



## Meeresgott (7. Jan 2016)

Ich habe noch keinen Quellcode für die Arduino IDE gefunden :/ 
Das habe ich mir auch gedacht ob ich nicht einfach den X-Server starten soll bis ich dann auf AVRDude gestoßen bin. Ich denke für diese Frage bin ich jetzt im falschen Forum aber möchte nicht noch wo anders deshalb einen Thread auf machen 

Hat einer von euch einen Link zu den möglichen Befehlen von AVRDude ? Ich habe den Arduino Atmega2650 und finde einfach nicht den richtigen Parameter für die -c Property..


@Hans_G  auf diese Seite bin ich ebenfalls gestoßen habe aber das Problem das soweit ich das verstanden habe ebenfalls über die IDE geht und dafür benötige ich den von mir ungewünschten X-Server


----------



## Tobse (7. Jan 2016)

Meeresgott hat gesagt.:


> aber das Problem das soweit ich das verstanden habe ebenfalls über die IDE geht und dafür benötige ich den von mir ungewünschten X-Server



Ich kann mich auch irren. Aber da steht doch "python + make based solution (i.e. no Java)". make ist ein CLI-Tool, also no problemo. Und Python läuft auch ohne Desktopumgebung.
Es kann natürlich noch dauern, bis der Rewrite fertig ist, aber das wäre genau das, wonach du suchst.


----------



## Meeresgott (7. Jan 2016)

Ich hab es geschaft  mit AVRDude und dem ProzessBuilder
Ist zwar nicht komplett Java aber das wird auch nicht möglich sein wenn ich einen Micro Controller programmieren möchte.

Ich danke euch Herzlich für eure Geduld! Vielen Dank

@Tobse und bis es fertig ist habe ich jetzt schonmal eine Lösung. Nochmal Danke

Meeresgott


----------

