Jak kompilować, przesyłać i monitorować za pomocą wiersza poleceń systemu Linux?

Łączenie Arduino Uno (przesyłanie itp.) z Arduino IDE (przy użyciu pakietu Fedora) działa dobrze pod Fedorą 21.

Ale wolę używać vim + make + vim-quickfix-mode itp.

Jak mogę to zrobić?

Najlepiej za pomocą narzędzi dostępnych w repozytoriach Fedory.

Zakładam, że IDE wywołuje zewnętrzne narzędzia wiersza poleceń w celu załadowania itp.

Odpowiednikiem monitora szeregowego IDE jest prawdopodobnie podłączenie emulatora terminala (np. screen) do /dev/ttyACM0, prawda?

Może jest jakiś dobry przykładowy projekt, który można obejrzeć w pliku makefile?

Odpowiedź

Sugerowałbym szukanie w Google projektów Makefile. Zrobiłem jeden jakiś czas temu w programie Blink, po prostu sprawdzając, co zostało wygenerowane przez IDE i replikując w bardziej ogólny sposób.

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

Musiałbyś przynajmniej zmienić ARDUINO_DIR, lect, gdzie zainstalowałeś IDE. Jeśli używasz innych rzeczy, takich jak biblioteka Wire, musisz ją nieco rozszerzyć, aby skompilować dodatkowe biblioteki. Ponownie możesz użyć tego, co generuje samo IDE, aby wskazać zmiany.

Linie z początkowymi spacjami powyżej wymagałyby zakładki zamiast spacji, co jest normalne w przypadku pliku Makefile.

Komentarze

  • Sekcja przesyłania w pliku make przydałoby się również, aby przesłać skompilowany szkic do arduino (używając avr-dude).
  • To z pewnością byłoby przydatne. Ponieważ jednak do tej pory IDE spełniało moje potrzeby w zakresie kompilowania i przesyłania, nie mam silnej motywacji, aby zastanawiać się, jak to zrobić. 🙂
  • Zapoznaj się z odpowiedzią metamorficzną, aby uzyskać łatwiejsze rozwiązanie.

Odpowiedź

Używam interfejsu wiersza poleceń do polecenia arduino .

Uruchamiam to tak, jak to:

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

Jest strona , na której opisano inne narzędzia wiersza poleceń, takie jak inotool. Ta strona zawiera również przykład Makefile. Te alternatywy wydają się kuszące, ale najwyraźniej w chwili pisania tego tekstu żadna z nich nie działa. Zakładam, że jest to spowodowane niedawnymi zmianami w plikach dystrybucyjnych Arduino IDE, od których zależą.

Uruchomienie arduino jak powyżej jest nieco powolne, ponieważ chyba musi załadować Javę, ale przynajmniej działa. Jest też polecenie arduino-builder , które jest dostarczane z Dystrybucja Arduino IDE. W chwili pisania tego tekstu nie była wystarczająco dobrze udokumentowana, abym mógł dowiedzieć się, jak z niej korzystać. Na przykład nie ma przykładowych wierszy poleceń w pliku README ani w żadnym z samouczków, które napotkałem, i nie mogłem wymyślić, jak go użyć do przesłania kodu na forum. Jednak przypuszczalnie jest w stanie zapewnić nam szybszą kompilację niż arduino. README wspomina również o możliwości ponownego wykorzystania plików obiektowych z poprzedniej kompilacji, więc istnieje pewna funkcjonalność podobna do make.


Aby wyświetlić wyjście szeregowe Używam czegoś takiego jak

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

Liczba 1000000 powinna odpowiadać liczbie, którą przekazujesz do Serial.begin() w Twój kod tablicy. Możesz także użyć screen, jeśli masz program tablicy, który jest odpowiednio interaktywny, lub możesz użyć dowolnego narzędzia do pisania bezpośrednio na urządzeniu. Nawiasem mówiąc, moja należna jest wyświetlana jako /dev/ttyACM0 (zamiast /dev/ttyUSB0 dla Uno).

