Wokwiで始める楽しい組み込みRust入門

組み込み開発をする際に、実機やデバイスを購入する前に試してみたいということはよくあります。また、Rustを組み込み開発で使ってみたいけれど、環境構築は大変です。

今回は、ブラウザ上で手軽に組み込みRustプログラミングが体験できる「Wokwi」というシミュレータをご紹介します。実機を購入せずにESP32などのマイコンプログラミングが体験でき、Rustでの組み込み開発が始められる楽しいツールです。

![Screenshot 2025-03-16 at 10.55.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79562/b4a92ad6-0d20-45c1-95be-2cf26beaa9aa.png)


## Wokwiとは

[Wokwi](https://wokwi.com/)は、ブラウザベースの組み込みシステムシミュレータで、Arduino、ESP32、STM32などの様々なマイコンをシミュレーションできるプラットフォームです。**Rustでの組み込み開発もサポートしています**。

Wokwiの主な特徴：

- ブラウザだけで動作（インストール不要）
- 多種多様なマイコンボードに対応（ESP32シリーズなど）
- LEDやボタン、ディスプレイなど多数のパーツを搭載可能
- Rustを含む複数の言語をサポート
- Wi-Fiシミュレーション機能
- GDBデバッグ機能
- 作成したプロジェクトの共有が簡単

## Rustとマイコン開発

Rustは安全性と性能を両立した現代的なシステムプログラミング言語です。メモリ安全性を型システムとコンパイル時のチェックによって保証するため、C/C++で心配なバグやセキュリティホールを防ぐことができます。

組み込み開発においても、次のようなメリットがあります：

- メモリ安全性（バッファオーバーフローなどの防止）
- 強力な型システムとパターンマッチング
- ゼロコスト抽象化（高度な機能でもオーバーヘッドが少ない）
- クロスプラットフォーム対応
- 豊富なパッケージエコシステム
- 詳細なエラーメッセージ

## Wokwiを使ったRust開発の始め方

### 1. プロジェクトの作成

まずは[WokwiのRustプロジェクト](https://wokwi.com/rust)にアクセスしてみてください。豊富なプロジェクトが閲覧でき、見ているだけでワクワクします。

![Screenshot 2025-03-16 at 11.14.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79562/6ab66583-552f-4ba1-b482-d61175fc2249.png)


例えば、基本的なESP32用のBlinkプロジェクトは以下から始められます：
- [esp32-blink.rs](https://wokwi.com/projects/341952826535051858)


### 2. シミュレーション実行

プロジェクトを開いたら、画面右上の「Start Simulation」ボタンをクリックすると、シミュレーションが開始されます。このプロジェクトでは、LEDが点滅する様子を確認できます。

### 3. コードの編集

エディタ部分では、Rustのコードを自由に編集できます。例えば、LEDの点滅間隔を変更したり、ロジックを追加したりできます。以下は基本的なLチカプログラムの例です：

```rust
//! Blinks an LED
//!
//! This assumes that a LED is connected to the pin assigned to `led`. (GPIO4)

#![no_std]
#![no_main]

use esp_backtrace as _;
use esp_hal::{
    delay::Delay,
    gpio::{Level, Output, OutputConfig},
    main,
};
use log::info;

#[main]
fn main() -> ! {
    let peripherals = esp_hal::init(esp_hal::Config::default());
    esp_println::logger::init_logger_from_env();
    
    let mut led = Output::new(peripherals.GPIO4, Level::High, OutputConfig::default());
    let delay = Delay::new();
    
    info!("Hello world!");
    loop {
        info!("Toggling LED...");
        led.toggle();
        delay.delay_millis(500);
    }
}
```

このコードは、ESP32のGPIO4ピンに接続されたLEDを0.5秒ごとに点滅させます。`info!`マクロを使用して、シリアルモニタにメッセージも出力しています。このプログラムは `no_std` 環境下で動作し、組み込み開発でよく使われるアプローチです。

### 4. プロジェクトのカスタマイズ

Wokwiでは、回路図エディタを使って様々なコンポーネントを追加できます。画面左側の「+」ボタンからコンポーネントを追加し、回路を構成できます。LEDやボタン、ディスプレイなど、多数の部品が利用可能です。**実機を接続する際にも役立ちそうです。**

Wokwiのプロジェクトには「diagram.json」ファイルがあり、これが回路図の定義となっています。プロジェクトページでこのファイルを直接編集できます。

```json
{
  "version": 1,
  "author": "Sergio Gasquez Arcos",
  "editor": "wokwi",
  "parts": [
    {
      "type": "board-esp32-devkit-c-v4",
      "id": "esp",
      "top": -28.8,
      "left": -4.76,
      "attrs": { "builder": "rust-nostd-esp" }
    },
    {
      "type": "wokwi-resistor",
      "id": "r1",
      "top": 109.55,
      "left": 115.2,
      "attrs": { "value": "1000" }
    },
    {
      "type": "wokwi-led",
      "id": "led1",
      "top": 15.6,
      "left": 157.4,
      "attrs": { "color": "red", "flip": "" }
    }
  ],
  "connections": [
    [ "esp:TX", "$serialMonitor:RX", "", [] ],
    [ "esp:RX", "$serialMonitor:TX", "", [] ],
    [ "esp:GND.3", "led1:C", "black", [ "h76.8", "v-9.6" ] ],
    [ "led1:A", "r1:2", "green", [ "v0" ] ],
    [ "esp:4", "r1:1", "green", [ "h0" ] ]
  ],
  "serialMonitor": {
      "display": "terminal",
      "convertEol": true
  },
  "dependencies": {}
}
```

## Wokwiをさらに活用するには

### VSCode拡張機能

Wokwiには[VSCode拡張機能](https://docs.wokwi.com/vscode/getting-started)があり、Visual Studio Code内でシミュレーションを実行できます。詳しい使い方については、公式ドキュメントを参照してください。

### デバッグ機能

Wokwiでは[GDBデバッグ](https://docs.wokwi.com/gdb-debugging)が利用可能です。GDB（GNU Debugger）は、プログラムの実行を制御し、変数の値を確認したり、ブレークポイントを設定したりできる強力なデバッグツールです。特に組み込み開発では、ハードウェアの挙動を含めた複雑なバグを特定するのに役立ちます。公式ドキュメントに、デバッグの設定方法や使用方法が詳しく説明されています。

## Wokwiから実機開発へのステップアップ

Wokwiで基礎を学んだ後、実機開発に移行する際は、下記がおすすめです：

[espup](https://github.com/esp-rs/espup): Espressif向けRust開発環境を簡単にセットアップするためのツール。このツールは「rustup for esp-rs」と表現されており、Xtensa向けRustツールチェーンやその他必要なコンポーネントを一括でインストールできます。

## まとめ

Wokwiは、Rustを使った組み込み開発の入門に最適なプラットフォームです。実機を購入することなく、ブラウザ上でESP32などのマイコンプログラミングを体験でき、基本から応用まで幅広く学ぶことができます。

Wokwiを機に最近眠っていたESP32で遊んでみようと思います

## 参考リンク

- [Wokwi公式サイト](https://wokwi.com/)
- [Wokwi Rustページ](https://wokwi.com/rust)