UNO per Linux und bash mit Sketch versorgen

Hallo Leute!

Heute habe ich versucht, meinen UNO mit Hilfe von Linux zu programmieren. Leider habe ich an meinem kleinen Linux-Server keinen Monitor, somit auch keine grafische Oberfläche. Es muss also alles mit Befehlszeilen ablaufen.
Dafür habe ich hier auch eine Anleitung gefunden: http://mjo.tc/atelier/2009/02/arduino-cli.html

Es gibt zwei Probleme:

  1. Die Lib's werden nicht richtig eingebunden.
    Die Meldung sieht dann so aus:

...
/home/guido/arduino/arduino-mk-0.8/ser_1Wire_002/build-cli/ser_1Wire_002.cpp:22: undefined reference to OneWire::OneWire(unsigned char)' /home/guido/arduino/arduino-mk-0.8/ser_1Wire_002/build-cli/ser_1Wire_002.cpp:25: undefined reference to OneWire::search(unsigned char*)'
...
(So geht es dann weiter)

Das konnte ich umgehen, indem ich die Lib's in den gleichen Ordner wie die Quelle gelegt habe.

  1. Das grössere Problem ist, dass der UNO sich nicht programmiren lässt:
    Folgende Meldungen sind zu sehen:

make upload

cat build-cli/OneWire.d build-cli/ser_1Wire_002.d > build-cli/depends.mk
for STTYF in 'stty --file' 'stty -f' 'stty <' ;
do $STTYF /dev/tty >/dev/null 2>&1 && break ;
done ;
$STTYF /dev/ttyACM1 hupcl ;
(sleep 0.1 2>/dev/null || sleep 1) ;
$STTYF /dev/ttyACM1 -hupcl
/usr/bin/avrdude -q -V -p atmega328p -C /etc/avrdude.conf -c stk500v1 -b 19200 -P /dev/ttyACM1
-U flash:w:build-cli/CLItest.hex:i
avrdude: stk500_recv(): programmer is not responding

avrdude done. Thank you.

make: *** [raw_upload] Error 1

Was kann ich machen, um einen Sketch in den UNO zu bekommen?
Wie übertrage ich die Sketche's ohne eine Benutzeroberfläche, also per Befehlszeile, in den UNO?

Gruß
G.

Eine gute Lösung dafür ist "scons", zusätzlich "pyserial" oder auch "pyserial2" installieren.

Schau mal hier:
http://code.google.com/p/arscons/

"SConstruct" aus "arscons" wird auch noch benötigt.

Du kannst mit "lsusb" bzw. "ls /dev/ttyU* /dev/ttyA*" feststellen, wie der Uno über USB ansprechbar ist. Dann "SConstruct" entsprechend anpassen.

"avr-gcc", "avrdude", etc. wirst Du ja bereits installiert haben.

Viel Erfolg, mmi.

Ich verwende praktisch ausschließlich Makefiles für meinen "Uno".
Mit make -n ausgegeben lauten bei mir das Upload Kommando:

stty -F /dev/ttyACM0 hupcl
avrdude -V -F -C /home/kraus/prg/arduino-0022//hardware/tools/avrdude.conf -p atmega328p -P /dev/ttyACM0 -c stk500v1 -b 115200 -U flash:w:tmp/HelloWorld.hex

ok, ob das jetzt ttyACM0 oder ACM1 heisst, hängt von der Anzahl der angeschlossenen UNO's ab. Manchmal kommt Linux auch durcheinander, wenn die Arduino IDE noch aktiv ist.

Was mir aber noch aufgefallen ist: Du verwendest das conf file unter /etc. Ich hab mir angewöhnt das conf file aus der Arduini IDE zu benutzen. Auf jedenfall falsch ist das baud-raten Kommando (-b). Der Uno erwartet die Daten wesentlich schneller. Grundsätzlich sollte das Makefile das boards.txt auslesen.

Meine Makefiles für Uno mit 0022 bzw Uno mit 1.00 liegen u.a. hier:
http://code.google.com/p/u8glib/source/browse/#hg%2Fsys%2Farduino%2FHelloWorld

Sehr empfehlen kann ich auch das Makefile hier:
http://arduino.cc/forum/index.php/topic,88989.0.html
Vor allem die Idee mit dem screen Befehl ist sehr nett (simuliert den Serial Monitor der Arduino IDE)

Oliver

Edit: Wollte noch anmerken, dass es bei dem eingangs genannten Fehler zuweilen notwendig ist, den Uno zu reseten und unmittelbar danach den Upload zu starten. Das hilft oft.

Tausend Dank!

Ich habe einmal das Beispiel von olikraus mit meinen Pfaden laufen lassen. Es hat funktioniert.

avrdude: 4328 bytes of flash written
avrdude: safemode: Fuses OK
avrdude done. Thank you.

Mir ist aufgefallen, dass unterschiedliche Geschwindigkeiten eingestellt sind. Ich werde jetzt versuchen, die 115200 Baud in meinem makefile einzustellen.

Danke!
G.