Cum să compilați, încărcați și monitorizați prin linia de comandă Linux?

Interfațarea unui Arduino Uno (încărcare etc.) cu IDE Arduino (folosind pachetul Fedora) funcționează bine în Fedora 21.

Dar mai degrab vreau să folosesc vim + make + vim-quickfix-mode etc.

Cum pot face asta?

De preferință prin instrumentele disponibile din depozitele Fedora.

Presupun că IDE apelează utilitare externe din linia de comandă pentru încărcare etc.

Echivalentul monitorului serial al IDE conectează probabil un emulator de terminal (de ex. screen) la /dev/ttyACM0, nu-i așa?

Poate că există un exemplu bun de proiect pe care îl puteți privi la makefile?

Răspuns

Aș sugera Googling pentru proiectele Makefile. Am făcut ceva timp în urmă pentru programul Blink, văzând practic ceea ce a fost generat de IDE și replicând asta într-un mod mai general.

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

Ar trebui să schimbați cel puțin ARDUINO_DIR, pentru a ref lect unde ați instalat IDE. Dacă utilizați alte lucruri, cum ar fi biblioteca Wire, ar trebui să o extindeți oarecum pentru a compila biblioteci suplimentare. Din nou, puteți utiliza ceea ce generează IDE pentru a vă ghida modificările.

Liniile cu spațiile principale de mai sus ar avea nevoie de fila caracter în loc de spații, așa cum este normal pentru un Makefile.

Comentarii

  • O secțiune de încărcare din fișierul make ar fi fi de asemenea util, pentru a încărca schița compilată pe arduino (folosind avr-dude).
  • Acest lucru ar fi cu siguranță util. Cu toate acestea, deoarece, până acum, IDE mi-a satisfăcut nevoile de compilare și încărcare, nu sunt puternic motivat să aflu cum să o fac. 🙂
  • Aruncați o privire asupra răspunsului metamorfic pentru o soluție mai ușoară

Răspuns

Folosesc interfața liniei de comandă la comanda arduino .

Îl rulez ca aceasta:

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

Există o pagină care descrie alte instrumente din linia de comandă, cum ar fi inotool. Această pagină are, de asemenea, un exemplu Makefile. Aceste alternative par atrăgătoare, dar aparent, la momentul scrierii, niciuna dintre ele nu funcționează. Presupun că acest lucru se datorează unor modificări recente în fișierele de distribuție Arduino IDE de care depind.

Rularea arduino ca mai sus este cam lent, deoarece trebuie să încărce Java, cred, dar cel puțin funcționează. Există și o comandă arduino-builder care vine cu Distribuție IDE Arduino. Începând cu această scriere, nu a fost suficient de bine documentat pentru a putea afla cum să-l folosesc. De exemplu, nu există exemple de linii de comandă în README sau în niciunul dintre tutorialele pe care le-am întâlnit, și nu mi-am putut da seama cum să-l folosesc pentru a încărca cod pe tablă. Cu toate acestea, probabil este capabil să ne ofere o compilare mai rapidă decât arduino. README menționează, de asemenea, posibilitatea de a reutiliza fișiere obiect dintr-o compilație anterioară, deci există unele funcționalități similare.


Pentru a vizualiza ieșirea serială Folosesc ceva de genul

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

Numărul 1000000 ar trebui să se potrivească cu numărul pe care îl trimiți Serial.begin() în codul tău de bord. De asemenea, puteți utiliza screen dacă aveți un program de bord care este adecvat interactiv sau puteți utiliza orice utilitar pentru a scrie direct pe dispozitiv. Apropo, cauza mea apare ca /dev/ttyACM0 (mai degrabă decât /dev/ttyUSB0 pentru Uno).

Comentarii

  • Asigurați-vă că aveți un singur fișier *.ino în director, deoarece nu pare să încarce în mod necesar cel menționat de Parametrul --upload.
  • Nu a fost setată nicio variabilă X11 DISPLAY, dar acest program a efectuat o operație care o necesită. Pentru mine

Răspuns

Ceea ce aveți nevoie este un Makefile. Există câteva proiecte Makefile pentru Arduino. Google pentru „Arduino Makefile” returnează multe rezultate, inclusiv ceea ce arată ca unul bun pe Github: https://github.com/sudar/Arduino-Makefile

Compilarea de pe linia de comandă nu este „banală” datorită modului în care Arduino IDE gestionează bibliotecile.

Echivalentul serialului IDE monitorul conectează probabil un emulator de terminal (de exemplu, ecran) la / dev / ttyACM0, nu?

Pentru monitorul serial aș recomanda minicom. Este un emulator de terminal complet funcțional (vt102) pe linia de comandă.

minicom -D /dev/ttyACM0 -b 115200 

… de exemplu.

Comentarii

  • Acest Makefile este în esență o versiune menținută a răspunsului acceptat.Există, de asemenea, un proiect șablon pe GitHub care vă arată cum să îl configurați: github.com/ladislas/Bare-Arduino-Project

Răspuns

Instrument CLI oficial

Echipa arduino dezvoltă un cli client https://github.com/arduino/arduino-cli

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

Puteți face aproape totul cu aceasta, de la descărcarea de plăci și biblioteci, până la compilarea și încărcarea de scripturi. Ceea ce lipsește este partea de monitorizare (puteți utiliza metoda metamorfică utilizând stty cat, Funcționează!)

Comenzile sunt foarte asemănătoare cu răspunsul Metamorfic , deoarece acest instrument este ramificat din acea

Instrucțiuni din Github repo și pagina de manual:

 $ 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ăspuns

Dacă doriți o soluție complet compatibilă pentru proiectul dvs. arduino (da, puteți partaja proiectul cu alte persoane care utilizează doar simplu Arduino IDE) trebuie să verificați amake un instrument pentru a simplifica cli-ul arduino, îl folosesc cu Geany, dar alții îl folosesc cu vi, Atom , etc.

Este inspirat și este mort proiectele Ino și Arturo; vă rog să luați 5 minute pentru a-l testa și vă rugăm să ne oferiți feedback.

Exemplu de utilizare:

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] 

Are ceva adeziv inteligent acolo, este poate aminti placa și fișierul și chiar detecta automat USB-ul plăcii; deci, după o comandă „amake -v” reușită, puteți face acest lucru pe linia de comandă și va funcționa.

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

Dacă utilizați câteva macrocomenzi IDE, puteți creați ușor comenzile de compilare și încărcare, de exemplu folosind Geany IDE va deveni:

  • Compilare / verificare: cd% d; amake -v uno% f
  • Încărcare: cd% d; amake -u uno% f

Puteți obține mai mult ajutor pentru a rula doar „amake” sau „amake -h” odată instalat.

De asemenea, poate suporta FIECARE bord / lib / programator pe care l-ați instalat / configurat în ID-ul dvs. Arduino, da, placă modernă precum Adafuit Trinket M0 / Arduino M0 etc …

Porniți ID-ul Arduino, mergeți la managerul de bord, instalați asistență și asta e tot, nu urmați niște instrucțiuni simple și sunteți setat.

nu aveți suport? nu este o problemă, detectați fqbn (citiți fișierul README.md) și transmiteți-l ca nume de placă.

Caut testeri pentru a crește numărul sau placa aliasuri și detectarea automată a semnăturilor USB corespunzătoare.

Amintiți-vă că acesta este un instrument privat dezvoltat, acum partajat cu publicul, știți, doar un programator care îl zgârie …

Salutări.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *