Arduino

提供: ArchWiki
ナビゲーションに移動 検索に移動

関連記事

Arduino は柔軟で手軽なハードウェアとソフトウェアによる、オープンソースの電子工作プロトタイププラットフォームです。芸術家やデザイナー、ホビイスト、その他インタラクティブな機器や環境を作成したい全ての人を対象としています。

デバイスを接続して設定すれば、シリアル接続で読み書きタスクを実行することができます。例としては、シリアル監視プログラムを使った、UART 経由のインターフェイスや、マイクロコントローラのプログラミングがあります。公式の Arduino IDE (公式リポジトリで利用可能) を使えば、プログラミング、コンパイル、及びコードのアップロードが容易になります。また、任意のコンパイラやプログラマを使って、マイクロコントローラのプログラミングを行うこともできます。

インストール

  • 次うちのどれかをインストールしてください: オリジナルの 1.x バージョン IDE の arduino、公式 CLI の arduino-cli、新しい 2.x IDE の arduino-ide-binAUR。1.x IDE のオフラインドキュメントは arduino-docs でインストールできます。
  • デバイスへのユーザーによるアクセスを有効化してください。
  • cdc_acm モジュールをロードする必要があるかもしれません。

Arduino IDE 1.x

以下のセクションは 1.x バージョンの IDE のみに適用されます。しかし、以下のいくつかは新しい方の IDE でも可能かもしれません。

AVR ボード

Arduino Uno などの AVR 基盤を使用する場合、任意で arduino-avr-core をインストールすることで、バンドルされている古い avr-core の代わりに Arch Linux の上流の avr-gcc を使うことができます。古い arduino-core を使いたい場合 ボードマネージャでインストール する必要があります。Tools > Board メニューからコアをいつでも切り替えられます。

Pinoccio Scout

Pinoccio Scouts も Arduino IDE を使ってプログラムすることが可能です。手順は こちら に記載されています。 もしくは、arduino-pinoccioAUR をインストールすることもできます。

Intel Galileo

Intel Galileo ボードを Arch Linux で使用したい場合、Arduino IDE をインストールし、Tools > Board > Boards Manager から Galileo ツールのパッケージをダウンロードしてください。 インストールを修正するには、こちらの github の投稿に従ってください。

Arduino IDE 1.x 及び 2.x

以下の手順は、両方のバージョンの IDE で有効であるはずです。

AVR ボード

AVR ボードは自動的に 2.x リリースの IDE によってインストールされますが、1.x と 2.x の両方のリリースで AVR ボードはボードマネージャから管理できます。1.x についてはこちらを参照してください。

SparkFun

Pro Micro などの SparkFun ボードを使用するには、ボード定義をダウンロードしておく必要があります。詳細は、こちらこちらを参照。

RedBear Duo

perl-archive-zip をインストールしないと、crc32 が無いというエラーが発生するかもしれません。

設定

USB 経由での接続には、Arduino 上のインターフェイスチップが使用されます。純正のボードでは ATmegaxU2 が使用されていることが多いです (これは ACM デバイスとして認識されます)。Linux 上では、cdc_acm モジュールが使用されます。なので、Arduino が接続されると、Linux では /dev/ttyACMx でアクセスできます。

非純正の Arduino ボードでは安いインターフェイスチップが使用されていることが多く、たいてい中国製の CH34x ファミリが使用されます。CH34x は上述の標準規格を実装しておらず、デバイス自体を USB 経由でプロプライエタリな UART として公開します。この場合、ch341 モジュールが使用され、Linux 上では /dev/ttyUSBx でアクセスできます。デバイスファイルの命名規則は udev ルールにより変更できます。

ノート: コードのアップロード時には、プログラマ用にシリアルポートを開放するために、全てのシリアル監視プログラムを閉じてください。

シリアル通信

USB 経由で UART を公開するボードの場合は、シリアルポートへの読み書きアクセス権をユーザに与える必要があります [1]Udev#通常ユーザーにデバイスの使用を許可する 章で説明されているように、以下のファイルを作成してください:

/etc/udev/rules.d/01-ttyusb.rules
SUBSYSTEMS=="usb-serial", TAG+="uaccess"

Udev ルールを再読み込みし、Arduino デバイスを再度接続してください。Arduino 上にコードをアップロードする前に、Tools メニュー (バージョン 1.x) か IDE 上部の Select board オプション (バージョン 2.x) から適切なシリアルポート、ボード、プロセッサが設定されていることを確認してください。

stty

準備:

# stty -F /dev/ttyACM0 cs8 9600 ignbrk -brkint -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts

先のコマンドの後、Terminal から改行なしのコマンドを送信できます:

# echo -n "Hello World" > /dev/ttyACM0
ノート: ほとんどのボードでシリアル接続の自動リセットがデフォルトで有効化されているため、ターミナルエミュレータ (arduino IDE、screen、picocom...) を使わずにボードと直接通信する場合はこの機能を無効化しておく必要があります。Leonardo ボードは自動リセットしないため、このことを心配する必要はありません。Uno ボードの場合は、RESET ピンと GND ピンを 10 µF のコンデンサで繋げてください。その他のボードの場合は、RESET ピンと 5V ピンを 120 オームの抵抗で繋げてください。詳細は https://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection を参照してください。

Arduino からデータを受信するには:

$ cat /dev/ttyACM0

Arduino-Builder

この記事またはセクションは情報が古くなっています。
理由: このセクションは、2.x バージョンの IDE がリリースされる前に書かれたものであり、機能の説明が正確でないかもしれません。Arduino-Builder の GitHub のページには、Arduino-Builder は廃止予定で Arduino CLI に移行すると冒頭に書かれてあります。 (Discuss)

arduino-builder コマンドラインツールを使って Arduino のスケッチをビルドすることもできます。上流の avr-gccavrdudearduino-avr-core を使用するには設定ファイルの作成が必要です:

build.options.json
{
    "fqbn": "archlinux-arduino:avr:uno",
    "hardwareFolders": "/usr/share/arduino/hardware",
    "toolsFolders": "/usr/bin"
}

スケッチをコンパイルするには:

$ arduino-builder -build-options-file build.options.json blink.ino

あるいはコマンドラインでオプションを渡す場合:

$ arduino-builder -fqbn archlinux-arduino:avr:uno -hardware /usr/share/arduino/hardware -tools /usr/bin blink.ino

他の IDE

ArduIDE

ArduIDE は Arduino 用の Qt ベースの IDE です。arduide-gitAUR[リンク切れ: package not found] でインストールできます。

Arduino-CMake

Arduino-CMake-ToolchainCMake を使うことで、複数のビルド環境でコマンドラインから Arduino のファームウェアをビルドすることができます。CMake があなたのニーズに合わせたビルド環境を生成し、お好きなツールを使用できます。シンプルな Makefile から Eclipse、Visual Studio、XCode などのプロジェクトまであらゆるビルド環境を準備可能です。

必要なパッケージ: cmakearduinoavr-gccavr-binutilsavr-libcavrdude.

Makefile

Arduino IDE を使わずに、他のエディタと Makefile を使うこともできます。

Arduino をプログラムするためのディレクトリをセットアップし、そのディレクトリへ Makefile をコピーしてください。Makefile のコピーは GitHub にあるこのテンプレートを使うことができます。設定にあわせて多少修正が必要です。Makefile には豊富に説明が付いています。以下は編集が必要な行の一例です:

PORT = 通常は /dev/ttyUSBx、x は Arduino が接続されている USB シリアルポート
TARGET = スケッチの名前
ARDUINO = /usr/share/arduino/lib/targets/arduino

スケッチから呼び出されるライブラリ関数に合わせて、ライブラリをコンパイルする必要があります。そのために、SRC と CXXSRC を編集して必要なライブラリを include する必要があります。

これで、make && make upload を実行して、ボードにコードをアップロードして、スケッチを実行できるようになります。

Arduino-mk

arduino-mkAUR は Makefile を使用するもうひとつのアプローチです。Arduino.mk を include するローカルな Makefile を作成することができます。使い方は プロジェクトページ を見てください。

Arduino 1.5 の場合、以下のローカル Makefile を試してください (Arduino 1.5 のライブラリディレクトリの構造は少し変わっています):

