Linux 명령 줄을 통해 컴파일, 업로드 및 모니터링하는 방법은 무엇입니까?

Arduino Uno (업로드 등)와 Arduino IDE (Fedora 패키지 사용)의 인터페이스는 Fedora 21에서 잘 작동합니다.

하지만 저는 vim + make + vim-quickfix-mode 등을 사용하고 싶습니다.

어떻게 할 수 있습니까?

가급적이면 Fedora 저장소에서 사용할 수있는 도구를 사용합니다.

IDE가 업로드 등을 위해 외부 명령 줄 유틸리티를 호출한다고 가정합니다.

IDE의 직렬 모니터에 해당하는 것은 아마도 터미널 에뮬레이터 (예 : screen) to /dev/ttyACM0, 맞죠?

메이크 파일을 볼 수있는 좋은 예제 프로젝트가 있습니까?

Answer

Makefile 프로젝트를위한 인터넷 검색을 제안합니다. Blink 프로그램을 위해 기본적으로 IDE에서 생성 된 내용을보고 복제하여 좀 더 일반적인 방법으로.

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

최소한 ARDUINO_DIR를 변경해야합니다. IDE를 설치 한 위치를 선택하십시오. Wire 라이브러리와 같은 다른 것을 사용하는 경우 추가 라이브러리를 컴파일하기 위해 다소 확장해야합니다. 다시 말하지만 IDE에서 자체적으로 생성 한 내용을 사용하여 변경 사항을 안내 할 수 있습니다.

위의 선행 공백이있는 줄에는 탭 문자 (Makefile의 경우 일반적)

댓글

  • 메이크 파일의 업로드 섹션은 또한 컴파일 된 스케치를 arduino에 업로드하는 데 유용합니다 (avr-dude 사용).
  • 그건 확실히 유용 할 것입니다. 그러나 지금까지 IDE가 컴파일 및 업로드에 대한 나의 요구를 충족 시켰기 때문에이를 수행하는 방법을 연구 할 동기가 강하지 않습니다. 🙂
  • 더 쉬운 솔루션을위한 Metamorphic 답변 살펴보기

Answer

명령 줄 인터페이스를 arduino 명령 에 사용합니다.

다음과 같이 실행합니다. 이 :

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

다음과 같은 다른 명령 줄 도구를 설명하는 페이지 가 있습니다. inotool. 이 페이지에는 Makefile 예제도 있습니다. 이러한 대안은 매력적으로 보이지만이 글을 쓰는 시점에서는 어느 것도 작동하지 않습니다. 나는 이것이 그들이 의존하는 Arduino IDE 배포 파일의 최근 변경 때문이라고 가정합니다.

위와 같이 arduino를 실행하는 것은 약간 느립니다. Java를로드해야하지만 적어도 작동합니다. 또한 arduino-builder 명령이 있습니다. Arduino IDE 배포.이 글을 쓰는 시점에서 사용 방법을 파악할 수있을만큼 충분히 문서화되어 있지 않았습니다. 예를 들어 README 나 내가 본 튜토리얼에는 예제 명령 줄이 없습니다. 코드를 보드에 업로드하는 방법을 알 수 없었습니다. 그러나 아마도 arduino보다 더 빠른 컴파일을 제공 할 수 있습니다. README는 또한 이전 컴파일의 개체 파일을 재사용 할 수 있다고 언급하므로 make와 유사한 기능이 있습니다.


직렬 출력을 보려면 나는 다음과 같은 것을 사용한다.

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

숫자 1000000은 Serial.begin()에 전달하는 숫자와 일치해야합니다. 당신의 보드 코드. 적절하게 상호 작용하는 보드 프로그램이있는 경우 screen를 사용하거나 어떤 유틸리티를 사용하여 장치에 직접 쓸 수 있습니다. 그런데 내 Due는 Uno의 경우 /dev/ttyUSB0가 아니라 /dev/ttyACM0로 표시됩니다.

댓글

  • 디렉토리에 단일 *.ino 파일이 있는지 확인하십시오. --upload 매개 변수.
  • X11 DISPLAY 변수가 설정되지 않았지만이 프로그램에서 필요한 작업을 수행했습니다. 저에게

