Hoe compileren, uploaden en monitoren via de Linux-opdrachtregel?

Het koppelen van een Arduino Uno (uploaden etc.) met de Arduino IDE (met behulp van het Fedora-pakket) werkt prima onder Fedora 21.

Maar ik wil liever vim + make + vim-quickfix-mode etc. gebruiken.

Hoe kan ik dat doen?

Bij voorkeur via de tools die beschikbaar zijn in de Fedora repositories.

Ik neem aan dat de IDE externe opdrachtregelhulpprogrammas aanroept voor het uploaden enz.

Het equivalent van de seriële monitor van de IDE is waarschijnlijk het aansluiten van een terminalemulator (bijv. screen) naar /dev/ttyACM0, toch?

Misschien is er een goed voorbeeldproject waar men naar het makefile kan kijken?

Answer

Ik zou Googlen voor Makefile-projecten aanraden. Ik heb er een tijdje geleden een gedaan voor het Blink-programma, door in feite te zien wat er door de IDE werd gegenereerd en te repliceren dat op een meer algemene manier.

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

Je zou ARDUINO_DIR in ieder geval moeten veranderen om te verwijzen lecteer waar je de IDE hebt geïnstalleerd. Als u andere dingen gebruikt, zoals de Wire-bibliotheek, moet u deze enigszins uitbreiden om extra bibliotheken te compileren. Nogmaals, u kunt gebruiken wat de IDE zelf genereert om uw wijzigingen te begeleiden.

De regels met de voorloopspaties hierboven hebben het tabblad teken in plaats van spaties, zoals normaal is voor een Makefile.

Reacties

  • Een uploadsectie in het make-bestand zou ook handig zijn, om de gecompileerde schets naar de arduino te uploaden (met avr-dude).
  • Dat zou zeker handig zijn. Maar aangezien de IDE tot nu toe aan mijn behoeften voor compileren en uploaden heeft voldaan, ben ik niet sterk gemotiveerd om uit te zoeken hoe ik dit moet doen. 🙂
  • Bekijk Metamorphic answer voor een eenvoudigere oplossing

Answer

Ik gebruik de opdrachtregelinterface voor de arduino opdracht .

Ik voer het uit zoals dit:

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

Er is een pagina die andere opdrachtregelprogrammas beschrijft, zoals inotool. Die pagina heeft ook een voorbeeld Makefile. Deze alternatieven lijken aanlokkelijk, maar blijkbaar werkt geen van hen op het moment van schrijven. Ik neem aan dat dit het gevolg is van enkele recente wijzigingen in de Arduino IDE-distributiebestanden waarvan ze afhankelijk zijn.

arduino draaien zoals hierboven is een beetje traag, omdat het moet Java laden, denk ik, maar het werkt tenminste. Er is ook een arduino-builder -opdracht die bij de Arduino IDE-distributie. Op het moment van schrijven was het niet voldoende goed gedocumenteerd om erachter te komen hoe ik het moest gebruiken. Er zijn bijvoorbeeld geen voorbeeldopdrachtregels in de README of in een van de tutorials die ik tegenkwam, en ik kon er niet achter komen hoe ik het moest gebruiken om code naar het bord te uploaden. Het is echter waarschijnlijk in staat om ons een snellere compilatie te geven dan arduino. De README vermeldt ook het kunnen hergebruiken van objectbestanden van een eerdere compilatie, dus er is enige make-like functionaliteit.


Om seriële output te bekijken Ik gebruik zoiets als

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

Het nummer 1000000 moet overeenkomen met het nummer dat je doorgeeft aan Serial.begin() in uw bordcode. Je kunt ook screen gebruiken als je een bordprogramma hebt dat op de juiste manier interactief is, of je kunt welk hulpprogramma dan ook gebruiken om rechtstreeks naar het apparaat te schrijven. Trouwens, mijn Due wordt weergegeven als /dev/ttyACM0 (in plaats van /dev/ttyUSB0 voor de Uno).

Reacties

  • Zorg ervoor dat je een enkel *.ino -bestand in de directory hebt, aangezien het niet noodzakelijkerwijs het bestand uploadt dat wordt genoemd door de --upload parameter.
  • Er is geen X11 DISPLAY-variabele ingesteld, maar dit programma heeft een bewerking uitgevoerd die dit vereist. Voor mij

Answer

Wat je nodig hebt is een Makefile. Er zijn een paar Makefile-projecten voor Arduino. Googelen naar “Arduino Makefile” levert veel resultaten op, waaronder wat er op Github goed uitziet: https://github.com/sudar/Arduino-Makefile

Compileren vanaf de opdrachtregel is niet triviaal vanwege de manier waarop de Arduino IDE met bibliotheken omgaat.

Het equivalent van het IDE-serienummer monitor verbindt waarschijnlijk een terminalemulator (bijv. screen) met / dev / ttyACM0, toch?

Voor de seriële monitor zou ik minicom aanbevelen. Het is een volledig functionele terminalemulator (vt102) op de opdrachtregel.

minicom -D /dev/ttyACM0 -b 115200 

… bijvoorbeeld.

Opmerkingen

Antwoord

Officiële CLI-tool

Het arduino-team ontwikkelt een cli client https://github.com/arduino/arduino-cli

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

Je kunt hier bijna alles mee doen, van het downloaden van borden en bibliotheken tot het compileren en uploaden van scripts. Wat ontbreekt, is het controlegedeelte (u kunt de Metamorphic “-methode gebruiken met stty cat, het werkt!)

De commandos lijken erg op het antwoord van Metamorphic” s antwoord aangezien deze tool vertakt daaruit

Instructies in de Github-repo en de man-pagina:

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

Answer

Als je een volledig compatibele oplossing voor je Arduino-project wilt (ja, je kunt je project delen met andere mensen die gewoon Arduino IDE) je moet een tool aanvinken om de cli van de arduino te vereenvoudigen, ik gebruik het met Geany maar anderen gebruiken het met vi, Atom , etc.

Het is geïnspireerd en de nu overleden Ino- en Arturo-projecten; neem alstublieft 5 minuten de tijd om het te testen en geef feedback.

Voorbeeldgebruik:

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] 

Er zit wat slimme lijm in, het kan het bord en het bestand onthouden en zelfs de usb van het bord automatisch detecteren; dus na een succesvol “amake -v” commando kun je dit doen op de commandoregel en het zal werken.

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

Als je een aantal IDE macros gebruikt, kun je maak de compileer- en uploadopdrachten eenvoudig, bijvoorbeeld met behulp van Geany IDE het wordt:

  • Compileren / verifiëren: cd% d; amake -v uno% f
  • Upload: cd% d; amake -u uno% f

Je kunt meer hulp krijgen door gewoon “amake” of “amake -h” te draaien na installatie.

Het kan ook ELK board / lib / programmeur die je hebt geïnstalleerd / geconfigureerd in je Arduino IDE, ja, modern board zoals de Adafuit Trinket M0 / Arduino M0 etc …

Start gewoon je Arduino IDE, ga naar de boardmanager, installeer ondersteuning en dat is alles, volg gewoon enkele eenvoudige instructies en je bent klaar.

Het board je hebt wordt niet ondersteund? geen probleem, detecteer de fqbn (lees het README.md bestand) en geef het door als de bordnaam.

Ik ben op zoek naar testers om het nummer of bord op te laten groeien aliassen en automatische detectie van de juiste USB-handtekeningen.

Onthoud dat dit een privé-tool is, nu gedeeld met het publiek, weet je, gewoon een programmeur die er aan krabt …

Proost.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *