Hvordan kompileres, uploades og overvåges via Linux-kommandolinjen?

Interfacing en Arduino Uno (uploading osv.) med Arduino IDE (ved hjælp af Fedora-pakken) fungerer fint under Fedora 21.

Men jeg vil hellere bruge vim + make + vim-quickfix-mode osv.

Hvordan kan jeg gøre det?

Fortrinsvis via de tilgængelige værktøjer fra Fedora repositories.

Jeg antager, at IDE kalder eksterne kommandolinjeværktøjer til upload osv.

Ækvivalent til IDEs serielle skærm forbinder sandsynligvis en terminalemulator (f.eks. screen) til /dev/ttyACM0, ikke?

Måske er der et godt eksempelprojekt, man kan se på makefilen?

Svar

Jeg vil foreslå Googling til Makefile-projekter. Jeg gjorde et stykke tid tilbage til Blink-programmet ved stort set at se, hvad der blev genereret af IDE og replikere på en mere generel måde.

# # 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 

Du skal i det mindste ændre ARDUINO_DIR for at ref forelæsning, hvor du installerede IDE. Hvis du bruger andre ting som Wire-biblioteket, skal du udvide det noget for at kompilere yderligere biblioteker. Igen kan du bruge hvad IDE genererer selv til at styre dine ændringer.

Linjerne med de førende mellemrum ovenfor har brug for fanen tegn i stedet for mellemrum, som det er normalt for en Makefile.

Kommentarer

  • Et uploadafsnit i make-filen ville også være nyttigt at uploade den kompilerede skitse til arduinoen (ved hjælp af avr-dude).
  • Det ville helt sikkert være nyttigt. Men da hidtil IDE har opfyldt mine behov for kompilering og upload, er jeg ikke stærkt motiveret til at finde ud af, hvordan man gør det. 🙂
  • Se på det metamorfe svar for en lettere løsning

Svar

Jeg bruger kommandolinjegrænsefladen til arduino kommandoen .

Jeg kører det som dette:

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

Der er en side , der beskriver andre kommandolinjeværktøjer, som f.eks. inotool. Denne side har også et eksempel Makefile. Disse alternativer virker lokkende, men tilsyneladende, når dette skrives, fungerer ingen af dem. Jeg antager, at dette skyldes nogle nylige ændringer i Arduino IDE-distributionsfiler, som de er afhængige af.

At køre arduino som ovenfor er lidt langsomt, fordi det må jeg indlæse Java, men i det mindste fungerer det. Der er også en arduino-builder kommando, der følger med Arduino IDE-distribution. I skrivende stund var det ikke tilstrækkeligt veldokumenteret til, at jeg kunne finde ud af, hvordan jeg bruger det. F.eks. Er der ingen eksempler på kommandolinjer i README eller i nogen af de selvstudier, jeg stødte på, og jeg kunne ikke finde ud af, hvordan jeg bruger den til at uploade kode til tavlen. Imidlertid er det formodentlig i stand til at give os en hurtigere kompilering end arduino. README nævner også at være i stand til at genbruge objektfiler fra en tidligere kompilering, så der er en vis funktionalitet, der ligner hinanden.


For at se seriel output Jeg bruger noget som

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

Nummeret 1000000 skal matche det nummer, du sender til Serial.begin() i din bestyrelseskode. Du kan også bruge screen, hvis du har et tavleprogram, der er passende interaktivt, eller du kan bruge ethvert værktøj til at skrive direkte til enheden. Forresten vises min Due som /dev/ttyACM0 (i stedet for /dev/ttyUSB0 for Uno).

Kommentarer

  • Sørg for, at du har en enkelt *.ino -fil i biblioteket, da det ikke synes at uploade den, der er nævnt af --upload -parameter.
  • Ingen X11 DISPLAY-variabel blev indstillet, men dette program udførte en operation, der kræver det. For mig

Svar

Hvad du har brug for er en Makefile. Der er et par Makefile-projekter til Arduino. Googling efter “Arduino Makefile” returnerer mange resultater, herunder hvad der ligner en god på Github: https://github.com/sudar/Arduino-Makefile

Kompilering fra kommandolinjen er ikke trivielt på grund af den måde, Arduino IDE håndterer biblioteker på.

Ækvivalent til IDEs serie monitor forbinder sandsynligvis en terminalemulator (f.eks. skærm) til / dev / ttyACM0, ikke?

For den serielle skærm vil jeg anbefale minicom. Det er en fuldt funktionel terminalemulator (vt102) på kommandolinjen.

minicom -D /dev/ttyACM0 -b 115200 

… f.eks.

Kommentarer

  • Denne Makefile er i det væsentlige en vedligeholdt version af det accepterede svar.Der er også et skabelonprojekt på GitHub, der viser dig, hvordan du konfigurerer det: github.com/ladislas/Bare-Arduino-Project

Svar

Officielt CLI-værktøj

Arduino-teamet udvikler et cli klient https://github.com/arduino/arduino-cli

Meddelelse : https://blog.arduino.cc/2018/08/24/announcing-the-arduino-command-line-interface-cli/

Du kan gøre næsten alt med dette, lige fra download af boards og biblioteker til kompilering og upload af scripts. Hvad der mangler, er overvågningsdelen (du kan bruge Metamorfe metoden ved hjælp af stty cat, det fungerer!)

Kommandoerne svarer meget til Metamorphic” s , da dette værktøj er forgrenet ud af den ene

Instruktioner i Github repo og mandsiden:

 $ 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. 

Svar

Hvis du vil have en fuldt kompatibel løsning til dit arduino-projekt (ja, du kan dele dit projekt med andre mennesker, der bruger bare almindelig Arduino IDE) skal du kontrollere amake et værktøj til at forenkle cli af arduinoen, jeg bruger det med Geany, men andre bruger det med vi, Atom osv.

Det er inspireret og de nu døde Ino og Arturo projekter; tag 5 minutter på at teste det, og giv feedback.

Eksempel på brug:

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] 

Det har noget smart lim derinde, det kan huske tavlen og filen, og endda autodetektere USBens tavle; så efter en vellykket “amake -v” kommando kan du gøre dette på kommandolinjen, og det fungerer.

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

Hvis du bruger nogle IDE-makroer, kan du lav kompilering og upload kommandoer let, for eksempel ved hjælp af Geany IDE bliver det:

  • Kompilér / verificer: cd% d; amake -v uno% f
  • Upload: cd% d; amake -u uno% f

Du kan få mere hjælp til at køre bare “amake” eller “amake -h” når den er installeret.

Det kan også understøtte ALLE kort / lib / programmør, du har installeret / konfigureret i din Arduino IDE, ja, moderne kort som Adafuit Trinket M0 / Arduino M0 osv …

Bare affyr din Arduino IDE, gå til bestyrelseslederen, installer support, og det er alt sammen, følg blot nogle enkle instruktioner, så er du klar.

Tavlen du har understøttes ikke? ikke et problem, registrer fqbn (læs README.md-filen) og send den videre som tavlenavn.

Jeg leder efter testere, der vokser op til antallet eller tavlen aliaser og automatisk detektion af de korrekte USB-signaturer.

Husk dette er et privat vokset værktøj, der nu deles med offentligheden, du ved, bare en programmør, der skraber det kløer …

Skål.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *