Comment compiler, télécharger et surveiller via la ligne de commande Linux?

Linterfaçage dun Arduino Uno (téléchargement, etc.) avec lIDE Arduino (en utilisant le package Fedora) fonctionne bien sous Fedora 21.

Mais je veux plutôt utiliser vim + make + vim-quickfix-mode etc.

Comment puis-je faire ça?

De préférence via les outils disponibles dans les dépôts Fedora.

Je suppose que lEDI appelle des utilitaires de ligne de commande externes pour le téléchargement, etc.

Léquivalent du moniteur série de lEDI est probablement la connexion dun émulateur de terminal (par exemple screen) à /dev/ttyACM0, nest-ce pas?

Peut-être y a-t-il un bon exemple de projet à regarder dans le makefile?

Réponse

Je suggérerais de googler les projets Makefile. Jen ai fait un il y a quelque temps pour le programme Blink, en voyant essentiellement ce qui a été généré par lEDI et en le répliquant cela dune 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 au moins changer ARDUINO_DIR, en ref lect où vous avez installé lIDE. Si vous utilisez dautres éléments 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 lEDI génère lui-même pour guider vos modifications.

Les lignes avec les espaces en tête ci-dessus auraient besoin de longlet caractère au lieu despaces, comme cest normal pour un Makefile.

Commentaires

  • Une section upload dans le make file serait également utile, pour télécharger lesquisse compilée sur larduino (en utilisant avr-dude).
  • Ce serait certainement utile. Cependant, comme jusquà présent, lEDI a répondu à mes besoins de compilation et de téléchargement, je ne suis pas fortement motivé pour savoir comment le faire. 🙂
  • Jetez un œil à la réponse Métamorphique pour une solution plus simple

Réponse

Jutilise linterface de ligne de commande avec la commande arduino .

Je lexécute comme ceci:

arduino --upload sketch/sketch.ino --port /dev/ttyUSB* 

Il y a une page qui décrit dautres outils de ligne de commande, comme inotool. Cette page contient également un exemple Makefile. Ces alternatives semblent séduisantes, mais apparemment, à ce jour, aucune delles 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 une commande arduino-builder fournie avec le Distribution Arduino IDE. Au moment décrire ces lignes, il nétait pas suffisamment bien documenté pour que je puisse comprendre comment lutiliser. Par exemple, il ny a pas dexemple de lignes de commande dans le README ou dans lun des didacticiels que jai rencontrés, et je ne pouvais pas comprendre comment lutiliser pour télécharger du code sur la carte. Cependant, il est probablement capable de nous donner une compilation plus rapide que arduino. Le README mentionne également la possibilité de réutiliser des fichiers objets dune compilation précédente, il existe donc des fonctionnalités de création.


Pour afficher la sortie série Jutilise quelque chose comme

stty -F /dev/ttyUSB* 1000000 raw -clocal -echo cat /dev/ttyUSB* 

Le nombre 1000000 doit correspondre au nombre que vous passez à Serial.begin() dans votre code de carte. Vous pouvez également utiliser screen si vous avez un programme de tableau qui est suffisamment interactif, ou vous pouvez utiliser nimporte quel utilitaire pour écrire directement sur lappareil. À propos, mon dû apparaît sous la forme /dev/ttyACM0 (plutôt que /dev/ttyUSB0 pour lUno).

Commentaires

  • Assurez-vous davoir un seul fichier *.ino dans le répertoire, car il ne semble pas nécessairement télécharger celui mentionné par le Paramètre --upload.
  • Aucune variable X11 DISPLAY na été définie, mais ce programme a effectué une opération qui le nécessite. Pour moi

Réponse

Ce dont vous avez besoin est un Makefile. Il existe quelques projets Makefile pour Arduino. Google 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 nest pas anodine en raison de la façon dont lIDE Arduino gère les bibliothèques.

Léquivalent du numéro de série de lEDI monitor est probablement en train de connecter un émulateur de terminal (par exemple, screen) à / dev / ttyACM0, non?

Pour le moniteur série, je recommanderais minicom. Cest un émulateur de terminal entièrement fonctionnel (vt102) sur la ligne de commande.

minicom -D /dev/ttyACM0 -b 115200 

… par exemple.

Commentaires

  • Ce Makefile est essentiellement une version maintenue de la réponse acceptée.Il existe également un modèle de projet sur GitHub qui vous montre comment le configurer: github.com/ladislas/Bare-Arduino-Project

Réponse

Outil CLI officiel

Léquipe arduino développe 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 tableaux et de bibliothèques, à la compilation et au téléchargement de scripts. Ce qui manque, cest 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 branche hors de celui-là

Instructions dans le dépôt 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. 

Réponse

Si vous voulez une solution entièrement compatible pour votre projet arduino (oui, vous pouvez partager votre projet avec dautres personnes qui utilisent juste Arduino IDE) vous devez vérifier amake un outil pour simplifier le cli de larduino, je lutilise avec Geany mais dautres lutilisent avec vi, Atom , etc.

Cest inspiré et les projets Ino et Arturo maintenant morts; sil vous plaît prendre 5 minutes pour le tester et sil vous plaît donner vos commentaires.

Exemple dutilisation:

cd ~/Arduino/Blink/ [move to your arduino project folder] amake -v uno Blink.ino [to compile/verify your code] amake -u uno Blink.ino /dev/ttyUSB0 [to upload your code to an arduino connected via USB] 

Il y a de la colle intelligente là-dedans, il peut se souvenir de la carte et du fichier, et même détecter automatiquement lusb de la carte; donc après une commande « amake -v » réussie, vous pouvez le faire sur la ligne de commande et cela fonctionnera.

amake -v [to compile/verify your code] amake -u [to upload your code to an arduino connected via USB] 

Si vous utilisez des macros IDE, vous pouvez créez facilement les commandes de compilation et de téléchargement, par exemple en utilisant Geany IDE, cela deviendra:

  • Compiler / Vérifier: cd% d; amake -v uno% f
  • Upload: cd% d; amake -u uno% f

Vous pouvez obtenir plus daide pour exécuter simplement « amake » ou « amake -h » une fois installé.

De plus, il peut prendre en charge CHAQUE carte / lib / programmeur que vous avez installé / configuré dans votre IDE Arduino, oui, carte moderne comme lAdafuit Trinket M0 / Arduino M0 etc …

Lancez simplement votre IDE Arduino, allez dans le gestionnaire de cartes, installez le support et cest tout, suivez quelques instructions simples et vous êtes prêt.

La carte vous navez pas de support? pas de problème, détectez le fqbn (lisez le fichier README.md) et transmettez-le comme nom de la carte.

Je recherche des testeurs pour augmenter le nombre ou la carte alias et détection automatique des signatures USB appropriées.

Rappelez-vous quil sagit dun outil développé par le secteur privé, maintenant partagé avec le public, vous savez, juste un programmeur qui le gratte …

Acclamations.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *