Wie kompiliere, lade und überwache ich über die Linux-Kommandozeile?

Die Schnittstelle eines Arduino Uno (Hochladen usw.) mit der Arduino IDE (unter Verwendung des Fedora-Pakets) funktioniert unter Fedora 21 einwandfrei.

Aber ich möchte lieber den vim + make + vim-quickfix-Modus usw. verwenden.

Wie kann ich das tun?

Am besten über die Tools, die in den Fedora-Repositorys verfügbar sind. P. >

Ich gehe davon aus, dass die IDE externe Befehlszeilenprogramme zum Hochladen usw. aufruft.

Das Äquivalent zum seriellen Monitor der IDE ist wahrscheinlich das Anschließen eines Terminalemulators (z. B. ) bis /dev/ttyACM0, richtig?

Vielleicht gibt es ein gutes Beispielprojekt, das man sich im Makefile ansehen kann?

Antwort

Ich würde vorschlagen, nach Makefile-Projekten zu googeln. Ich habe vor einiger Zeit eine für das Blink-Programm durchgeführt, indem ich im Grunde gesehen habe, was von der IDE generiert und repliziert wurde das allgemeiner.

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

Sie müssten mindestens ARDUINO_DIR ändern, um ref Lesen Sie, wo Sie die IDE installiert haben. Wenn Sie andere Dinge wie die Wire-Bibliothek verwenden, müssen Sie sie etwas erweitern, um zusätzliche Bibliotheken zu kompilieren. Auch hier können Sie das verwenden, was die IDE selbst generiert, um Ihre Änderungen zu steuern.

Die Zeilen mit den führenden Leerzeichen oben benötigen die Registerkarte Zeichen anstelle von Leerzeichen, wie es für ein Makefile üblich ist.

Kommentare

  • Ein Upload-Abschnitt in der make-Datei würde Es ist auch nützlich, die kompilierte Skizze auf das Arduino hochzuladen (mit avr-dude).
  • Das wäre definitiv nützlich. Da die IDE jedoch bisher meine Anforderungen zum Kompilieren und Hochladen erfüllt hat, bin ich nicht stark motiviert, herauszufinden, wie dies zu tun ist. 🙂
  • Schauen Sie sich die metamorphe Antwort an, um eine einfachere Lösung zu finden.

Antwort

Ich verwende die Befehlszeilenschnittstelle für den Befehl arduino .

Ich führe sie wie folgt aus dies:

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

Es gibt eine Seite , auf der andere Befehlszeilentools beschrieben werden, z inotool. Diese Seite enthält auch ein Beispiel Makefile. Diese Alternativen scheinen verlockend zu sein, aber anscheinend funktioniert zum jetzigen Zeitpunkt keine von ihnen. Ich gehe davon aus, dass dies auf einige kürzlich vorgenommene Änderungen in Arduino IDE-Verteilungsdateien zurückzuführen ist, von denen sie abhängen.

Das Ausführen von arduino wie oben ist etwas langsam, da dies der Fall ist muss wohl Java laden, aber es funktioniert zumindest. Es gibt auch einen arduino-builder Befehl, der mit dem geliefert wird Arduino IDE-Verteilung. Zum Zeitpunkt dieses Schreibens war es nicht gut genug dokumentiert, um herauszufinden, wie man es verwendet. Zum Beispiel gibt es in der README-Datei oder in einem der Tutorials, auf die ich gestoßen bin, keine Beispielbefehlszeilen. und ich konnte nicht herausfinden, wie man damit Code auf das Board hochlädt. Vermutlich kann es uns jedoch schneller kompilieren als arduino. In der README-Datei wird auch erwähnt, dass Objektdateien aus einer früheren Kompilierung wiederverwendet werden können, sodass einige Funktionen zum Erstellen vorhanden sind.


Anzeigen der seriellen Ausgabe Ich verwende so etwas wie

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

Die Nummer 1000000 sollte mit der Nummer übereinstimmen, die Sie an Serial.begin() in übergeben Ihren Boardcode. Sie können auch screen verwenden, wenn Sie über ein Board-Programm verfügen, das entsprechend interaktiv ist, oder Sie können ein beliebiges Dienstprogramm verwenden, um direkt auf das Gerät zu schreiben. Mein Due wird übrigens als /dev/ttyACM0 angezeigt (anstelle von /dev/ttyUSB0 für die Uno).

