2020年8月2日日曜日

2020版: RustのArduino向けプログラムでLチカする方法


背景

RustとはC言語のようにビルドして実行ファイルを作って動かすプログラミング言語です。
3年前に同様の内容の記事
を書きましたが、AVR-RustがRust本家に取り込まれたことにより手順が変わりました。
備忘録を兼ねて、新しい手順と関連する資料のリンクを共有します。

使ったもの

UbuntuにRustをインストールしたPC

UbuntuRustをインストールしておきます。
各ソフトウェアのバージョンはこちらです。

Ubuntu: 20.04
Cargo: 1.45.1 (f242df6ed 2020-07-22)

記事を書いている時点では、依存ライブラリをWindowsにインストールする手順は明記されていないため、Windowsを利用する場合は、WindowsストアからUbuntuをインストールして、Windows上のUbuntuで手順を実施するのが良いと思います。

ATmega328Pが載っているArduino

Arduino UnoとNanoに対してLチカプログラムを書き込んでみます。


AVR-Rustの関連資料

資料のURLはこちらです。
https://book.avr-rust.com/

上記資料のコンパイラの関連ライブラリのインストール手順、サンプルコードのビルド手順書き込み手順をこの記事では参考にしています。

コンパイラと関連ライブラリをインストール

コンパイラのインストール手順に従い、必要なパッケージをインストールします。
rustup component add rust-src --toolchain nightly

Ubuntu向けの関連ライブラリをインストール手順
に従い、ライブラリをインストールします。
sudo apt install binutils gcc-avr avr-libc avrdude

Lチカプログラムをビルド

サンプルコードのビルド手順に従い公開されているLチカのサンプルプログラムをビルドします。

ダウンロードしてフォルダの中に入ります。
git clone https://github.com/avr-rust/blink.git
cd blink

ATmega328P向けにビルドします。
記事を書いている時点では、avr-rustのコンパイルはnightlyモードで行う必要があったので、cargoコマンドの後に +nightly を付けてnightlyモードでビルドしました。
cargo +nightly build -Z build-std=core --target avr-atmega328p.json --release

プログラムを書き込む

書き込み手順に従ってプログラムを書き込みます。

Unoの場合は/dev/ttyACM0にマウントされたので、下記のコマンドでアップロードできました。
avrdude -patmega328p -carduino -P/dev/ttyACM0 -b115200 -D -Uflash:w:target/avr-atmega328p/release/blink.elf:e

静止画では分からない、Lチカの様子をご覧ください。


Nanoの場合は/dev/ttyUSB0にマウントされ、ブートローダーの設定で書き込み速度が57600bpsになっているため、下記のコマンドでアップロードできました。
avrdude -patmega328p -carduino -P/dev/ttyUSB0 -b57600 -D -Uflash:w:target/avr-atmega328p/release/blink.elf:e

静止画では分からないLチカの様子を再びご覧ください。


まとめ

Rustで書かれたArduinoのLチカプログラムをビルドして、UnoとNanoに書き込めました。
3年前に取り組んだ時はAVR-Rustのビルドが必要でしたが、それがRust本家に取り込まれたことにより、cargoで必要な環境を整えられるようになりました。

0 件のコメント :