Arduino
関連記事
Arduino は柔軟で手軽なハードウェアとソフトウェアによる、オープンソースの電子工作プロトタイププラットフォームです。芸術家やデザイナー、ホビイスト、その他インタラクティブな機器や環境を作成したい全ての人を対象としています。
デバイスを接続して設定すれば、シリアル接続で読み書きタスクを実行することができます。例としては、シリアル監視プログラムを使った、UART 経由のインターフェイスや、マイクロコントローラのプログラミングがあります。公式の Arduino IDE (公式リポジトリで利用可能) を使えば、プログラミング、コンパイル、及びコードのアップロードが容易になります。また、任意のコンパイラやプログラマを使って、マイクロコントローラのプログラミングを行うこともできます。
インストール
- 公式の CLI である arduino-cli か、IDE の新しい 2.x リリースである arduino-ide のどちらかをインストールしてください。
- デバイスへのユーザーによるアクセスを有効化してください。
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[リンク切れ 2024-01-13] も Arduino IDE を使ってプログラムすることが可能です。手順はこちら[リンク切れ 2024-01-13]に記載されています。 もしくは、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 ボードはボードマネージャから管理できます。
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 からデータを受信するには:
$ cat /dev/ttyACM0
Arduino-Builder
arduino-builder コマンドラインツールを使って Arduino のスケッチをビルドすることもできます。上流の avr-gcc と avrdude で arduino-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
Arduino-CMake
Arduino-CMake-Toolchain と CMake を使うことで、複数のビルド環境でコマンドラインから Arduino のファームウェアをビルドすることができます。CMake があなたのニーズに合わせたビルド環境を生成し、お好きなツールを使用できます。シンプルな Makefile から Eclipse、Visual Studio、XCode などのプロジェクトまであらゆるビルド環境を準備可能です。
必要なパッケージ: cmake、arduino、avr-gcc、avr-binutils、avr-libc、avrdude。
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-mk は 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-libc と avrdude のインストールが必要です。
Scons
Scons と arscons を組み合わせて使うことでコマンドラインから簡単に Arduino プロジェクトをコンパイル・アップロードすることができます。Scons は python で作成されており、シリアルインターフェイスを使うのに python-pyserial が必要です。python-pyserial と scons をインストールしてください。
パッケージをインストールすると必要な依存パッケージも一緒にインストールされます。上記のように 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 ドライバをインストールしてみてください。
Fails to upload: programmer is not responding
プロセッサの設定 (Arduino IDE の Tools->Processor) を ATmega328P
から ATmega328P (Old Bootloader)
に変更すると、アップロードの問題が解決することがあります。
シリアルポートが 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