Hur kompilerar jag, laddar upp och övervakar via Linux-kommandoraden?

Gränssnitt mellan en Arduino Uno (uppladdning etc.) och Arduino IDE (med Fedora-paketet) fungerar bra under Fedora 21.

Men jag vill hellre använda vim + make + vim-quickfix-mode osv.

Hur kan jag göra det?

Företrädesvis via de verktyg som finns tillgängliga från Fedora repositories.

Jag antar att IDE anropar externa kommandoradsverktyg för uppladdning osv.

Motsvarande IDE: s seriella bildskärm ansluter antagligen en terminalemulator (t.ex. screen) till /dev/ttyACM0, eller hur?

Kanske finns det ett bra exempelprojekt man kan titta på makefilen?

Svar

Jag skulle föreslå Googling för Makefile-projekt. Jag gjorde en stund för Blink-programmet, genom att i princip se vad som genererades av IDE och replikera på ett mer allmänt sätt.

# # 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åste ändra ARDUINO_DIR åtminstone för att ref föreläsning där du installerade IDE. Om du använder andra saker som Wire-biblioteket måste du utöka det något för att sammanställa ytterligare bibliotek. Återigen kan du använda vad IDE genererar själv för att styra dina ändringar.

Raderna med de ledande mellanslagen ovan behöver fliken karaktär istället för mellanslag, vilket är normalt för en Makefile.

Kommentarer

  • Ett uppladdningsavsnitt i make-filen skulle också vara användbart, att ladda upp den sammanställda skissen till arduino (med avr-dude).
  • Det skulle definitivt vara användbart. Men eftersom IDE hittills har uppfyllt mina behov av kompilering och uppladdning är jag inte starkt motiverad att ta reda på hur man gör det. 🙂
  • Ta en titt på Metamorphic answer för en enklare lösning

Answer

Jag använder kommandoradsgränssnittet till arduino -kommandot .

Jag kör det som detta:

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

Det finns en sida som beskriver andra kommandoradsverktyg, som inotool. Den sidan har också ett exempel Makefile. Dessa alternativ verkar lockande, men uppenbarligen, när detta skrivs, fungerar inget av dem. Jag antar att detta beror på några senaste ändringar i Arduino IDE-distributionsfiler som de är beroende av.

Att köra arduino som ovan är lite långsamt, eftersom det måste jag ladda Java antar jag, men åtminstone fungerar det. Det finns också ett arduino-builder kommando som kommer med Arduino IDE-distribution. När detta skrivs var det inte tillräckligt väldokumenterat för att jag skulle kunna ta reda på hur jag skulle använda det. Det finns till exempel inga kommandorader i README eller i någon av de självstudier jag stött på, och jag kunde inte räkna ut hur jag använder den för att ladda upp kod till tavlan. Förmodligen kan den dock ge oss en snabbare kompilering än arduino. README nämner också att det går att återanvända objektfiler från en tidigare kompilering, så det finns en del liknande funktioner.


För att visa seriell utdata Jag använder något som

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

Siffran 1000000 ska matcha det nummer du skickar till Serial.begin() i din styrelsekod. Du kan också använda screen om du har ett kortprogram som är lämpligt interaktivt, eller om du kan använda vilket verktyg som helst för att skriva direkt till enheten. Förresten visas min Due som /dev/ttyACM0 (snarare än /dev/ttyUSB0 för Uno).

Kommentarer

  • Se till att du har en enda *.ino -fil i katalogen, eftersom den inte nödvändigtvis överför den som nämns av --upload -parameter.
  • Ingen X11 DISPLAY-variabel har ställts in, men detta program utförde en åtgärd som kräver det. För mig

Svar

Vad du behöver är en Makefile. Det finns några Makefile-projekt för Arduino. Googling för ”Arduino Makefile” returnerar många resultat inklusive vad som ser bra ut på Github: https://github.com/sudar/Arduino-Makefile

Att kompilera från kommandoraden är inte trivialt på grund av hur Arduino IDE hanterar bibliotek.

Motsvarar IDE: s serie monitorn ansluter antagligen en terminalemulator (t.ex. skärm) till / dev / ttyACM0, eller hur?

För den seriella monitorn skulle jag rekommendera minicom. Det är en fullt fungerande terminalemulator (vt102) på kommandoraden.

minicom -D /dev/ttyACM0 -b 115200 

… till exempel.

Kommentarer

Svar

Officiellt CLI-verktyg

Arduino-teamet utvecklar ett cli klient https://github.com/arduino/arduino-cli

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

Du kan göra nästan allt med detta, från nedladdningskort och bibliotek till kompilering och uppladdning av skript. Vad som saknas är övervakningsdelen (du kan använda Metamorph ”s metod med stty cat, det fungerar!)

Kommandona liknar Metamorphics svar eftersom det här verktyget förgrenar sig av den där

Instruktioner i Github repo och mansidan:

 $ 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

Om du vill ha en helt kompatibel lösning för ditt arduino-projekt (ja, du kan dela ditt projekt med andra personer som använder bara Arduino IDE) du måste kolla amake ett verktyg för att förenkla cli av arduino, jag använder det med Geany men andra använder det med vi, Atom , etc.

Det är inspirerat och de nu döda Ino- och Arturo-projekten; ta 5 minuter att testa det och ge feedback.

Exempel på användning:

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 lite smart lim där inne, det kan komma ihåg styrelsen och filen och till och med autodetektera USB-kortet på kortet; så efter ett framgångsrikt ”amake -v” -kommando kan du göra detta på kommandoraden så fungerar det.

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

Om du använder några IDE-makron kan du skapa kompilerings- och uppladdningskommandon enkelt, till exempel med Geany IDE blir det:

  • Kompilera / verifiera: cd% d; amake -v uno% f
  • Ladda upp: cd% d; amake -u uno% f

Du kan få mer hjälp med att köra bara ”amake” eller ”amake -h” en gång installerat.

Det kan också stödja ALLA kort / lib / programmerare som du har installerat / konfigurerat i din Arduino IDE, ja, modernt kort som Adafuit Trinket M0 / Arduino M0 etc …

Avfyra bara din Arduino IDE, gå till styrelsens chef, installera support och det är allt, följ bara några enkla instruktioner så är du inställd.

Styrelsen du har stöds inte? inte ett problem, upptäck fqbn (läs README.md-filen) och skicka den som styrelsens namn.

Jag letar efter testare för att växa upp numret eller kortet alias och automatisk detektering av rätt USB-signaturer.

Kom ihåg att detta är ett privat odlat verktyg, som nu delas med allmänheten, du vet, bara en programmerare som kliar sig i det …

Skål.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *