2025年10月、ESP32向けRust HAL「esp-hal」がバージョン1.0.0に到達しました。これはマイコンベンダーが公式にサポートする初の安定版Rust HALであり、組込みRust界にとって画期的な出来事です。この記事では、esp-hal 1.0の意義と、ESP32でRust開発を始める方法を解説します。
esp-hal 1.0.0とは
esp-halはEspressifが公式に開発・メンテナンスしている、ESP32ファミリー向けのRustハードウェア抽象化レイヤー(HAL)です。2025年2月にベータ版、10月に正式リリースされました。
1.0で安定化された機能:
- HAL初期化(
esp_hal::init)と設定 - GPIO、UART、SPI、I2Cドライバ
- 時間モジュール(Instant、Duration、Rate)
- async/blockingの両方のドライバモード
- Embassyなどの非同期ランタイムとの互換性
その他の機能はunstableフィーチャーフラグの下に配置され、段階的に安定化される予定です。次の大きな安定化ターゲットはWi-Fi/Bluetooth/ESP-NOWスタック「esp-radio」です。
2つの開発アプローチ
ESP32でRustを使う方法は2つあります。
1. no_std + esp-hal(ベアメタル)
OSを使わず、ハードウェアを直接制御するアプローチです。バイナリサイズが小さく、起動が速く、リアルタイム性が必要な場面に適しています。esp-hal 1.0はこのパスの安定版です。
2. std + esp-idf-hal(IDF上で動作)
ESP-IDFの上にRust標準ライブラリを載せるアプローチです。スレッド、ネットワーキング、ファイルシステムなど標準ライブラリの機能がフルに使えます。バイナリは大きくなりますが、機能の網羅性は高いです。
LLVM Xtensaアップストリーム化
ESP32・ESP32-S2・ESP32-S3が採用するXtensaアーキテクチャのLLVMサポートが、本家LLVMへのアップストリーム化が進んでいます。基本ISAの大部分はすでにLLVM本体に取り込まれており、将来的にはEspressifのカスタムLLVMフォークなしで、標準のRustツールチェーンからXtensaターゲットにコンパイルできるようになります。
なお、RISC-VベースのESP32-C系/H系チップはすでに標準ツールチェーンでコンパイル可能です。
始め方
ESP32でRust開発を始める手順は以下のとおりです。
- Rustインストール:
rustupでRustをインストール - espupインストール:
cargo install espupでESP32用ツールチェーンマネージャを導入 - ツールチェーン構築:
espup installでXtensa対応ツールチェーンを自動セットアップ - プロジェクト作成:
cargo generate esp-rs/esp-halテンプレートからプロジェクトを生成 - ビルド&フラッシュ:
cargo runで実機にフラッシュして実行
まとめ
esp-hal 1.0.0のリリースにより、ESP32でのRust開発は「実験的」から「プロダクション対応」へと段階が上がりました。メモリ安全性とゼロコスト抽象化というRustの利点を、IoTデバイス開発で活かせる時代が来ています。C/C++に慣れた組込みエンジニアも、ぜひRust on ESP32を試してみてください。
コメントを残す