Hvordan kompilere, laste opp og overvåke via Linux-kommandolinjen?

Grensesnitt for en Arduino Uno (opplasting osv.) med Arduino IDE (ved hjelp av Fedora-pakken) fungerer fint under Fedora 21.

Men jeg vil heller bruke vim + make + vim-quickfix-mode osv.

Hvordan kan jeg gjøre det?

Gjerne via verktøyene som er tilgjengelige fra Fedora repositories.

Jeg antar at IDE kaller eksterne kommandolinjeverktøy for opplasting etc.

Tilsvarende til IDEs serielle skjerm kobler sannsynligvis en terminalemulator (f.eks. screen) til /dev/ttyACM0, ikke sant?

Kanskje det er et godt eksempelprosjekt man kan se på makefilen?

Svar

Jeg vil foreslå Googling for Makefile-prosjekter. Jeg gjorde det en stund tilbake for Blink-programmet, ved i utgangspunktet å se hva som ble generert av IDE og replikere på en mer generell måte.

# # 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 må i det minste endre ARDUINO_DIR forelesning der du installerte IDE. Hvis du bruker andre ting som Wire-biblioteket, må du utvide det noe for å kompilere flere biblioteker. Igjen kan du bruke det IDE genererer selv for å styre endringene dine.

Linjene med de ledende mellomrommene ovenfor trenger -fanen tegn i stedet for mellomrom, som normalt for en Makefile.

Kommentarer

  • En opplastingsseksjon i make-filen ville også være nyttig, for å laste opp den kompilerte skissen til arduinoen (ved hjelp av avr-dude).
  • Det ville definitivt være nyttig. Men så langt, IDE har oppfylt mine behov for kompilering og opplasting, er jeg ikke sterkt motivert for å finne ut hvordan jeg gjør det. 🙂
  • Ta en titt på Metamorf svar for en enklere løsning

Svar

Jeg bruker kommandolinjegrensesnittet til arduino kommandoen .

Jeg kjører det som dette:

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

Det er en side som beskriver andre kommandolinjeverktøy, som inotool. Den siden har også et eksempel Makefile. Disse alternativene virker fristende, men tilsynelatende fungerer ingen av dem i skrivende stund. Jeg antar at dette skyldes noen nylige endringer i Arduino IDE distribusjonsfiler som de er avhengige av.

Å kjøre arduino som ovenfor er litt tregt, fordi det må jeg laste Java antar jeg, men i det minste fungerer det. Det er også en arduino-builder kommando som følger med Arduino IDE-distribusjon. I skrivende stund var det ikke tilstrekkelig godt dokumentert for at jeg kunne finne ut hvordan jeg skulle bruke det. For eksempel er det ingen eksempler på kommandolinjer i README eller i noen av veiledningene jeg kom over, og jeg kunne ikke finne ut hvordan jeg kunne bruke den til å laste opp kode til tavlen. Antagelig er det imidlertid mulig å gi oss en raskere kompilering enn arduino. README nevner også å kunne gjenbruke objektfiler fra en tidligere kompilering, så det er noe lignende funksjonalitet.


For å vise seriell utgang Jeg bruker noe sånt som

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

Tallet 1000000 skal matche nummeret du sender til Serial.begin() i brettkoden din. Du kan også bruke screen hvis du har et tavleprogram som er passende interaktivt, eller du kan bruke hvilket som helst verktøy til å skrive direkte til enheten. Forresten vises min Due som /dev/ttyACM0 (i stedet for /dev/ttyUSB0 for Uno).

Kommentarer

  • Forsikre deg om at du har en enkelt *.ino -fil i katalogen, da den ikke nødvendigvis ser ut til å laste opp den som er nevnt av --upload parameter.
  • Ingen X11 DISPLAY-variabel ble angitt, men dette programmet utførte en operasjon som krever det. For meg

Svar

Det du trenger er en Makefile. Det er noen få Makefile-prosjekter for Arduino. Googling for «Arduino Makefile» returnerer mange resultater, inkludert det som ser bra ut på Github: https://github.com/sudar/Arduino-Makefile

Kompilering fra kommandolinjen er ikke trivielt på grunn av måten Arduino IDE håndterer biblioteker på.

Tilsvarende IDE-serien monitor kobler sannsynligvis en terminalemulator (f.eks. skjerm) til / dev / ttyACM0, ikke sant?

For seriell skjerm vil jeg anbefale minicom. Det er en fullt funksjonell terminalemulator (vt102) på kommandolinjen.

minicom -D /dev/ttyACM0 -b 115200 

… for eksempel.

Kommentarer

Svar

Offisielt CLI-verktøy

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

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

Du kan gjøre nesten alt med dette, fra nedlasting av tavler og biblioteker, til kompilering og opplasting av skript. Det som mangler er overvåkingsdelen (du kan bruke Metamorfe metoden ved hjelp av stty cat, det fungerer!)

Kommandoene ligner veldig på Metamorphics svar siden dette verktøyet forgrener seg ut av den

Instruksjonene i Github repo og mannssiden:

 $ 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 ha en fullt kompatibel løsning for ditt arduino-prosjekt (ja, du kan dele prosjektet ditt med andre som bruker bare ren Arduino IDE) må du sjekke amake et verktøy for å forenkle cli av arduinoen, jeg bruker den sammen med Geany, men andre bruker den med vi, Atom osv.

Det er inspirert og de nå døde Ino- og Arturo-prosjektene; ta 5 minutter å teste det, og gi tilbakemelding.

Eksempel på bruk:

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] 

Den har litt smart lim der inne, det kan huske tavlen og filen, og til og med autodetektere USB-en til tavlen; så etter en vellykket «amake -v» -kommando kan du gjøre dette på kommandolinjen og den vil fungere.

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

Hvis du bruker noen IDE-makroer, kan du lag kompileringen og last opp kommandoene enkelt, for eksempel ved å bruke Geany IDE blir den:

  • Kompilere / verifiser: cd% d; amake -v uno% f
  • Last opp: cd% d; amake -u uno% f

Du kan få mer hjelp til å kjøre bare «amake» eller «amake -h» når den er installert.

Den kan også støtte HVER kort / lib / programmerer du har installert / konfigurert i din Arduino IDE, ja, moderne kort som Adafuit Trinket M0 / Arduino M0 etc …

Bare fyr Arduino IDE, gå til styreleder, installer støtte og det er alt, men følg noen enkle instruksjoner, så er du klar.

Styret du har ikke støttes? ikke noe problem, oppdag fqbn (les README.md-filen) og gi den videre som styrets navn.

Jeg ser etter testere for å vokse opp tallet eller tavlen aliaser og automatisk gjenkjenning av de riktige USB-signaturene.

Husk at dette er et privat dyrket verktøy, som nå deles med publikum, du vet, bare en programmerer som klør det klør …

Skål.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *