WSL Ubuntu環境へのESP-IDFインストールとVS Code拡張機能の活用


はじめに

WSL(Windows Subsystem for Linux)の使いやすさが向上しており、Ubuntu環境を構築してESP-IDF(Espressif IoT Development Framework)をインストールし、ESP32の開発に利用できます。この記事では、WindowsのVS Codeから拡張機能を使ってWSLに接続し、ESP-IDFをインストールしてESP32-C6の開発を行う方法を解説します。

WSLのアップデート

現状のWSLのバージョンを確認します。

wsl --version
WSL バージョン: 2.0.14.0
カーネル バージョン: 5.15.133.1-1
WSLg バージョン: 1.0.59
MSRDC バージョン: 1.2.4677
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows バージョン: 10.0.26100.2894

WSL 2.4.8以降では、TARベースのシンプルなWSLフォーマットが利用可能になるなどの機能向上がされています。最新版にアップデートするには、以下のコマンドを実行します。

wsl --update
WSL バージョン: 2.4.10.0
カーネル バージョン: 5.15.167.4-1
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5716
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.26100.2894

WSLへのディストリビューションインストール

新フォーマット(TAR)でのインストール

WSLをアップデートしたため、tar形式のディストリビューションをインストール可能になりました。まだ、すべてのディストリビューションがtar形式に対応しているわけではありません。

今回は利用しませんが、tar形式に対応したUbuntu 24.04のディストリビューションを、UbuntuTestというディストリビューション名でインストールしてみます。

イメージの保存先は C:\project\wsl\ubuntutest とします。

wsl --install Ubuntu-24.04 --location "C:\project\wsl\ubuntutest" --name UbuntuTest

tar形式の場合には、–name オプションを利用することで、同じディストリビューションでも異なる環境としてインストールできます。旧形式の場合は –name オプションは使えません。

インストール後、以下のコマンドで確認できます。

wsl -l -v
  NAME                    STATE           VERSION
* Ubuntu                  Stopped         2
  rancher-desktop         Stopped         2
  rancher-desktop-data    Stopped         2
  docker-desktop          Stopped         2
  Ubuntu-24.04            Stopped         2
  docker-desktop-data     Stopped         2
  UbuntuTest              Stopped         2

テスト環境を削除する場合は、次のコマンドを実行します。

wsl --unregister  UbuntuTest

インストール可能なディストリビューションは次のコマンドで確認できます。

wsl --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl.exe --install <Distro>' を使用してインストールします。

NAME                            FRIENDLY NAME
SUSE-Linux-Enterprise-15-SP5    SUSE Linux Enterprise 15 SP5
SUSE-Linux-Enterprise-15-SP6    SUSE Linux Enterprise 15 SP6
Ubuntu                          Ubuntu
Ubuntu-24.04                    Ubuntu 24.04 LTS
kali-linux                      Kali Linux Rolling
openSUSE-Tumbleweed             openSUSE Tumbleweed
openSUSE-Leap-15.6              openSUSE Leap 15.6
Debian                          Debian GNU/Linux
Ubuntu-18.04                    Ubuntu 18.04 LTS
Ubuntu-20.04                    Ubuntu 20.04 LTS
Ubuntu-22.04                    Ubuntu 22.04 LTS
OracleLinux_7_9                 Oracle Linux 7.9
OracleLinux_8_7                 Oracle Linux 8.7
OracleLinux_9_1                 Oracle Linux 9.1

旧フォーマットでのインストール

今回利用するUbuntu-22.04をインストールします。こちらは旧形式フォーマットのみのため、–name オプションが使えません。
よって、次の手順でインストールします。

  • 通常通りUbuntu-22.04をインストール
  • インストールしたUbuntu-22.04をtar形式でエクスポート
  • エクスポートしたイメージを「esp-idf」というディストリビューション名でインポート

Ubuntu-22.04をインストール

wsl --install Ubuntu-22.04
wsl: レガシの配布登録を使用しています。代わりに tar ベースの配布を使用することを検討してください。
インストール中: Ubuntu 22.04 LTS
Ubuntu 22.04 LTS がインストールされました。
Ubuntu 22.04 LTS を起動しています...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: wohl
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.167.4-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Mon Feb 10 15:26:27 JST 2025

  System load:  0.23                Processes:             66
  Usage of /:   0.1% of 1006.85GB   Users logged in:       0
  Memory usage: 6%                  IPv4 address for eth0: 172.21.255.238
  Swap usage:   0%

エクスポート

wsl --shutdown
wsl --export Ubuntu-22.04 "C:\project\wsl\image\Ubuntu-2204.tar"

esp-idfというディストリビューション名でインポート

wsl --import esp-idf "C:\project\wsl\espide" "C:\project\wsl\export\Ubuntu-2204.tar"
この操作を正しく終了しました。
wsl -l -v
  NAME                    STATE           VERSION
* Ubuntu                  Stopped         2
  rancher-desktop         Stopped         2
  rancher-desktop-data    Stopped         2
  esp-idf                 Stopped         2
  docker-desktop          Stopped         2
  Ubuntu-24.04            Stopped         2
  docker-desktop-data     Stopped         2

ディストリビューションの起動

指定したディストリビューションを、指定したユーザーがログインした状態で起動します。

wsl -d ディストリビューション名 -u ユーザー名

デフォルトユーザー設定

起動時にユーザー設定を省略するとrootで起動してしまいます。
毎回、ユーザーを指定するのが面倒なため、デフォルトのユーザーを設定します。

sudo nano /etc/wsl.conf
[user]
default=ユーザー名

一旦、WSLを終了します。

wsl --shutdown

ディストリビューションを起動します。

wsl -d ディストリビューション名

先ほど設定したユーザーでログインできているはずです。

WSLのディストリビューションに外部からアクセス可能にする

wslのデフォルトの設定では、外部からwslのディストリビューションにはアクセスできません。

ディストリビューションに割り振られるIPアドレスを確認してみます。

wsl hostname -I
172.21.255.238

以前はブリッジモードが使えていましたが、現在はブリッジネットワークモードは非推奨になったため、ミラーモードを利用します。

Windowsのカレントユーザーフォルダに.wslconfigファイルを作成し、次の内容を記述します。

[wsl2]
networkingMode=mirrored

ディストリビューションに割り振られるIPアドレスを確認します。

wsl hostname -I
169.254.83.107 192.168.1.29

ホストOS(Windows)と同じIPアドレスが割り振られており、外部からWindowsと同じIPでアクセスが可能になります。
ただし、ディストリビューションごとに設定を変えることはできず、すべてのディストリビューションで共通の設定になります。

WindowsのVS Codeに拡張機能をインストールする

WindowsのVS Codeを起動し、次の拡張機能をインストールします。

「Connect to WSL using Distro」でWSLの「esp-idf」に接続します。
その後、ターミナルを開き次のコマンドを実行します。

sudo apt update
sudo apt upgrade

依存関係をインストールします。

sudo apt-get install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0

VS Codeの機能拡張「ESP-IDF」をインストールします。

ESP-IDFをインストールする

VS Codeのコマンドパレットに「ESP-IDF: Configure ESP-IDF Extension 」と入力します。

Express」を選択し、下図のように設定し、します。(パスは変更してください)

source $HOME/esp/v5.4/esp-idf/export.sh

動作するか確認する。

idf.py --version

USBをWSLに接続する

usbipd-winをWindowsにインストールします。

Windowsに接続されているUSBデバイスの一覧を取得します。

usbipd list
Connected:
BUSID  VID:PID    DEVICE                                                        STATE
2-1    303a:1001  USB シリアル デバイス (COM3), USB JTAG/serial debug unit      Not shared
2-3    04f3:0c55  ELAN WBF Fingerprint Sensor                                   Not shared
2-6    5986:211c  HD Webcam                                                     Not shared
2-10   8087:0026  インテル(R) ワイヤレス Bluetooth(R)                           Not shared
2-14   0411:0333  USB 接続 SCSI (UAS) マス ストレージ デバイス                  Not shared
4-4    05e3:0749  USB 大容量記憶装置                                            Not shared
5-2    046d:c52b  Logitech USB Input Device, USB 入力デバイス                   Not shared
5-3    046d:c545  LIGHTSPEED Receiver, USB 入力デバイス                         Not shared
6-1    056e:701e  ELECOM 2MP Webcam, ELECOM Face Authentication Cam             Not shared
6-2    056e:701f  Webcam Internal Mic                                           Not shared

ここで、開発ターゲットのESPはBUSID 2-1 に接続されていることがわかります。

BUSID 2-1をWSLに接続します。

usbipd bind --busid 2-1
usbipd attach --wsl --busid 2-1

切断する場合には次のコマンドを実行します。

usbipd detach --busid 2-1

ESP-IDFでのビルド・フラッシュ・シリアルモニター

LED点滅のサンプルプログラムをビルドしてデバイスに書き込みます。

今回使用するデバイスは「esp32c6」です。

ビルド

cd ~/esp/v5.4/esp-idf/examples/get-started/blink
idf.py set-target esp32c6
idf.py menuconfig
idf.py build

フラッシュ

usbipdで接続したUSBがどのポートに割り当てられているか確認します。

dmesg | tail
[  617.652120] vhci_hcd: vhci_device speed not set
[  617.723767] usb 1-1: new full-speed USB device number 2 using vhci_hcd
[  617.805638] vhci_hcd: vhci_device speed not set
[  617.877535] usb 1-1: SetAddress Request (2) to port 0
[  617.916227] usb 1-1: New USB device found, idVendor=303a, idProduct=1001, bcdDevice= 1.02
[  617.916232] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  617.916235] usb 1-1: Product: USB JTAG/serial debug unit
[  617.916238] usb 1-1: Manufacturer: Espressif
[  617.916240] usb 1-1: SerialNumber: 9C:9E:6E:77:9E:DC
[  617.918945] cdc_acm 1-1:1.0: ttyACM0: USB ACM device

ttyACM0」ポートに割り当てられていることが確認できます。

実際に書き込みます。

idf.py -p /dev/ttyACM0 flash

シリアルモニター

idf.py -p /dev/ttyACM0 monitor

シリアルモニターの終了:Ctrl + ]

Information

ESP-IDF 環境でよく使用されるコマンドは次のとおりです。

idf.py component: プロジェクト内のコンポーネントを管理します。
idf.py menuconfig: プロジェクト構成メニューを開きます。
idf.py build: プロジェクトをビルドします。
idf.py flash: ビルドされたファームウェアを接続されたデバイスにフラッシュします。
idf.py monitor: シリアルモニターを起動してデバイスからの出力を表示します。
idf.py clean: ビルドディレクトリをクリーンアップします。
idf.py fullclean: ダウンロードした依存関係を含め、完全なクリーンアップを実行します。
idf.py set-target: プロジェクトのターゲットチップを設定します。
idf.py size: ビルドされたファームウェアのサイズ情報を表示します。
idf.py app: プロジェクト内のアプリケーションを管理します。

まとめ

この記事では、WSLのUbuntu環境にESP-IDFをインストールし、WindowsのVS Code拡張機能を使ってESP32-C6の開発を行う方法を解説しました。この方法を利用することで、Windows環境でもESP32-C6の開発を進めることができます。

FAQ

WSLのバージョンを確認する方法は?

wsl --version コマンドを使用して確認できます。

WSLを最新バージョンにアップデートするには?

wsl --update コマンドを実行してください。

WSLのTAR形式のディストリビューションとは何ですか?

TAR形式は、WSL 2.4.8以降で対応した新しいフォーマットで、簡単なカスタマイズやスケーラブルな展開が可能です。

WSLのインストール可能なディストリビューションの一覧を確認するには?

wsl --list --online コマンドで確認できます。

WSLのディストリビューションにデフォルトユーザーを設定するには?

/etc/wsl.conf ファイルに [user] default=ユーザー名 を記述し、wsl --shutdown 後に再起動します。

USBデバイスをWSLに接続するには?

usbipd bind --busid <BUSID> を実行し、その後 usbipd attach --wsl --busid <BUSID> を使用します。

USBデバイスをWSLにアタッチできません。

アタッチコマンドを実行する際、WSL側が起動している必要があります。

WindowsからUSBデバイスが接続できなくなりました。

USBデバイスがWSLにアタッチされている間は、Windows側からそのデバイスにアクセスできません。デタッチしてください。

ESP-IDFプロジェクトをビルドする方法は?

ターゲットデバイスを設定し、ビルドします。
idf.py set-target esp32c6
idf.py build

ESP-IDFからデバイスへのフラッシュ手順は?

USBポート情報を確認後、以下のコマンドでフラッシュします。

idf.py -p /dev/ttyACM0 flash

ESP-IDFにてシリアルモニターでログを見るには?

USBポート情報を確認後、次のコマンドを実行します。

idf.py -p /dev/ttyACM0 monitor

ESP-IDFにてシリアルモニターを終了する方法は?

次のキーを同時に押します。

Ctrl + ]

ESP-IDFにてidf.pyが実行できません。

次のコマンドで環境変数の設定を行ってから実行してください。

source $HOME/esp/v5.4/esp-idf/export.sh