RustのESP32開発環境構築

プログラミング言語Rustを使用してESP32用のプログラムを開発するための環境を構築する。

実行環境

ターゲットボード
ESP32-DevKitC-32C
※ターゲットボードが変わると以下で使用するコマンドが変わるので注意

開発ホスト
Ubuntu 20.04 LTS

環境準備

Rustインストール

開発ホストにRustをインストールする。Rustはインストールが非常に簡単で下記のコマンドを実行するだけで完了する

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Rustをインストール

Rustの環境変数を設定する

ホームフォルダ直下の.cargoフォルダ内に環境変数のスクリプトがあるので、
そのスクリプトから設定を行う。

source ~/.cargo/env

環境変数が正しく設定されれば以下のコマンドが実行できるはずなので確認する。

# rustcコマンドの確認
rustc --version
# cargoコマンドの確認
cargo version
# rustupコマンドの確認
rustup show

ESP32用のツールチェインをインストールする

cargo install espup
cargo install cargo-espflash

espup install --esp-idf-version <ESP_IDF_VERSION>
# <ESP_IDF_VERSION>は4.4を使用する
# バージョン情報は[esp-idf-template](https://github.com/esp-rs/esp-idf-template)を参考にする
# ex. espup install --esp-idf-version 4.4

# ESP32用の環境変数を設定
. $HOME/export-esp.sh

ESP32用プロジェクトを作成する

cargo-generateを使用してesp-idf-templateからプロジェクトを作成する

# [no_std]
cargo generate --git https://github.com/esp-rs/esp-template

# [std]
cargo generate --git https://github.com/esp-rs/esp-idf-template cargo

ESP32用プロジェクトをビルドする

デフォルトでは使用するツールチェーンはESP32になっていないため、使用するツールチェーンを指定してビルドを実施する。

# ※ビルドする前に必ず設定
# ESP32用の環境変数を設定
. $HOME/export-esp.sh

cargo +esp build

ESP32にプログラムを書き込む

# 書き込みのみ
# no_std
# Debugモード
cargo espflash --target=xtensa-esp32-none-elf /dev/ttyUSB0
# Releaseモード
cargo espflash --release --target=xtensa-esp32-none-elf /dev/ttyUSB0

# std
# Debugモード
cargo espflash --target=xtensa-esp32-espidf /dev/ttyUSB0
# Releaseモード
cargo espflash --release --target=xtensa-esp32-espidf /dev/ttyUSB0

# 書き込み後、シリアルモニタを開始
# no_std
# Debugモード
cargo espflash /dev/ttyUSB0 --monitor
# Releaseモード
cargo espflash --release /dev/ttyUSB0 --monitor

# std
# Debugモード
cargo espflash --target=xtensa-esp32-espidf /dev/ttyUSB0 --monitor
# Releaseモード
cargo espflash --release --target=xtensa-esp32-espidf /dev/ttyUSB0 --monitor

ESP32実行中プログラムのシリアルモニタ

# シリアルモニタソフトをインストール
cargo install cargo-espmonitor

# デバイスを指定してシリアルモニタを起動する
cargo espmonitor /dev/ttyUSB0

参考リンク

The Rust on ESP Book

Wokwi

esp-hal(GitHub)

ESP32 on Rust チートシート

    タイマー割込と排他制御
广告
将在 10 秒后关闭
bannerAds