I’ve lately been trying to compile Arduino projects from command line. Primarily because the Arduino IDE wasn’t working out of the box on 64-bit Ubuntu (9.04). That problem was eventually solved, but I’ve been meaning to move away from that IDE anyway.
After reading a lot of posts I finally ended up with a working solution.
In addition to arduino (for 32-bit linux), you need to get a couple of packages:
sudo apt-get install avg-gcc sudo apt-get install avr-libc sudo apt-get install python-serial
You’ll find hardware/cores/arduino/Makefile under the Arduino folder. This one is meant to
serve as a basis for your own projects. I had to make some modifications to it, in addition to what
was described in the file. You can get my Makefile, which
basically just splits the
$AVT_TOOLS_PATH into two separate paths.
A key point that was hard to figure out, was that the Arduino needs to be reset right before a program is uploaded. This is automatically done by the IDE, but not by the Makefile. If this is not in place, you’ll get error messages like:
stk500_recv(): programmer is not responding
avrdude: stk500_getsync(): not in sync: resp=0x16 avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x34
I made a tiny python script to reset the arduino:
import serial import time import sys if len(sys.argv) != 2: print "Please specify a port, e.g. %s /dev/ttyUSB0" % sys.argv sys.exit(-1) ser = serial.Serial(sys.argv) ser.setDTR(1) time.sleep(0.5) ser.setDTR(0) ser.close()
Save this as pulsedtr.py, move it to somewhere in your $PATH and do
chmod u+x pulsedtr.py,
then place it in the Makefile under upload (Make sure you replace spaces with tabs if you copy
upload: applet/$(TARGET).hex pulsedtr.py $(PORT) $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH)
This was all that was needed for me to be able to
make upload. Let me know if you have any problems.
Update: After using the Makefile for a little while, I realized that the dependencies are a bit wrong. This is fixed now.
Update: If you happen to be replacing the Arduino IDE with Vim, I just uploaded an Arduino syntax file.