답변

필요한 것은 Makefile입니다. Arduino를위한 몇 가지 Makefile 프로젝트가 있습니다. “Arduino Makefile”을 검색하면 Github에서 좋은 결과를 포함하여 많은 결과가 반환됩니다. https://github.com/sudar/Arduino-Makefile

Arduino IDE가 라이브러리를 처리하는 방식으로 인해 명령 줄에서 컴파일하는 것은 간단하지 않습니다.

IDE의 시리얼에 해당합니다. 모니터가 터미널 에뮬레이터 (예 : 화면)를 / dev / ttyACM0에 연결하고있는 것 같습니다.

직렬 모니터의 경우 minicom을 권장합니다. 명령 줄에서 완벽하게 작동하는 터미널 에뮬레이터 (vt102)입니다.

minicom -D /dev/ttyACM0 -b 115200 

… 예 :

댓글 h3>

  • 이 Makefile은 기본적으로 허용되는 답변의 유지 관리 버전입니다.GitHub에는 설정 방법을 보여주는 템플릿 프로젝트도 있습니다. github.com/ladislas/Bare-Arduino-Project

Answer

공식 CLI 도구

Arduino 팀은 cli 클라이언트 https://github.com/arduino/arduino-cli

공지 사항 : https://blog.arduino.cc/2018/08/24/announcing-the-arduino-command-line-interface-cli/

보드 및 라이브러리 다운로드에서 스크립트 컴파일 및 업로드에 이르기까지 거의 모든 작업을 수행 할 수 있습니다. 누락 된 것은 모니터링 부분입니다 (stty iv id = “를 사용하여 변형”의 방법 을 사용할 수 있음) 577ef8c30e “>

, 작동합니다!)

명령은 Metamorphic의 대답 과 매우 유사합니다. 그중

Github 저장소 및 man 페이지의 지침 :

 $ 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

Arduino 프로젝트에 완벽하게 호환되는 솔루션을 원한다면 (예, 다음을 사용하는 다른 사람들과 프로젝트를 공유 할 수 있습니다. 일반 Arduino IDE) arduino의 cli를 단순화하는 도구 인 amake 를 확인해야합니다. 저는 Geany와 함께 사용하지만 다른 사람들은 vi, Atom과 함께 사용하고 있습니다. , etc.

그것은 영감을 얻었고 지금은 죽은 Ino와 Arturo 프로젝트입니다. 5 분 정도 시간을내어 테스트하고 의견을 보내 주시기 바랍니다.

사용 예 :

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] 

그 안에 스마트 접착제가 있습니다. 보드와 파일을 기억하고 보드의 USB를 자동 감지 할 수도 있습니다. 따라서 성공적인 “amake -v”명령 후 명령 줄에서이 작업을 수행 할 수 있으며 작동합니다.

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

일부 IDE 매크로를 사용하는 경우 컴파일 및 업로드 명령을 쉽게 만들 수 있습니다. 예를 들어 Geany IDE를 사용하면 다음과 같이됩니다.

  • 컴파일 / 확인 : cd % d; amake -v uno % f
  • 업로드 : cd % d; amake -u uno % f

설치 후 “amake”또는 “amake -h”를 실행하면 더 많은 도움을받을 수 있습니다.

또한

모든 Arduino IDE에 설치 / 구성한 모든 보드 / lib / 프로그래머, 예, Adafuit Trinket M0 / Arduino M0과 같은 최신 보드 etc …

Arduino IDE를 실행하고 보드 관리자로 이동하여 지원을 설치하기 만하면됩니다. 간단한 지침을 따르고 설정이 완료됩니다.

보드 지원되지 않습니까? 문제가 아닙니다. fqbn을 감지하고 (README.md 파일을 읽음) 보드 이름으로 전달합니다.

나는 숫자 나 보드를 늘릴 테스터를 찾고 있습니다. 별칭 및 적절한 USB 서명의 자동 감지.

이 도구는 이제 대중과 공유되는 개인 확장 도구입니다. 프로그래머가 “가려운 부분을 긁어 모으기 만하면 …

건배.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다