Sugeriría buscar en Google para proyectos Makefile. Hice uno hace un tiempo para el programa Blink, al ver básicamente lo que generó el IDE y replicarlo de una manera más general.
#
# Simple Arduino Makefile
#
# Author: Nick Gammon
# Date: 18th March 2015
# where you installed the Arduino app
ARDUINO_DIR = C:/Documents and Settings/Nick/Desktop/arduino-1.0.6/
# various programs
CC = "$(ARDUINO_DIR)hardware/tools/avr/bin/avr-gcc"
CPP = "$(ARDUINO_DIR)hardware/tools/avr/bin/avr-g++"
AR = "$(ARDUINO_DIR)hardware/tools/avr/bin/avr-ar"
OBJ_COPY = "$(ARDUINO_DIR)hardware/tools/avr/bin/avr-objcopy"
MAIN_SKETCH = Blink.cpp
# compile flags for g++ and gcc
# may need to change these
F_CPU = 16000000
MCU = atmega328p
# compile flags
GENERAL_FLAGS = -c -g -Os -Wall -ffunction-sections -fdata-sections -mmcu=$(MCU) -DF_CPU=$(F_CPU)L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=106
CPP_FLAGS = $(GENERAL_FLAGS) -fno-exceptions
CC_FLAGS = $(GENERAL_FLAGS)
# location of include files
INCLUDE_FILES = "-I$(ARDUINO_DIR)hardware/arduino/cores/arduino" "-I$(ARDUINO_DIR)hardware/arduino/variants/standard"
# library sources
LIBRARY_DIR = "$(ARDUINO_DIR)hardware/arduino/cores/arduino/"
build:
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(MAIN_SKETCH) -o $(MAIN_SKETCH).o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)avr-libc/malloc.c -o malloc.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)avr-libc/realloc.c -o realloc.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)WInterrupts.c -o WInterrupts.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring.c -o wiring.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring_analog.c -o wiring_analog.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring_digital.c -o wiring_digital.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring_pulse.c -o wiring_pulse.c.o
$(CC) $(CC_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)wiring_shift.c -o wiring_shift.c.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)CDC.cpp -o CDC.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)HardwareSerial.cpp -o HardwareSerial.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)HID.cpp -o HID.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)IPAddress.cpp -o IPAddress.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)main.cpp -o main.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)new.cpp -o new.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)Print.cpp -o Print.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)Stream.cpp -o Stream.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)Tone.cpp -o Tone.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)USBCore.cpp -o USBCore.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)WMath.cpp -o WMath.cpp.o
$(CPP) $(CPP_FLAGS) $(INCLUDE_FILES) $(LIBRARY_DIR)WString.cpp -o WString.cpp.o
rm core.a
$(AR) rcs core.a malloc.c.o
$(AR) rcs core.a realloc.c.o
$(AR) rcs core.a WInterrupts.c.o
$(AR) rcs core.a wiring.c.o
$(AR) rcs core.a wiring_analog.c.o
$(AR) rcs core.a wiring_digital.c.o
$(AR) rcs core.a wiring_pulse.c.o
$(AR) rcs core.a wiring_shift.c.o
$(AR) rcs core.a CDC.cpp.o
$(AR) rcs core.a HardwareSerial.cpp.o
$(AR) rcs core.a HID.cpp.o
$(AR) rcs core.a IPAddress.cpp.o
$(AR) rcs core.a main.cpp.o
$(AR) rcs core.a new.cpp.o
$(AR) rcs core.a Print.cpp.o
$(AR) rcs core.a Stream.cpp.o
$(AR) rcs core.a Tone.cpp.o
$(AR) rcs core.a USBCore.cpp.o
$(AR) rcs core.a WMath.cpp.o
$(AR) rcs core.a WString.cpp.o
$(CC) -Os -Wl,--gc-sections -mmcu=$(MCU) -o $(MAIN_SKETCH).elf $(MAIN_SKETCH).o core.a -lm
$(OBJ_COPY) -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 $(MAIN_SKETCH).elf $(MAIN_SKETCH).eep
$(OBJ_COPY) -O ihex -R .eeprom $(MAIN_SKETCH).elf $(MAIN_SKETCH).hex
Debería cambiar ARDUINO_DIR
al menos, para reflejar dónde instaló el IDE. Si usa otras cosas como la biblioteca Wire, necesitaría expandirla un poco para compilar bibliotecas adicionales. Nuevamente, puede usar lo que el IDE genera para guiar sus cambios.
Las líneas con los espacios iniciales anteriores necesitarían el carácter de tabulación en lugar de espacios, como es normal para un Makefile.
Yo uso la interfaz de línea de comandos para el
arduino
comando .Lo ejecuto así:
Hay una página que describe otras herramientas de línea de comandos, como
inotool
. Esa página también tiene un ejemploMakefile
. Estas alternativas parecen atractivas, pero aparentemente, a partir de este escrito, ninguna de ellas funciona. Supongo que esto se debe a algunos cambios recientes en los archivos de distribución Arduino IDE de los que dependen.Ejecutar
arduino
como el anterior es un poco lento, porque tiene que cargar Java, supongo, pero al menos funciona. También hay unarduino-builder
comando que viene con la distribución Arduino IDE. Al momento de escribir esto, no estaba suficientemente documentado para que yo pudiera descubrir cómo usarlo. Por ejemplo, no hay líneas de comando de ejemplo en el archivo README o en ninguno de los tutoriales que encontré, y no pude descubrir cómo usarlo para cargar el código en el tablero. Sin embargo, presumiblemente es capaz de darnos una compilación más rápida quearduino
. El archivo README también menciona la posibilidad de reutilizar archivos de objetos de una compilación anterior, por lo que hay algunas funcionalidades similares.Para ver la salida en serie , uso algo como
El número 1000000 debe coincidir con el número que pasa
Serial.begin()
en el código de su tablero. También puede usarloscreen
si tiene un programa de tablero que sea apropiadamente interactivo, o puede usar cualquier utilidad para escribir directamente en el dispositivo. Por cierto, mi Due aparece como/dev/ttyACM0
(en lugar de/dev/ttyUSB0
para el Uno).fuente
*.ino
archivo en el directorio, ya que no parece cargar necesariamente el mencionado por el--upload
parámetro.Lo que necesitas es un Makefile. Hay algunos proyectos de Makefile para Arduino. Buscar en Google "Arduino Makefile" devuelve muchos resultados, incluido lo que parece bueno en Github: https://github.com/sudar/Arduino-Makefile
Compilar desde la línea de comandos no es trivial debido a la forma en que Arduino IDE maneja las bibliotecas.
Para el monitor en serie, recomendaría minicom. Es un emulador de terminal completamente funcional (vt102) en la línea de comando.
... por ejemplo.
fuente
Si desea una solución totalmente compatible para su proyecto arduino (sí, puede compartir su proyecto con otras personas que usan simplemente Arduino IDE), debe verificar amake una herramienta para simplificar el cli del arduino, lo uso con Geany pero otros lo están usando con vi, Atom, etc.
Está inspirado y los proyectos ahora muertos de Ino y Arturo; Tómese 5 minutos para probarlo y envíe sus comentarios
Ejemplo de uso:
Tiene un poco de pegamento inteligente, puede recordar el tablero y el archivo, e incluso detectar automáticamente el usb del tablero; así que después de un comando exitoso "amake -v" puede hacerlo en la línea de comando y funcionará.
Si usa algunas macros IDE, puede crear fácilmente los comandos de compilación y carga, por ejemplo, usando Geany IDE se convertirá en:
Puede obtener más ayuda ejecutando simplemente "amake" o "amake -h" una vez instalado.
Además, puede soportar CADA placa / lib / programador que haya instalado / configurado en su IDE Arduino, sí, placa moderna como Adafuit Trinket M0 / Arduino M0, etc.
Simplemente encienda su Arduino IDE, vaya al administrador de la placa, instale soporte y eso es todo, solo siga algunas instrucciones simples y listo.
¿La placa que tienes no es compatible? no es un problema, detecte el fqbn (lea el archivo README.md) y páselo como el nombre de la placa.
Estoy buscando probadores para aumentar el número o los alias de placa y la detección automática de las firmas USB adecuadas.
Recuerde que esta es una herramienta privada desarrollada, ahora compartida con el público, ya sabes, solo un programador rascando su picazón ...
Salud.
fuente
Herramienta oficial de CLI
El equipo de arduino está desarrollando un cliente cli https://github.com/arduino/arduino-cli
Anuncio : https://blog.arduino.cc/2018/08/24/announcing-the-arduino-command-line-interface-cli/
Puede hacer casi todo con esto, desde descargar tableros y bibliotecas, hasta compilar y cargar scripts. Lo que falta es la parte de monitoreo (puede usar el método Metamorphic usando
stty
cat
, ¡funciona!)Los comandos son muy similares a la respuesta de Metamorphic ya que esta herramienta se está ramificando de esa.
Instrucciones en el repositorio de Github y la página de manual:
fuente