Je suggérerais de googler pour les projets Makefile. J'en ai fait un il y a quelque temps pour le programme Blink, en voyant essentiellement ce qui a été généré par l'IDE et en le reproduisant de manière plus générale.
#
# 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
Vous devrez ARDUINO_DIR
au moins changer pour refléter où vous avez installé l'IDE. Si vous utilisez d'autres choses comme la bibliothèque Wire, vous devrez l'étendre quelque peu pour compiler des bibliothèques supplémentaires. Encore une fois, vous pouvez utiliser ce que l'EDI génère lui-même pour guider vos modifications.
Les lignes avec les espaces de tête ci-dessus auraient besoin du caractère de tabulation au lieu d'espaces, comme c'est normal pour un Makefile.
J'utilise l' interface de ligne de commande pour la
arduino
commande .Je le lance comme ceci:
Il y a une page qui décrit d'autres outils de ligne de commande, comme
inotool
. Cette page contient également un exempleMakefile
. Ces alternatives semblent séduisantes, mais apparemment, au moment de la rédaction de cet article, aucune d'entre elles ne fonctionne. Je suppose que cela est dû à des changements récents dans les fichiers de distribution Arduino IDE dont ils dépendent.Exécuter
arduino
comme ci-dessus est un peu lent, car il doit charger Java, je suppose, mais au moins cela fonctionne. Il existe également unearduino-builder
commande fournie avec la distribution Arduino IDE. Au moment de la rédaction de ce document, il n'était pas suffisamment bien documenté pour que je puisse comprendre comment l'utiliser. Par exemple, il n'y a pas d'exemple de ligne de commande dans le README ou dans l'un des didacticiels que j'ai rencontrés, et je n'ai pas pu comprendre comment l'utiliser pour télécharger du code sur la carte. Cependant, il est vraisemblablement capable de nous donner une compilation plus rapide quearduino
. Le fichier README mentionne également la possibilité de réutiliser les fichiers objets d'une compilation précédente, il existe donc des fonctionnalités de création.Pour afficher la sortie série, j'utilise quelque chose comme
Le nombre 1000000 doit correspondre au numéro auquel vous passez
Serial.begin()
dans votre code de carte. Vous pouvez également l'utiliserscreen
si vous avez un programme de carte qui est suffisamment interactif, ou vous pouvez utiliser n'importe quel utilitaire pour écrire directement sur l'appareil. Au fait, mon Due apparaît comme/dev/ttyACM0
(plutôt que/dev/ttyUSB0
pour l'Uno).la source
*.ino
fichier dans le répertoire, car il ne semble pas nécessairement télécharger celui mentionné par le--upload
paramètre.Ce dont vous avez besoin est un Makefile. Il y a quelques projets Makefile pour Arduino. Googler pour "Arduino Makefile" renvoie de nombreux résultats, y compris ce qui ressemble à un bon sur Github: https://github.com/sudar/Arduino-Makefile
La compilation à partir de la ligne de commande n'est pas anodine en raison de la façon dont l'IDE Arduino gère les bibliothèques.
Pour le moniteur série, je recommanderais minicom. Il s'agit d'un émulateur de terminal entièrement fonctionnel (vt102) sur la ligne de commande.
... par exemple.
la source
Si vous voulez une solution entièrement compatible pour votre projet arduino (oui, vous pouvez partager votre projet avec d' autres personnes qui utilisent tout simplement Arduino IDE) vous devez vérifier amake un outil pour simplifier la cli du arduino, je l' utilise avec Geany mais d'autres l'utilisent avec vi, Atom, etc.
C'est inspiré et les projets Ino et Arturo maintenant morts; veuillez prendre 5 minutes pour le tester et donner vos commentaires.
Exemple d'utilisation:
Il contient de la colle intelligente, il peut se souvenir de la carte et du fichier, et même détecter automatiquement l'USB de la carte; donc après une commande "amake -v" réussie, vous pouvez le faire sur la ligne de commande et cela fonctionnera.
Si vous utilisez des macros IDE, vous pouvez facilement créer les commandes de compilation et de téléchargement, par exemple en utilisant Geany IDE, cela deviendra:
Vous pouvez obtenir plus d'aide pour exécuter simplement "amake" ou "amake -h" une fois installé.
En outre, il peut prendre en charge CHAQUE carte / lib / programmeur que vous avez installé / configuré dans votre Arduino IDE, oui, une carte moderne comme Adafuit Trinket M0 / Arduino M0 etc ...
Allumez simplement votre IDE Arduino, allez dans le gestionnaire de carte, installez le support et c'est tout, mais suivez quelques instructions simples et vous êtes prêt.
La carte que vous avez n'est pas prise en charge? pas de problème, détectez le fqbn (lisez le fichier README.md) et passez-le comme nom de carte.
Je recherche des testeurs pour augmenter le nombre ou les alias de carte et la détection automatique des signatures USB appropriées.
N'oubliez pas qu'il s'agit d'un outil développé par des particuliers, maintenant partagé avec le public, vous savez, juste un programmeur qui gratte ses démangeaisons ...
À votre santé.
la source
Outil CLI officiel
L'équipe arduino développe un client cli https://github.com/arduino/arduino-cli
Annonce : https://blog.arduino.cc/2018/08/24/announcing-the-arduino-command-line-interface-cli/
Vous pouvez presque tout faire avec cela, du téléchargement de tableaux et de bibliothèques à la compilation et au téléchargement de scripts. Ce qui manque, c'est la partie surveillance (vous pouvez utiliser la méthode de Metamorphic en utilisant
stty
cat
, ça marche!)Les commandes sont très similaires à la réponse de Metamorphic puisque cet outil se dérive de celui-là
Instructions dans le dépôt Github et la page de manuel:
la source