「Arduino」の版間の差分
(→設定: 同期) |
(同期) |
||
(同じ利用者による、間の2版が非表示) | |||
1行目: | 1行目: | ||
[[Category:開発]] |
[[Category:開発]] |
||
[[Category:科学]] |
[[Category:科学]] |
||
+ | [[de:Arduino]] |
||
[[en:Arduino]] |
[[en:Arduino]] |
||
+ | [[zh-hans:Arduino]] |
||
− | Arduino は柔軟で手軽なハードウェアとソフトウェアによる、オープンソースの電子工作プロトタイププラットフォームです。芸術家やデザイナー、ホビイスト、その他インタラクティブな機器や環境を作成したい全ての人を対象としています。詳細は [http://www.arduino.cc/ Arduino HomePage] を見て下さい。 |
||
+ | {{Related articles start}} |
||
+ | {{Related|AVR}} |
||
+ | {{Related articles end}} |
||
+ | [[Wikipedia:ja:Arduino|Arduino]] は柔軟で手軽なハードウェアとソフトウェアによる、オープンソースの電子工作プロトタイププラットフォームです。芸術家やデザイナー、ホビイスト、その他インタラクティブな機器や環境を作成したい全ての人を対象としています。 |
||
+ | |||
+ | デバイスを接続して設定すれば、シリアル接続で読み書きタスクを実行することができます。例としては、[[シリアルコンソール#接続|シリアル監視プログラム]]を使った、UART 経由のインターフェイスや、マイクロコントローラのプログラミングがあります。公式の Arduino IDE (公式リポジトリで利用可能) を使えば、プログラミング、コンパイル、及びコードのアップロードが容易になります。また、任意のコンパイラやプログラマを使って、マイクロコントローラのプログラミングを行うこともできます。 |
||
== インストール == |
== インストール == |
||
− | * |
+ | * 公式の CLI である {{Pkg|arduino-cli}} か、IDE の新しい 2.x リリースである {{Pkg|arduino-ide}} のどちらかをインストールしてください。 |
− | * |
+ | * デバイスへの[[#シリアル通信|ユーザーによるアクセス]]を有効化してください。 |
* {{ic|cdc_acm}} モジュールを[[カーネルモジュール|ロード]]する必要があるかもしれません。 |
* {{ic|cdc_acm}} モジュールを[[カーネルモジュール|ロード]]する必要があるかもしれません。 |
||
16行目: | 23行目: | ||
==== AVR ボード ==== |
==== AVR ボード ==== |
||
− | Arduino Uno などの AVR 基盤を使用する場合、任意で {{Pkg|arduino-avr-core}} をインストールすることで、バンドルされている古い avr-core の代わりに Arch Linux の上流の avr-gcc を使うことができます。古い arduino-core を使いたい場合 [https://docs.arduino.cc/learn/starting-guide/cores ボードマネージャでインストール] する必要があります。 |
+ | Arduino Uno などの AVR 基盤を使用する場合、任意で {{Pkg|arduino-avr-core}} をインストールすることで、バンドルされている古い avr-core の代わりに Arch Linux の上流の avr-gcc を使うことができます。古い arduino-core を使いたい場合 [https://docs.arduino.cc/learn/starting-guide/cores ボードマネージャでインストール] する必要があります。''Tools > Board'' メニューからコアをいつでも切り替えられます。 |
==== Pinoccio Scout ==== |
==== Pinoccio Scout ==== |
||
− | [https://pinocc.io/ Pinoccio Scouts] も Arduino IDE を使ってプログラムすることが可能です。手順は |
+ | [https://pinocc.io/ Pinoccio Scouts]{{Dead link|2024|01|13|status=domain name not resolved}} も Arduino IDE を使ってプログラムすることが可能です。手順は[https://pinocc.io/solo こちら]{{Dead link|2024|01|13|status=domain name not resolved}}に記載されています。 |
+ | もしくは、{{AUR|arduino-pinoccio}} をインストールすることもできます。 |
||
==== Intel Galileo ==== |
==== Intel Galileo ==== |
||
− | Intel Galileo ボードを Arch Linux で使用したい場合、Arduino IDE をインストールし、 |
+ | Intel Galileo ボードを Arch Linux で使用したい場合、Arduino IDE をインストールし、''Tools > Board > Boards Manager'' から Galileo ツールのパッケージをダウンロードしてください。 |
+ | インストールを修正するには、[https://github.com/arduino/Arduino/issues/5523 こちらの github の投稿]に従ってください。 |
||
− | |||
− | ==== Arm7 デバイス ==== |
||
− | |||
− | [http://blog.tklee.org/2014/10/arduino-ide-158-on-banana-pi.html こちら] に対処方法が載っています。 |
||
− | === Arduino IDE 1.x |
+ | === Arduino IDE 1.x 及び 2.x === |
以下の手順は、両方のバージョンの IDE で有効であるはずです。 |
以下の手順は、両方のバージョンの IDE で有効であるはずです。 |
||
36行目: | 41行目: | ||
==== AVR ボード ==== |
==== AVR ボード ==== |
||
− | AVR ボードは自動的に 2.x リリースの IDE によってインストールされますが、1.x と 2.x の両方のリリースで AVR ボードはボードマネージャから管理できます |
+ | AVR ボードは自動的に 2.x リリースの IDE によってインストールされますが、1.x と 2.x の両方のリリースで AVR ボードはボードマネージャから管理できます。 |
==== SparkFun ==== |
==== SparkFun ==== |
||
− | Pro Micro などの SparkFun ボードを使用するには、ボード定義をダウンロードしておく必要があります。詳細は |
+ | Pro Micro などの SparkFun ボードを使用するには、ボード定義をダウンロードしておく必要があります。詳細は、[https://learn.sparkfun.com/tutorials/pro-micro--fio-v3-hookup-guide/installing-mac--linux こちら]と[https://github.com/sparkfun/Arduino_Boards こちら]を参照。 |
==== RedBear Duo ==== |
==== RedBear Duo ==== |
||
47行目: | 52行目: | ||
== 設定 == |
== 設定 == |
||
+ | |||
+ | USB 経由での接続には、Arduino 上のインターフェイスチップが使用されます。純正のボードでは ATmegaxU2 が使用されていることが多いです (これは ACM デバイスとして認識されます)。Linux 上では、{{ic|cdc_acm}} [[カーネルモジュール|モジュール]]が使用されます。なので、Arduino が接続されると、Linux では {{ic|/dev/ttyACMx}} でアクセスできます。 |
||
+ | |||
+ | 非純正の Arduino ボードでは安いインターフェイスチップが使用されていることが多く、たいてい中国製の CH34x ファミリが使用されます。CH34x は上述の標準規格を実装しておらず、デバイス自体を USB 経由でプロプライエタリな UART として公開します。この場合、{{ic|ch341}} [[カーネルモジュール|モジュール]]が使用され、Linux 上では {{ic|/dev/ttyUSBx}} でアクセスできます。デバイスファイルの命名規則は [[#Arduino デバイスの永続的な命名|udev ルールにより変更]]できます。 |
||
+ | |||
+ | {{Note|コードのアップロード時には、プログラマ用にシリアルポートを開放するために、全てのシリアル監視プログラムを閉じてください。}} |
||
=== シリアル通信 === |
=== シリアル通信 === |
||
− | + | USB 経由で UART を公開するボードの場合は、シリアルポートへの読み書きアクセス権をユーザに与える必要があります [https://arduino.stackexchange.com/a/21219]。[[Udev#通常ユーザーにデバイスの使用を許可する]] 章で説明されているように、以下のファイルを作成してください: |
|
+ | |||
+ | {{hc|/etc/udev/rules.d/01-ttyusb.rules|2= |
||
+ | SUBSYSTEMS=="usb-serial", TAG+="uaccess" |
||
+ | }} |
||
− | Arduino にアップロードする前に、 |
+ | [[Udev#新しいルールをロードする|Udev ルールを再読み込み]]し、Arduino デバイスを再度接続してください。Arduino 上にコードをアップロードする前に、Tools メニュー (バージョン 1.x) か IDE 上部の Select board オプション (バージョン 2.x) から適切なシリアルポート、ボード、プロセッサが設定されていることを確認してください。 |
== stty == |
== stty == |
||
準備: |
準備: |
||
+ | |||
# stty -F /dev/ttyACM0 cs8 9600 ignbrk -brkint -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts |
# 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 |
# echo -n "Hello World" > /dev/ttyACM0 |
||
− | {{Note| As autoreset on serial connection is activated by default on most boards, you need to disable this feature if you want to communicate directly with your board with the last command instead of a terminal emulator (arduino IDE, screen, picocom...). If you have a Leonardo board, you are not concerned by this, because it does not autoreset. If you have a Uno board, connect a 10 µF capacitor between the RESET and GND pins. If you have another board, connect a 120 ohms resistor between the RESET and 5V pins. See http://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection for more details.}} |
||
+ | {{Note|ほとんどのボードでシリアル接続の自動リセットがデフォルトで有効化されているため、ターミナルエミュレータ (arduino IDE、screen、picocom...) を使わずにボードと直接通信する場合はこの機能を無効化しておく必要があります。Leonardo ボードは自動リセットしないため、このことを心配する必要はありません。Uno ボードの場合は、RESET ピンと GND ピンを 10 µF のコンデンサで繋げてください。その他のボードの場合は、RESET ピンと 5V ピンを 120 オームの抵抗で繋げてください。詳細は https://playground.arduino.cc/Main/DisablingAutoResetOnSerialConnection を参照してください。}} |
||
− | Arduino からの出力を読み込み: |
||
+ | |||
+ | Arduino からデータを受信するには: |
||
+ | |||
$ cat /dev/ttyACM0 |
$ cat /dev/ttyACM0 |
||
== Arduino-Builder == |
== Arduino-Builder == |
||
+ | |||
+ | {{Out of date|このセクションは、2.x バージョンの IDE がリリースされる前に書かれたものであり、機能の説明が正確でないかもしれません。Arduino-Builder の GitHub のページには、Arduino-Builder は廃止予定で Arduino CLI に移行すると冒頭に書かれてあります。}} |
||
+ | |||
{{Pkg|arduino-builder}} コマンドラインツールを使って Arduino のスケッチをビルドすることもできます。上流の {{Pkg|avr-gcc}} と {{Pkg|avrdude}} で {{Pkg|arduino-avr-core}} を使用するには設定ファイルの作成が必要です: |
{{Pkg|arduino-builder}} コマンドラインツールを使って Arduino のスケッチをビルドすることもできます。上流の {{Pkg|avr-gcc}} と {{Pkg|avrdude}} で {{Pkg|arduino-avr-core}} を使用するには設定ファイルの作成が必要です: |
||
− | {{hc|head=build.options.json | |
+ | {{hc|head=build.options.json |2= |
{ |
{ |
||
"fqbn": "archlinux-arduino:avr:uno", |
"fqbn": "archlinux-arduino:avr:uno", |
||
78行目: | 100行目: | ||
スケッチをコンパイルするには: |
スケッチをコンパイルするには: |
||
+ | |||
$ arduino-builder -build-options-file build.options.json blink.ino |
$ 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 |
$ arduino-builder -fqbn archlinux-arduino:avr:uno -hardware /usr/share/arduino/hardware -tools /usr/bin blink.ino |
||
== 他の IDE == |
== 他の IDE == |
||
− | |||
− | === ArduIDE === |
||
− | |||
− | ArduIDE は Arduino 用の Qt ベース IDE です。[[AUR]] の {{AUR|arduide-git}} からインストールできます。 |
||
− | |||
− | ターミナルから作業したい場合、複数の選択肢が存在します。 |
||
=== Arduino-CMake === |
=== Arduino-CMake === |
||
− | [https://github.com/ |
+ | [https://github.com/a9183756-gh/Arduino-CMake-Toolchain Arduino-CMake-Toolchain] と [https://www.cmake.org/cmake/resources/software.html CMake] を使うことで、複数のビルド環境でコマンドラインから Arduino のファームウェアをビルドすることができます。CMake があなたのニーズに合わせたビルド環境を生成し、お好きなツールを使用できます。シンプルな Makefile から Eclipse、Visual Studio、XCode などのプロジェクトまであらゆるビルド環境を準備可能です。 |
− | |||
− | 必要なパッケージ: {{Pkg|cmake}}, {{Pkg|arduino}}, {{Pkg|avr-gcc}}, {{Pkg|avr-binutils}}, {{Pkg|avr-libc}}, {{Pkg|avrdude}}。 |
||
− | |||
− | === gnoduino === |
||
− | |||
− | {{AUR|gnoduino}} はオリジナルの Arduino IDE を GNOME 用にした実装で [[AUR]] からインストールできます。オリジナルの Arduino IDE ソフトウェアは Java で書かれています。gnoduino は Python で実装されており、GNOME を対象にしています。ただし xfce4 など他の WM でも動作します。軽量であることを謳っていますが、オリジナルの Arduino IDE と互換性は維持しています。ソースエディタは gtksourceview をベースとしています。 |
||
− | |||
− | === Ino === |
||
− | |||
− | [https://github.com/amperka/ino Ino] は arduino ハードウェアを使うためのコマンドラインツールキットです。{{AUR|ino}} は [[AUR]] からインストールできます。 |
||
+ | 必要なパッケージ: {{Pkg|cmake}}、{{Grp|arduino}}、{{Pkg|avr-gcc}}、{{Pkg|avr-binutils}}、{{Pkg|avr-libc}}、{{Pkg|avrdude}}。 |
||
− | {{ic|Ino}} は {{ic|/etc/avrdude/avrdude.conf}} にある {{ic|avrdude.conf}} ファイルを確認しますが、({{pkg|avrdude}} のインストール時に) [[pacman]] はこのファイルを {{ic|/etc/avrdude.conf}} に配置します。{{ic|Ino}} が何かエラーを表示するときは {{ic|/etc/avrdude}} ディレクトリを作成してシンボリックリンクを作ってください: |
||
− | # ln -s /etc/avrdude.conf /etc/avrdude/avrdude.conf |
||
=== Makefile === |
=== Makefile === |
||
+ | Arduino IDE を使わずに、他のエディタと Makefile を使うこともできます。 |
||
− | {{Note|Update 2015-03-23. Due to recent changes in Arduino ≥v1.5, many old Makefiles do not work without some modification. A simple Makefile for Arduino version 1.5+ can be found [https://github.com/tomswartz07/arduino-makefile on GitHub].}} |
||
+ | Arduino をプログラムするためのディレクトリをセットアップし、そのディレクトリへ Makefile をコピーしてください。Makefile のコピーは [https://github.com/tomswartz07/arduino-makefile GitHub にあるこのテンプレート]を使うことができます。設定にあわせて多少修正が必要です。Makefile には豊富に説明が付いています。以下は編集が必要な行の一例です: |
||
− | Arduino IDE を使用する代わりに他のエディタと Makefile を使用することができます。 |
||
+ | PORT = 通常は /dev/ttyUSBx、x は Arduino が接続されている USB シリアルポート |
||
− | Arduino をプログラムするためのディレクトリをセットアップして、ディレクトリに Makefile をコピーしてください。Makefile のコピーは {{ic|/usr/share/arduino/hardware/cores/arduino/Makefile}} から取得できます。 |
||
+ | TARGET = スケッチの名前 |
||
− | |||
− | 設定にあわせて多少修正が必要です。Makefile には豊富に説明が付いています。以下は編集が必要な行の一例です: |
||
− | |||
− | PORT = usually /dev/ttyUSBx, where x is the usb serial port your arduino is plugged into |
||
− | TARGET = your sketch's name |
||
ARDUINO = /usr/share/arduino/lib/targets/arduino |
ARDUINO = /usr/share/arduino/lib/targets/arduino |
||
− | スケッチ |
+ | スケッチから呼び出されるライブラリ関数に合わせて、ライブラリをコンパイルする必要があります。そのために、SRC と CXXSRC を編集して必要なライブラリを include する必要があります。 |
− | + | これで、{{ic|make && make upload}} を実行して、ボードにコードをアップロードして、スケッチを実行できるようになります。 |
|
=== Arduino-mk === |
=== Arduino-mk === |
||
− | + | [https://github.com/sudar/Arduino-Makefile arduino-mk] は Makefile を使用するもうひとつのアプローチです。Arduino.mk を include するローカルな Makefile を作成することができます。 |
|
Arduino 1.5 の場合、以下のローカル Makefile を試してください (Arduino 1.5 のライブラリディレクトリの構造は少し変わっています): |
Arduino 1.5 の場合、以下のローカル Makefile を試してください (Arduino 1.5 のライブラリディレクトリの構造は少し変わっています): |
||
135行目: | 138行目: | ||
ARDMK_DIR = /usr/share/arduino |
ARDMK_DIR = /usr/share/arduino |
||
AVR_TOOLS_DIR = /usr |
AVR_TOOLS_DIR = /usr |
||
+ | AVRDUDE_CONF = /etc/avrdude.conf |
||
− | ARDUINO_CORE_PATH = /usr/share/arduino/hardware/arduino/avr/cores/arduino |
||
− | + | 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 |
BOARD_TAG = uno |
||
145行目: | 151行目: | ||
include /usr/share/arduino/Arduino.mk |
include /usr/share/arduino/Arduino.mk |
||
− | 場合によっては {{pkg|avr-libc}} |
+ | 場合によっては {{pkg|avr-libc}} と {{pkg|avrdude}} のインストールが必要です。 |
=== Scons === |
=== Scons === |
||
− | [ |
+ | [https://www.scons.org/ Scons] と [https://github.com/suapapa/arscons arscons] を組み合わせて使うことでコマンドラインから簡単に Arduino プロジェクトをコンパイル・アップロードすることができます。Scons は python で作成されており、シリアルインターフェイスを使うのに python-pyserial が必要です。{{pkg|python-pyserial}} と {{pkg|scons}} をインストールしてください。 |
− | パッケージをインストールすると必要な依存パッケージも一緒にインストールされます。上記のように Arduino 本体も必要なのでインストールしてください。プロジェクトディレクトリを作成したら (例: test)、新しいディレクトリに arduino のプロジェクトファイルを作成します。ディレクトリと同じ名前を付けて拡張子に .ino を追加してください (例: test.ino)。 |
+ | パッケージをインストールすると必要な依存パッケージも一緒にインストールされます。上記のように Arduino 本体も必要なのでインストールしてください。プロジェクトディレクトリを作成したら (例: test)、新しいディレクトリに arduino のプロジェクトファイルを作成します。ディレクトリと同じ名前を付けて拡張子に .ino を追加してください (例: test.ino)。Arscons から [https://github.com/suapapa/arscons/blob/master/SConstruct SConstruct] スクリプトを取得してディレクトリに配置します。スクリプトの中身を確認して、必要であれば編集してください。中身は python スクリプトです。プロジェクトを編集したら、以下を実行してください: |
− | $ scons # |
+ | $ scons # プロジェクトをビルドする |
− | $ scons upload # |
+ | $ scons upload # プロジェクトを Arduino へアップロードする |
=== PlatformIO === |
=== PlatformIO === |
||
− | [ |
+ | [https://docs.platformio.org/en/latest/core/quickstart.html PlatformIO] は複数のハードウェアプラットフォームのスケッチをビルド・アップロードすることができる [[python]] ツールです。現在、Arduino/AVR ベースの基盤、TI MSP430 や TI TM4C12x ボードに対応しています。近い将来、ライブラリ機能も追加して GitHub から直接ライブラリを検索できるようにすることを開発者は予定しています。 |
==== インストール ==== |
==== インストール ==== |
||
− | {{ |
+ | {{pkg|platformio-core}} または {{AUR|platformio-git}} パッケージをインストールしてください。 |
==== 使用方法 ==== |
==== 使用方法 ==== |
||
− | |||
− | $ platformio platforms install atmelavr |
||
− | $ platformio init |
||
− | $ vim platformio.ini |
||
+ | 以下は、プロジェクトを作成しアップロードする方法を説明している公式の [https://docs.platformio.org/en/latest/core/quickstart.html PlatformIO クイックスタートガイド]を元にしています。 |
||
− | # |
||
− | # Atmel AVR based board + Arduino Wiring Framework |
||
− | # |
||
− | [env:ArduinoMega2560] |
||
− | platform = atmelavr |
||
− | framework = arduino |
||
− | board = megaatmega2560 |
||
− | upload_port = /dev/ttyACM0 |
||
− | targets = upload |
||
+ | Platformio プロジェクト用の新しいディレクトリを作成し、そのディレクトリへ cd してください。 |
||
− | $ platformio run |
||
+ | そして、以下のコマンドを実行し、プロジェクトを特定のボード用 (ここでは megaatmega2560) に初期化してください: |
||
+ | $ pio project init --board megaatmega2560 |
||
− | ===Emacs=== |
||
+ | |||
+ | これで、ツールチェインと依存パッケージがダウンロードされます。次に、{{ic|platformio.ini}} を作成してください: |
||
+ | |||
+ | {{hc|platformio.ini|2= |
||
+ | ; PlatformIO Project Configuration File |
||
+ | [env:megaatmega2560] |
||
+ | platform = atmelavr |
||
+ | board = megaatmega2560 |
||
+ | framework = arduino |
||
+ | }} |
||
+ | |||
+ | src/ フォルダ内に main.cpp を作成し、コードを追加してください。コード例は[https://docs.platformio.org/en/latest/core/quickstart.html クイックスタートガイド]にあります。 |
||
+ | |||
+ | そして、コードをコンパイルし、platformio.ini で指定したデバイスへアップロードしてください: |
||
+ | |||
+ | $ pio run |
||
+ | $ pio run --target upload |
||
+ | |||
+ | === Emacs === |
||
[[Emacs]] を IDE として設定することができます。 |
[[Emacs]] を IDE として設定することができます。 |
||
− | + | {{aur|emacs-arduino-mode-git}} パッケージをインストールして emacs で {{ic|arduino-mode}} を有効にしてください。 |
|
+ | |||
+ | 以下の init スクリプトを追加してください: |
||
− | init スクリプトに追加: |
||
{{hc|~/.emacs| |
{{hc|~/.emacs| |
||
;; arduino-mode |
;; arduino-mode |
||
197行目: | 212行目: | ||
{{ic|Arduino-mk}} (上を参照) と {{ic|M-x compile}} {{ic|make upload}} を使うことでスケッチをコンパイル・アップロードできます。 |
{{ic|Arduino-mk}} (上を参照) と {{ic|M-x compile}} {{ic|make upload}} を使うことでスケッチをコンパイル・アップロードできます。 |
||
− | + | [https://www.emacswiki.org/emacs/ArduinoSupport このページ]を参照。 |
|
== トラブルシューティング == |
== トラブルシューティング == |
||
− | |||
− | === Version 1.6 === |
||
− | |||
− | 2014年10月5日現在、サードパーティ製のツールの多くは Arduino 1.0 ({{AUR|arduino10}}) でしか動作しません。一部のツールだけが Arduino バージョン 1.6 ({{Pkg|arduino}}) 以降でも動作します。ツールが動作しない場合はバージョンを確認してください。 |
||
=== Arduino デバイスの永続的な命名 === |
=== Arduino デバイスの永続的な命名 === |
||
− | 複数の |
+ | 複数の Arduino を使っている場合、接続した順番で {{ic|/dev/ttyUSB[0-9]}} という名前がつけられているのに気づくかもしれません。IDE では大した問題ではありませんが、バックグラウンドで arduino プロジェクトと通信するようなソフトウェアをプログラムする場合、この仕様は問題となります。以下の ''udev'' ルールを使うことで、Arduino デバイスへ固定のシンボリックリンクを割り当てることができます: |
+ | |||
{{hc|/etc/udev/rules.d/52-arduino.rules|<nowiki> |
{{hc|/etc/udev/rules.d/52-arduino.rules|<nowiki> |
||
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="sensors/ftdi_%s{serial}" |
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="sensors/ftdi_%s{serial}" |
||
</nowiki>}} |
</nowiki>}} |
||
+ | |||
− | これで arduino に {{ic|/dev/sensors/ftdi_A700dzaF}} のような名前でアクセスできるようになります。もっと意味のある名前をデバイスに付けたい場合: |
||
+ | これで、Arduino に {{ic|/dev/sensors/ftdi_A700dzaF}} のような名前でアクセスできるようになります。もっと意味のある名前をデバイスにつけたい場合は: |
||
+ | |||
{{hc|/etc/udev/rules.d/52-arduino.rules|<nowiki> |
{{hc|/etc/udev/rules.d/52-arduino.rules|<nowiki> |
||
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A700dzaF", SYMLINK+="arduino/nano" |
SUBSYSTEMS=="usb", KERNEL=="ttyUSB[0-9]*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A700dzaF", SYMLINK+="arduino/nano" |
||
</nowiki>}} |
</nowiki>}} |
||
− | 上記で指定したシリアル番号のデバイスのシンボリックリンクが {{ic|/dev/arduino/nano}} に作成されます。変更を適用するのに arduino を切断して再接続したり次のコマンドを実行する必要はありません: {{ic|udevadm trigger}}。 |
||
+ | 上記で指定したシリアル番号のデバイスのシンボリックリンクが {{ic|/dev/arduino/nano}} に作成されます。 |
||
− | 一般的な {{ic|idVendor}}/{{ic|idProduct}} の組み合わせはディストリビューションパッケージの {{ic|hardware/arduino/avr/boards.txt}} で確認できます。中には Arduino プラットフォーム以外のデバイスも含まれています ([[wikipedia:FTDI|FTDI]])。{{ic|serial}} 属性を使うことでデバイスを区別することが可能です。 |
||
+ | Udev ルールの変更を適用するには、Arduino を接続しなおすか、以下のコマンドを実行する必要があります: |
||
+ | # udevadm trigger |
||
− | === シリアルポートを開くときのエラー === |
||
+ | 一般的な {{ic|idVendor}}/{{ic|idProduct}} ペアは、ディストリビューションパッケージの {{ic|/usr/share/arduino/hardware/archlinux-arduino/avr/boards.txt}} で調べることができます。ただし、一部のペアは Arduino プラットフォームに固有のものではないことに注意してください (特に [[wikipedia:FTDI|FTDI]])。デバイスを識別する良い方法は {{ic|serial}} 属性を使うことです。 |
||
− | IDE を起動したときシリアルポートが確認できても、アップロード時に TX/RX の LED が点灯しないことがあります。シリアルモニターで変更したボーレートが間違っている可能性があります。{{ic|~/.arduino/preferences.txt}} を編集して serial.debug_rate を 115200 などの値にしてください。 |
||
+ | |||
+ | === Error opening serial port === |
||
+ | |||
+ | IDE を起動したときシリアルポートが確認できても、アップロード時に TX/RX の LED が点灯しないことがあります。シリアルモニターで変更したボーレートが間違っている可能性があります。{{ic|~/.arduino/preferences.txt}} を編集して {{ic|serial.debug_rate}} を 115200 などの別の値にしてください。 |
||
=== Uno/Mega2560 を使用する === |
=== Uno/Mega2560 を使用する === |
||
227行目: | 245行目: | ||
Arduino Uno と Mega2560 にはオンボード USB インターフェイス (Atmel 8U2) が存在しシリアルデータを受け取ります。そのため、デバイスを接続したときに cdc-acm カーネルモジュールによって作成される {{ic|/dev/ttyACM0}} からアクセスすることが可能です。 |
Arduino Uno と Mega2560 にはオンボード USB インターフェイス (Atmel 8U2) が存在しシリアルデータを受け取ります。そのため、デバイスを接続したときに cdc-acm カーネルモジュールによって作成される {{ic|/dev/ttyACM0}} からアクセスすることが可能です。 |
||
− | シリアル接続をするには 8U2 ファームウェアのアップデートが必要な場合があります。詳しくは [ |
+ | シリアル接続をするには 8U2 ファームウェアのアップデートが必要な場合があります。詳しくは [https://forum.arduino.cc/t/easy-to-brick-arduino-uno-on-linux/47039] の #11 を確認してください。現在書き込むことができない Arduino の掲示板では、Uno を DFU にする方法が書かれている画像を見つけることができます。アカウントがなくて画像を閲覧できない場合、[https://www.scribd.com/doc/45913857/Arduino-UNO] を見てください。 |
− | Uno をループバックモードにして115200ボーで Arduino のシリアルモニターに文字列を打ち込むことで機能のテストができます。文字列が返ってくるはずです。ループバックにするには、デジタル側でピン 0 -> 1 をショートさせてリセットボタンを押すか、入力する際に GND -> RESET ピンをショートさせてください。 |
+ | Uno をループバックモードにして 115200 ボーで Arduino のシリアルモニターに文字列を打ち込むことで機能のテストができます。文字列が返ってくるはずです。ループバックにするには、デジタル側でピン 0 -> 1 をショートさせてリセットボタンを押すか、入力する際に GND -> RESET ピンをショートさせてください。 |
+ | === 安い中国製クローンの Mega2560 で USB ポートが認識されない === |
||
− | === ウィンドウマネージャでアプリケーションのサイズが変更できない、メニューがすぐ閉じる === |
||
+ | |||
− | [[Java#他のウィンドウマネージャになりすます]]を見てください。 |
||
+ | {{aur|i2c-ch341-dkms}} ドライバをインストールしてみてください。 |
||
+ | |||
+ | === Fails to upload: programmer is not responding === |
||
+ | |||
+ | プロセッサの設定 (Arduino IDE の Tools->Processor) を {{ic|ATmega328P}} から {{ic|ATmega328P (Old Bootloader)}} に変更すると、アップロードの問題が解決することがあります。 |
||
+ | |||
+ | === シリアルポートが brltty と衝突する === |
||
+ | |||
+ | Arduino 用のシリアルポートが {{ic|/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 |
||
+ | |||
+ | {{Pkg|brltty}} をアンインストールする必要があるかもしれません。詳細は [https://forum.manjaro.org/t/cant-connect-serial-port-error-ch341-uart-disconnected-from-ttyusb0/87208] を見てください。 |
||
+ | |||
+ | === 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 |
||
== 参照 == |
== 参照 == |
||
− | * https:// |
+ | * [https://www.arduino.cc/ 公式ウェブサイト] |
+ | * [https://docs.arduino.cc/software/ide-v2/tutorials/getting-started-ide-v2 IDE v2 チュートリアルガイド] |
||
− | * https://bbs.archlinux.org/viewtopic.php?pid=981348 |
||
− | * |
+ | * https://answers.ros.org/question/9097/how-can-i-get-a-unique-device-path-for-my-arduinoftdi-device/ |
+ | |||
+ | {{TranslationStatus|Arduino|2024-07-28|812403}} |
2024年7月28日 (日) 23:16時点における最新版
関連記事
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