Łą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
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.
*.ino
, ponieważ nie wydaje się, aby przesyłał plik wymieniony przez--upload
.