Kommentare

  • Stellen Sie sicher, dass Sie eine einzige *.ino -Datei im Verzeichnis haben, da diese nicht unbedingt die von der --upload -Parameter.
  • Es wurde keine X11 DISPLAY-Variable festgelegt, aber dieses Programm hat eine Operation ausgeführt, die dies erfordert. Für mich

Antwort

Was Sie brauchen, ist ein Makefile. Es gibt einige Makefile-Projekte für Arduino. Wenn Sie nach „Arduino Makefile“ googeln, werden viele Ergebnisse zurückgegeben, einschließlich der Ergebnisse auf Github: https://github.com/sudar/Arduino-Makefile

Das Kompilieren über die Befehlszeile ist aufgrund der Art und Weise, wie die Arduino-IDE mit Bibliotheken umgeht, nicht trivial.

Entspricht der Seriennummer der IDE Der Monitor verbindet wahrscheinlich einen Terminalemulator (z. B. Bildschirm) mit / dev / ttyACM0, oder?

Für den seriellen Monitor würde ich minicom empfehlen. Es ist ein voll funktionsfähiger Terminalemulator (vt102) in der Befehlszeile.

minicom -D /dev/ttyACM0 -b 115200 

… zum Beispiel.

Kommentare

  • Dieses Makefile ist im Wesentlichen eine gepflegte Version der akzeptierten Antwort.Auf GitHub gibt es auch ein Vorlagenprojekt, das Ihnen zeigt, wie Sie es einrichten: github.com/ladislas/Bare-Arduino-Project

Antwort

Offizielles CLI-Tool

Das Arduino-Team entwickelt ein cli client https://github.com/arduino/arduino-cli

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

Damit können Sie fast alles tun, vom Herunterladen von Boards und Bibliotheken bis zum Kompilieren und Hochladen von Skripten. Was fehlt, ist der Überwachungsteil (Sie können die Methode von Metamorphic verwenden, indem Sie stty , es funktioniert!)

Die Befehle sind der Antwort von Metamorphic sehr ähnlich, da dieses Tool verzweigt aus dieser

Anleitung im Github-Repo und der Manpage:

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

Antwort

Wenn Sie eine vollständig kompatible Lösung für Ihr Arduino-Projekt wünschen (ja, Sie können Ihr Projekt mit anderen Benutzern teilen Nur einfache Arduino-IDE) Sie müssen amake überprüfen, ein Tool zur Vereinfachung des Cli des Arduino. Ich verwende es mit Geany, aber andere verwenden es mit vi, Atom usw.

Es ist inspiriert und die jetzt toten Ino- und Arturo-Projekte; Bitte nehmen Sie sich 5 Minuten Zeit, um es zu testen und geben Sie Feedback.

Beispiel:

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] 

Es enthält einen intelligenten Kleber kann sich an die Karte und die Datei erinnern und sogar den USB der Karte automatisch erkennen; Nach einem erfolgreichen Befehl „amake -v“ können Sie dies in der Befehlszeile tun und es wird funktionieren.

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

Wenn Sie einige IDE-Makros verwenden, können Sie dies tun Erstellen Sie die Kompilierungs- und Upload-Befehle einfach, z. B. mit der Geany-IDE:

  • Kompilieren / Überprüfen: cd% d; amake -v uno% f
  • Hochladen: cd% d; amake -u uno% f

Nach der Installation erhalten Sie weitere Hilfe beim Ausführen von „amake“ oder „amake -h“.

Außerdem kann JEDES board / lib / programmer, das Sie in Ihrer Arduino IDE installiert / konfiguriert haben, ja, ein modernes Board wie das Adafuit Trinket M0 / Arduino M0 etc …

Feuern Sie einfach Ihre Arduino IDE ab, gehen Sie zum Board Manager, installieren Sie den Support und das ist alles. Befolgen Sie einfach einige einfache Anweisungen und schon sind Sie fertig.

Das Board Sie haben keine Unterstützung – kein Problem, erkennen Sie die fqbn (lesen Sie die Datei README.md) und geben Sie sie als Boardnamen weiter.

Ich suche Tester, um die Nummer oder das Board zu vergrößern Aliase und automatische Erkennung der richtigen USB-Signaturen.

Denken Sie daran, dass dies ein privat entwickeltes Tool ist, das jetzt für die Öffentlichkeit freigegeben wird. Sie wissen, nur ein Programmierer kratzt daran …

Prost.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.