Komentarze

  • Upewnij się, że w katalogu znajduje się pojedynczy plik *.ino, ponieważ nie wydaje się, aby przesyłał plik wymieniony przez --upload.
  • Nie ustawiono zmiennej X11 DISPLAY, ale ten program wykonał operację, która tego wymaga. Dla mnie

Odpowiedź

Potrzebujesz pliku Makefile. Istnieje kilka projektów Makefile dla Arduino. Wyszukiwanie w Google „Arduino Makefile” zwraca wiele wyników, w tym ten, który wygląda na dobry na Github: https://github.com/sudar/Arduino-Makefile

Kompilowanie z wiersza poleceń nie jest trywialne ze względu na sposób, w jaki Arduino IDE obsługuje biblioteki.

Odpowiednik interfejsu szeregowego IDE monitor prawdopodobnie podłącza emulator terminala (np. screen) do / dev / ttyACM0, prawda?

Do monitora szeregowego poleciłbym minicom. Jest to w pełni funkcjonalny emulator terminala (vt102) z linii poleceń.

minicom -D /dev/ttyACM0 -b 115200 

… na przykład.

Komentarze

  • Ten plik Makefile jest zasadniczo utrzymywaną wersją zaakceptowanej odpowiedzi.W serwisie GitHub znajduje się również projekt szablonu, który pokazuje, jak go skonfigurować: github.com/ladislas/Bare-Arduino-Project

Odpowiedź

Oficjalne narzędzie CLI

Zespół arduino opracowuje cli klient https://github.com/arduino/arduino-cli

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

Możesz z tym zrobić prawie wszystko, od pobierania tablic i bibliotek po kompilację i wysyłanie skryptów. Brakuje części monitorującej (możesz użyć metody Metamorphic „, używając stty cat, Działa!)

Polecenia są bardzo podobne do odpowiedzi Metamorphic” , ponieważ to narzędzie się rozgałęzia z tego

Instrukcje w repozytorium Github i na stronie podręcznika:

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

Odpowiedź

Jeśli potrzebujesz w pełni kompatybilnego rozwiązania dla swojego projektu arduino (tak, możesz udostępnić swój projekt innym osobom, które używają po prostu zwykłe Arduino IDE) musisz sprawdzić amake narzędzie do uproszczenia cli arduino, używam go z Geany, ale inni używają go z vi, Atom itp.

To inspirowane i martwe już projekty Ino i Arturo; poświęć 5 minut na przetestowanie i prześlij opinię.

Przykładowe użycie:

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] 

Zawiera sprytny klej, może zapamiętać kartę i plik, a nawet automatycznie wykryć USB płyty; więc po pomyślnym wykonaniu polecenia „amake -v” możesz to zrobić w wierszu poleceń i zadziała.

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

Jeśli używasz makr IDE, możesz łatwo twórz polecenia kompilacji i przesyłania, na przykład za pomocą środowiska Geany IDE stanie się to:

  • Kompiluj / weryfikuj: cd% d; amake -v uno% f
  • Prześlij: cd% d; amake -u uno% f

Więcej pomocy możesz uzyskać, uruchamiając po prostu „amake” lub „amake -h” po zainstalowaniu.

Obsługuje także KAŻDA płyta / lib / programator, którą zainstalowałeś / skonfigurowałeś w swoim Arduino IDE, tak, nowoczesna płyta, taka jak Adafuit Trinket M0 / Arduino M0 itd …

Po prostu uruchom Arduino IDE, przejdź do menedżera płyty, zainstaluj wsparcie i to wszystko, wykonaj kilka prostych instrukcji i gotowe.

Płyta masz nie jest obsługiwany? nie ma problemu, wykryj fqbn (przeczytaj plik README.md) i przekaż go jako nazwę tablicy.

Szukam testerów, aby podnieść numer lub tablicę aliasy i automatyczne wykrywanie odpowiednich podpisów USB.

Pamiętaj, że jest to prywatne narzędzie, teraz udostępniane publicznie, wiesz, po prostu programista drapiący się …

Pozdrawiam.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *