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


18

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

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

どうやってやるの?

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

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

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

おそらく、メイクファイルを見ることができる良いプロジェクト例がありますか?

回答:


7

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

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

Makefileの通常のように、先頭にスペースがある行には、スペースの代わりにタブ文字が必要です。


2
コンパイル済みのスケッチを(avr-dudeを使用して)arduinoにアップロードするには、メイクファイルのアップロードセクションも役立ちます。
ゲルベン

それは間違いなく便利でしょう。ただし、これまでのところ、IDEはコンパイルとアップロードのニーズを満たしているため、その方法を考え出す意欲はあまりありません。:)
ニックギャモン

簡単な解決策
ヴィクターラモイン

20

私が使用するコマンドラインインターフェイスをarduinoコマンド

私はこれを次のように実行します:

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

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

arduino上記のように実行すると、Javaをロードする必要があるため、少し遅くなりますが、少なくとも動作します。arduino-builderArduino IDEディストリビューションに付属するコマンドもあります。この記事の執筆時点では、使用方法を理解できるほど十分に文書化されていませんでした。たとえば、READMEや私が出会ったチュートリアルにはコマンドラインの例がなく、ボードにコードをアップロードする方法を理解できませんでした。ただし、おそらく、それよりも高速なコンパイルが可能arduinoです。READMEには、以前のコンパイルのオブジェクトファイルを再利用できることも記載されているため、makeのような機能がいくつかあります。


シリアル出力を表示するには、次のようなものを使用します

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

番号1000000はSerial.begin()、ボードコードで渡す番号と一致する必要があります。screen適切にインタラクティブなボードプログラムがある場合にも使用できます。または、任意のユーティリティを使用してデバイスに直接書き込むこともできます。ちなみに、私のDueは/dev/ttyACM0/dev/ttyUSB0Uno ではなく)と表示されます。


1
*.inoディレクトリに単一のファイルがあることを確認して--uploadください。パラメータで指定されたファイルを必ずしもアップロードするとは限りません。
クリスStryczynski

5

必要なのは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

... 例えば。


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

2

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

それはインスピレーションを受けており、現在は亡くなっているイノとアルトゥーロのプロジェクトです。テストに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」を実行するだけでさらにヘルプが得られます。

また、サポートすることができますEVERY Adafuit小物M0 / ArduinoのM0などのようなあなたのArduino IDE、はい、現代のボードで構成され、インストールされているボード/ libに/プログラマ/ ...

Arduino IDEを起動し、ボードマネージャーにアクセスして、サポートをインストールするだけです。簡単な指示に従ってください。

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

テスターを探して、番号またはボードエイリアスを増やし、適切なUSB署名を自動検出します。

これはプライベートに成長したツールであり、今では一般の人々と共有されていることを忘れないでください。

乾杯。


2

公式CLIツール

arduinoチームは、cliクライアント https://github.com/arduino/arduino-cliを開発しています

お知らせhttps : //blog.arduino.cc/2018/08/24/announcing-the-arduino-command-line-interface-cli/

ボードとライブラリのダウンロードから、スクリプトのコンパイルとアップロードまで、ほぼすべてのことを実行できます。不足しているのは監視部分です(Metamorphicのメソッドを使用できますstty cat、それは動作します!)

このツールはそのツールから分岐しているため、コマンドはMetamorphicの答えに非常に似ています

Githubリポジトリとマニュアルページの手順:

    $ 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.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.