Linuxコマンドラインを介してコンパイル、アップロード、監視する方法は?

Arduino Uno(アップロードなど)とArduino IDE(Fedoraパッケージを使用)のインターフェイスは、Fedora21で正常に機能します。

しかし、私はむしろvim + make + vim-quickfix-modeなどを使用したいと思います。

どうすればよいですか?

できれば、Fedoraリポジトリから入手できるツールを使用してください。

IDEはアップロードなどのために外部コマンドラインユーティリティを呼び出すと思います。

IDEのシリアルモニターに相当するものは、おそらくターミナルエミュレーターを接続することです(例:screen)から/dev/ttyACM0、そうですか?

makefileを見ることができる良いサンプルプロジェクトがあるかもしれませんか?

回答

Makefileプロジェクトのグーグルをお勧めします。基本的にIDEによって生成されたものを確認して複製することにより、Blinkプログラムのためにしばらく前に行いました。より一般的な方法で。

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

少なくとも、refにARDUINO_DIRを変更する必要があります。 IDEをインストールした場所を選択します。 Wireライブラリのような他のものを使用する場合は、追加のライブラリをコンパイルするために、それをいくらか拡張する必要があります。繰り返しになりますが、IDEが生成するものを使用して、変更をガイドできます。

上記の先頭にスペースがある行には、 tab Makefileの通常のように、スペースではなく文字。

コメント

  • makeファイルのアップロードセクションはコンパイルされたスケッチをarduinoにアップロードするのにも役立ちます(avr-dudeを使用)。
  • これは間違いなく便利です。ただし、これまでのところ、IDEはコンパイルとアップロードのニーズを満たしているため、その方法を検討する意欲はあまりありません。 🙂
  • より簡単な解決策についてはメタモルフィックの回答をご覧ください

回答

コマンドラインインターフェイスを使用してarduinoコマンドを実行します。

次のように実行します。これ:

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

他のコマンドラインツールを説明するページがあります inotool。このページには、Makefileの例もあります。これらの選択肢は魅力的なように見えますが、この記事の執筆時点では、いずれも機能していないようです。これは、依存しているArduinoIDE配布ファイルの最近の変更によるものだと思います。

上記のように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は/dev/ttyACM0として表示されます(Unoの/dev/ttyUSB0ではありません)。

コメント

  • ディレクトリに*.inoファイルが1つあることを確認してください。これは、 --uploadパラメータ。
  • X11 DISPLAY変数は設定されていませんが、このプログラムはそれを必要とする操作を実行しました。私にとって

回答

必要なのはMakefileです。 Arduino用のMakefileプロジェクトがいくつかあります。 「ArduinoMakefile」をグーグルで検索すると、Githubで適切に見えるものを含む多くの結果が返されます: https://github.com/sudar/Arduino-Makefile

Arduino IDEがライブラリを処理する方法のため、コマンドラインからのコンパイルは簡単ではありません。

IDEのシリアル版に相当しますモニターはおそらくターミナルエミュレーター(画面など)を/ dev / ttyACM0に接続していますよね?

シリアルモニターには、ミニコムをお勧めします。これは、コマンドラインで完全に機能するターミナルエミュレータ(vt102)です。

minicom -D /dev/ttyACM0 -b 115200 

…たとえば。

コメント

  • このMakefileは、基本的に、受け入れられた回答の維持バージョンです。GitHubには、セットアップ方法を示すテンプレートプロジェクトもあります: github.com/ladislas/Bare-Arduino-Project

回答

公式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 “>

、動作します!)

このツールは分岐しているため、コマンドはメタモルフィックの回答と非常によく似ています。その中から

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. 

回答

arduinoプロジェクトと完全に互換性のあるソリューションが必要な場合(はい、プロジェクトを使用している他の人と共有できます)単なるArduinoIDE)arduinoのCLIを簡素化するツール amake をチェックする必要があります。私はGeanyで使用していますが、他の人はvi、Atomで使用しています。 、など。

インスピレーションを得て、現在は死んでいる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」だけを実行してさらにヘルプを得ることができます。

また、

ArduinoIDEにインストール/構成したすべてのボード/ lib /プログラマー、はい、Adafuit Trinket M0 / ArduinoM0のような最新のボードなど…

Arduino IDEを起動し、ボードマネージャーに移動し、サポートをインストールするだけです。簡単な手順に従うだけで、設定が完了します。

サポートされていませんか?問題ありません。fqbnを検出し(README.mdファイルを読み取り)、ボード名として渡します。

数またはボードを増やすためのテスターを探しています。エイリアスと適切なUSB署名の自動検出。

これはプライベートで作成されたツールであり、現在は一般の人々と共有されていることを忘れないでください。プログラマーがそれをひっかいているだけです…

乾杯。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です