47 votes

Compilation et téléchargement Arduino en ligne de commande ?

Comment puis-je compiler et télécharger Arduino croquis à partir de la ligne de commande sur Mac et Linux ? J'ai installé l'environnement de programmation Arduino. Y a-t-il des exemples de fichiers makefile quelque part ?

0 votes

Cette question est similaire à la question suivante sur Arduino StackExchange : arduino.stackexchange.com/questions/15893/

38voto

nailxx Points 3951

Il existe une boîte à outils Arduino en ligne de commande nommée Ino . C'est comme ça.

9 votes

Malheureusement, il n'est plus entretenu

16voto

user1823664 Points 370

La compilation et le téléchargement de sketches (par opposition aux sources C/C++) en ligne de commande (sous Windows, Mac et Linux) sont pris en charge directement par le biais de drapeaux dans l'exécutable arduino depuis la version 1.5.0.

Un ino peut être compilé et téléchargé avec arduino --upload [sketch.ino]

Documentation

0 votes

Comment trouver arduino.exe de nos jours ?

0 votes

Cela a démarré l'interface graphique d'arduino. :(

8voto

wesen Points 440

Il s'agit de mon include gnu make pour les projets AVR, vous devrez peut-être l'adapter à votre environnement. Il crée des dépendances, a une foule d'options gcc standard que je trouve utiles ou qui optimisent la taille, ainsi qu'un répertoire de bibliothèque que j'utilise. Je l'ai utilisé avec succès pour compiler des logiciels arduino, j'ai aussi précédemment piraté le PdePreprocessor dans l'éditeur arduino pour qu'il soit exécuté en ligne de commande afin de générer tout le voodoo :

https://github.com/wesen/mididuino/blob/master/app/src/processing/app/preproc/PdePreprocessor.java

#
# generic AVR makefile
#
# (c)  July 2011 - Manuel Odendahl - wesen@ruinwesen.com
#

# include this into your main Makefile, after having defined TARGET and TARGET_OBJS

all: $(TARGET).hex

CURDIR := $(dir $(lastword $(MAKEFILE_LIST)))
include $(CURDIR)MidiCtrl.mk

CC             = avr-gcc
CXX            = avr-g++
OBJCOPY        = avr-objcopy
AVR_ARCH       ?= atmega64
LDAVR_ARCH     ?= avrmega64
FLASH_PROTOCOL = jtag2

CFLAGS   += -Os -ffunction-sections -DAVR -I. -mmcu=$(AVR_ARCH) -mcall-prologues -fshort-enums -fpack-struct -Wall -Werror
CFLAGS   += -Wall -DLITTLE_ENDIAN -g -flto

CFLAGS += no-tree-loop-optimize -ffreestanding -morder1 -funsigned-char -funsigned-bitfields -fshort-enums -fpack-struct
CFLAGS += -fdata-sections -fno-split-wide-types -fno-inline-small-functions -mcall-prologues

CLDFLAGS += -Wl,--relax,--gc-sections -ffunction-sections
CLDFLAGS += -mmcu=$(AVR_ARCH)
LDFLAGS  = -m $(LDAVR_ARCH) -M

# generate list
# CFLAGS += -Wa,-adhlns=$@.lst

%.o: %.cpp
        $(CXX) $(CXXFLAGS) -c $< -o $@

%.o: %.c
        $(CC) $(CFLAGS) -c $< -o $@

%.o: %.s
        $(CC) $(CFLAGS) -c $< -o $@

%.s: %.c
        $(CC) -S $(CFLAGS) -fverbose-asm $< -o $@

%.o: %.S
        $(CC) $(CFLAGS) -c $< -o $@

%.syx: %.hex
        ihex2sysex $< $@

%.srec: %.elf
        $(OBJCOPY) -j .text -j .data -O srec $< $@

%.hex: %.elf
        $(OBJCOPY) -j .text -j .data -O ihex $< $@

%.ee_srec: %.elf
        $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@

AVR_BASE_DIR  ?= $(abspath $(CURDIR)..)
AVR_LIB_DIR   ?= $(AVR_BASE_DIR)/hardware/libraries

AVR_LIBS       += CommonTools Midi
AVR_LIB_DIRS   += $(foreach lib,$(AVR_LIBS),$(AVR_LIB_DIR)/$(lib))
AVR_INC_FLAGS  += $(foreach dir,$(AVR_LIB_DIRS),-I$(dir))
AVR_OBJS       += $(foreach dir,$(AVR_LIB_DIRS),$(foreach file,$(wildcard $(dir)/*.cpp),$(subst .cpp,.o,$(file))))
AVR_OBJS       += $(foreach dir,$(AVR_LIB_DIRS),$(foreach file,$(filter-out $(AVR_HOST_EXCLUDE),$(wildcard $(dir)/*.c)),$(subst .c,.o,$(file))))
AVR_DEPS       += $(subst .o,.d,$(AVR_OBJS))

# AVR_HOST_EXCLUDE can be used to exclude specific files later on

CXXFLAGS += $(AVR_INC_FLAGS)
CFLAGS += $(AVR_INC_FLAGS)

CXXFlags += -Werror -Wall
CFLAGS += -Werror -Wall

default: all

%.d:%.c
        set -e; $(CC) -MM $(CFLAGS) $< \
        | sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' > $@ ; \
        [ -s $@ ] || rm -f $@

%.d:%.cpp
        set -e; $(CXX) -MM $(CXXFLAGS) $< \
        | sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' > $@ ; \
        [ -s $@ ] || rm -f $@

%.host.d:%.c
        set -e; $(CC) -MM $(CFLAGS) $< \
        | sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' > $@ ; \
        [ -s $@ ] || rm -f $@

%.host.d:%.cpp
        set -e; $(CXX) -MM $(CXXFLAGS) $< \
        | sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' > $@ ; \
        [ -s $@ ] || rm -f $@

printlibs:
        echo $(AVR_LIBS)

$(TARGET).elf: $(TARGET).o $(TARGET_OBJS) $(AVR_OBJS)
        $(CXX) $(CLDFLAGS) -g -o $@ $^

_clean:
        - rm *.elf *.hex *.o .midictrl.flags

libclean:
        rm -rf $(TARGET_OBJS) $(OBJS)

# concrete settings for development environment

UNAME=$(shell uname)
ISWIN=$(findstring CYGWIN,$(UNAME))
ISMAC=$(findstring Darwin,$(UNAME))

CC = avr-gcc
CXX = avr-g++
OBJCOPY = avr-objcopy
AVR_ARCH = atmega64
F_CPU = 16000000L
CORE = minicommand2

5voto

wesen Points 440

Vous devez créer un fichier cpp viable à partir de votre sketch arduino. L'environnement arduino le fait automatiquement pour vous. Une astuce pour accéder à ces fichiers est d'ouvrir le fichier arduino preferences.txt (il se trouve dans ~/Library/Arduino sur mac, je pense dans vos Documents and Settings ou Application Data sur Windows, je ne me souviens plus exactement), et de définir build.verbose=true et upload.verbose=true. Démarrez arduino, et compilez votre sketch (ne le téléchargez pas). La console en bas de l'écran vous montrera quels fichiers ont été compilés. Vous pouvez maintenant aller dans ce répertoire, qui contiendra le fichier cpp, et les fichiers objets compilés pour tous les objets de base d'arduino. Vous pouvez les copier dans votre projet et utiliser le fichier cpp pour faire d'autres modifications. Faites-moi savoir si vous avez besoin de plus d'informations sur le Makefile, je peux vous fournir celles que j'ai.

9 votes

Dire à quelqu'un de lancer un gui pour utiliser un outil en ligne de commande n'est pas une suggestion utile...

0 votes

Cette astuce ne fonctionne qu'à partir de la version 1.6 d'Arduino si vous ajoutez le paramètre build.path au fichier de préférences (qui, sur Mac, se trouve dans ~/Bibliothèque/Arduino15/preferences.txt). Créez d'abord le dossier de construction. Par exemple : 'build.path=/Users/user1/Documents/Arduino/build'.

4voto

Madacol Points 38

Outil CLI officiel

L'équipe arduino est en train de développer un cli client 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 cartes et de bibliothèques, à la compilation et au téléchargement de scripts. Ce qui manque, c'est la partie surveillance.

Pour surveiller sous linux vous pouvez toujours utiliser les commandes stty pour configurer le port et cat pour le lire.

stty -F /dev/ttyACM0 38400 # <-- Baud rate. The number in Serial.begin()
cat /dev/ttyACM0 # <-- Port

Vous pouvez trouver le port avec arduino-cli

arduino-cli board list

Instructions complètes dans le Repo Github et la page de manuel :

    $ arduino-cli Arduino Command Line Interface (arduino-cli).

    Usage:   arduino-cli [command]

    Examples: arduino <command> [flags...]

    Available Commands:
      board         Arduino board commands.
      compile       Compiles Arduino sketches.
      config        Arduino Configuration Commands.
      core          Arduino Core operations.
      help          Help about any command
      lib           Arduino commands about libraries.
      sketch        Arduino CLI Sketch Commands.
      upload        Upload Arduino sketches.
      version       Shows version number of Arduino CLI.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X