ARDUINO_DIR = /usr/share/arduino
ARDMK_DIR = /usr/share/arduino
AVR_TOOLS_DIR = /usr
AVRDUDE_CONF = /etc/avrdude.conf
ARDUINO_CORE_PATH = /usr/share/arduino/hardware/archlinux-arduino/avr/cores/arduino
ARDUINO_PLATFORM_LIB_PATH = /usr/share/arduino/hardware/archlinux-arduino/avr/libraries
BOARDS_TXT = /usr/share/arduino/hardware/archlinux-arduino/avr/boards.txt
ARDUINO_VAR_PATH = /usr/share/arduino/hardware/archlinux-arduino/avr/variants
BOOTLOADER_PARENT = /usr/share/arduino/hardware/archlinux-arduino/avr/bootloaders


BOARD_TAG    = uno
ARDUINO_LIBS =

include /usr/share/arduino/Arduino.mk

場合によっては avr-libcavrdude のインストールが必要です。

Scons

Sconsarscons を組み合わせて使うことでコマンドラインから簡単に Arduino プロジェクトをコンパイル・アップロードすることができます。Scons は python で作成されており、シリアルインターフェイスを使うのに python-pyserial が必要です。python-pyserialscons をインストールしてください。

パッケージをインストールすると必要な依存パッケージも一緒にインストールされます。上記のように Arduino 本体も必要なのでインストールしてください。プロジェクトディレクトリを作成したら (例: test)、新しいディレクトリに arduino のプロジェクトファイルを作成します。ディレクトリと同じ名前を付けて拡張子に .ino を追加してください (例: test.ino)。Arscons から SConstruct スクリプトを取得してディレクトリに配置します。スクリプトの中身を確認して、必要であれば編集してください。中身は python スクリプトです。プロジェクトを編集したら、以下を実行してください:

$ scons                # プロジェクトをビルドする
$ scons upload         # プロジェクトを Arduino へアップロードする

PlatformIO

PlatformIO は複数のハードウェアプラットフォームのスケッチをビルド・アップロードすることができる python ツールです。現在、Arduino/AVR ベースの基盤、TI MSP430 や TI TM4C12x ボードに対応しています。近い将来、ライブラリ機能も追加して GitHub から直接ライブラリを検索できるようにすることを開発者は予定しています。

インストール

platformio-core または platformio-gitAUR パッケージをインストールしてください。

使用方法

以下は、プロジェクトを作成しアップロードする方法を説明している公式の PlatformIO クイックスタートガイドを元にしています。

Platformio プロジェクト用の新しいディレクトリを作成し、そのディレクトリへ cd してください。 そして、以下のコマンドを実行し、プロジェクトを特定のボード用 (ここでは megaatmega2560) に初期化してください:

$ pio project init --board megaatmega2560

これで、ツールチェインと依存パッケージがダウンロードされます。次に、platformio.ini を作成してください:

platformio.ini
; PlatformIO Project Configuration File
[env:megaatmega2560]
platform = atmelavr
board = megaatmega2560
framework = arduino

src/ フォルダ内に main.cpp を作成し、コードを追加してください。コード例はクイックスタートガイドにあります。

そして、コードをコンパイルし、platformio.ini で指定したデバイスへアップロードしてください:

$ pio run
$ pio run --target upload

Emacs

Emacs を IDE として設定することができます。

emacs-arduino-mode-gitAUR パッケージをインストールして emacs で arduino-mode を有効にしてください。

以下の init スクリプトを追加してください:

~/.emacs
;; arduino-mode
(require 'cl)
(autoload 'arduino-mode "arduino-mode" "Arduino editing mode." t)
(add-to-list 'auto-mode-alist '("\.ino$" . arduino-mode))

Arduino-mk (上を参照) と M-x compile make upload を使うことでスケッチをコンパイル・アップロードできます。

このページを参照。

トラブルシューティング

Arduino デバイスの永続的な命名

複数の Arduino を使っている場合、接続した順番で /dev/ttyUSB[0-9] という名前がつけられているのに気づくかもしれません。IDE では大した問題ではありませんが、バックグラウンドで arduino プロジェクトと通信するようなソフトウェアをプログラムする場合、この仕様は問題となります。以下の udev ルールを使うことで、Arduino デバイスへ固定のシンボリックリンクを割り当てることができます:

/etc/udev/rules.d/52-arduino.rules
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="sensors/ftdi_%s{serial}"

これで、Arduino に /dev/sensors/ftdi_A700dzaF のような名前でアクセスできるようになります。もっと意味のある名前をデバイスにつけたい場合は:

/etc/udev/rules.d/52-arduino.rules
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A700dzaF", SYMLINK+="arduino/nano"

上記で指定したシリアル番号のデバイスのシンボリックリンクが /dev/arduino/nano に作成されます。 Udev ルールの変更を適用するには、Arduino を接続しなおすか、以下のコマンドを実行する必要があります:

# udevadm trigger

一般的な idVendor/idProduct ペアは、ディストリビューションパッケージの /usr/share/arduino/hardware/archlinux-arduino/avr/boards.txt で調べることができます。ただし、一部のペアは Arduino プラットフォームに固有のものではないことに注意してください (特に FTDI)。デバイスを識別する良い方法は serial 属性を使うことです。

Error opening serial port

IDE を起動したときシリアルポートが確認できても、アップロード時に TX/RX の LED が点灯しないことがあります。シリアルモニターで変更したボーレートが間違っている可能性があります。~/.arduino/preferences.txt を編集して serial.debug_rate を 115200 などの別の値にしてください。

Uno/Mega2560 を使用する

Arduino Uno と Mega2560 にはオンボード USB インターフェイス (Atmel 8U2) が存在しシリアルデータを受け取ります。そのため、デバイスを接続したときに cdc-acm カーネルモジュールによって作成される /dev/ttyACM0 からアクセスすることが可能です。

シリアル接続をするには 8U2 ファームウェアのアップデートが必要な場合があります。詳しくは [2] の #11 を確認してください。現在書き込むことができない Arduino の掲示板では、Uno を DFU にする方法が書かれている画像を見つけることができます。アカウントがなくて画像を閲覧できない場合、[3] を見てください。

Uno をループバックモードにして 115200 ボーで Arduino のシリアルモニターに文字列を打ち込むことで機能のテストができます。文字列が返ってくるはずです。ループバックにするには、デジタル側でピン 0 -> 1 をショートさせてリセットボタンを押すか、入力する際に GND -> RESET ピンをショートさせてください。

安い中国製クローンの Mega2560 で USB ポートが認識されない

i2c-ch341-dkmsAUR ドライバをインストールしてみてください。

ウィンドウマネージャで 1.x アプリケーションがリサイズできない、メニューがすぐに閉じてしまう

Java#灰色のウィンドウ、ウィンドウマネージャでアプリがリサイズされない、メニューがすぐに閉じる を見てください。

Fails to upload: programmer is not responding

プロセッサの設定 (Arduino IDE の Tools->Processor) を ATmega328P から ATmega328P (Old Bootloader) に変更すると、アップロードの問題が解決することがあります。

インストール直後の状態で 1.x が java.lang.NullPointerException でクラッシュする

arduino-avr-core をインストールする必要があります。

シリアルポートが brltty と衝突する

Arduino 用のシリアルポートが /dev/ttyUSB* に無く、デバイス接続時に journal に以下のようなログが出力される場合:

usb 3-1: usbfs: interface 0 claimed by ch341 while 'brltty' sets config #1
ch341-uart ttyUSB0: ch341-uart converter now disconnected from ttyUSB0

brltty をアンインストールする必要があるかもしれません。詳細は [4] を見てください。

Nano RP2040 Connect でアップロードに失敗する

アップロードが以下のエラーで失敗する場合:

Failed uploading: uploading error: exit status 1

以下のスクリプトを実行して、Raspberry Pi RP2040 ブートローダーモードの udev ルールをセットアップしてみてください:

# ~/.arduino15/packages/arduino/hardware/mbed_nano/3.5.1/post_install.sh

参照

翻訳ステータス: このページは en:Arduino の翻訳バージョンです。最後の翻訳日は 2023-12-13 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。