3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

WSL2でESP-IDFの環境構築

Last updated at Posted at 2022-11-07

〇はじめに

当初MicropythonによるESP32を扱っていたいましたが, やや機能不足であるため, ESP-IDFに乗り換えようとしました。
しかし, WindowsのESP-IDFのビルドがやたらと遅い(最低限のプログラムをコンパイルするにも5分以上はかかる)。MacやLinuxだとこんなことにはならないみたいですが...
したがって今回は, WSL2のUbuntu環境でESP-IDFの環境構築を行っていきます。

ちなみに, 今回はWSL2での環境構築を行いましたが, ビルド時にコア数を多く振り分け素早くビルドするやり方もあるみたいです。参考までに

〇環境

・Windows
・WSL2
・Ubuntu20.04 LTS
・ESP32

〇手順

まず, ESP-IDFを実行するためだけの新しいディストリビューションを作成した方が良いかと思います。10GB程度の容量を持ってかれると思います。

  1. 新しいディストリビューションの作成
  2. ESP-IDF on WSL2 の実行環境の構築
  3. USBIPによるWSLへのポートの対応づけ
  4. udevの適用による一般ユーザでのデバイスの使用

1. 新しいディストリビューションの作成

・ディストリビューションの作成

コマンドプロンプト.
wsl --install -d <Distribution Name>

・一般ユーザの作成
ユーザを作成し, パスワードを設定し, sudoグループに追加してください

・既定ディストリビューションを指定&起動時のログインユーザを設定

コマンドプロンプト.
wsl -s <作成したディストリビューション名> -u <作成したユーザ名>

2. ESP-IDF on WSL2 の実行環境の構築

ここを参照してください

ページ内のここまでは実行できると思います。
・Build
idf.py build

その後, flashで接続先の機器にファームウェアを書き込むときに, エラーが出ます

Could not open COM ~

PCに接続されている機器がWSL2では認識されていないのが原因です。
したがって続く作業を行ってください

idf.pyコマンドを実行するためには, ~/.profileが実行されている必要があります

Ubuntu.
. ~/.profile || true

いちいち実行するのは面倒なため, ~/.bash_profileに以下の処理を書き込む必要があります

~/.bash_profile
# wsl起動時に実行される処理を記述
if [ -f ~/.profile  ]; then
    . ~/.profile || true
fi

3. USBIPによるWSLへのポートの対応づけ

USBIPDをダウンロードする前にESP-IDFを実行するディストリビューションを既定ディストリビューションに設定しておいてください。

コマンドプロンプト.
wsl -s <ディストリビューション名>

以下のサイトの
"USBIPD-WIN プロジェクトをインストールする"に従ってダウンロードしてください

続いて, "Linux に USBIP ツールとハードウェア データベースをインストールする"に従ってください。
実行できない場合は, sudo apt update & apt upgradeやresolv.confでの設定でインターネットに接続されているかを確認してください。

以上が, 完了したらコマンドで, Windows に接続されたすべての USB デバイスの一覧を表示します。

コマンドプロンプト.
usbipd wsl list

今回はBUSID 2-4のCOM6が接続されています
image.png

次に, WSL2に認識させたいデバイスをアタッチします
アタッチするにはWSLが起動している必要があるので一旦起動させてください

コマンドプロンプト.
usbipd wsl attach --busid <busid>

BUSID 2-4がアタッチされてるのが分かります
image.png

ちなみに, デタッチしたい場合は

usbipd wsl detach --busid <busid>

WSL2にアタッチするとWindowsの方では認識されなくなりますが, wslがシャットダウンすると自動的にデタッチされます

4. udevの適用による一般ユーザでのデバイスの使用

一般ユーザが, デバイスを使用するために権限の設定が行われている必要があります。したがってudevを有効化する必要があります

WSLではsystemdが動いていないので
→ udevだけ動かす

・udevのインストール

Ubuntu.
sudo apt-get install udev

・udevの起動

Ubuntu.
sudo service udev start

udevの起動には意図的に1分のスリープが設けられています。その間に実行をキャンセルできる猶予を与えてくれていますが, 待ちたくない人は/etc/init.d/udevを編集してください

以下の"sleep"部分をいじってください。自己責任でお願いします
image.png

・/etc/wsl.confに以下を書き込み, 起動時に実行されるようにする

/etc/wsl.conf
[boot]
command = "service udev start"

次にデバイスが接続されているかを確認

Ubuntu.
dmesg | grep tty

image.png

・該当するデバイスを探す(ここではttyUSB0)

Ubuntu.
ls -l /dev

image.png

・権限と所有グループが表示されていれば大丈夫です

・一般ユーザを該当するグループに追加(ここではdialout)

Ubuntu.
gpasswd -a <USER名> <GROUP名>

これで整いました!

ESPに書き込む

先ほど作ったhello-worldのディレクトリに移動し, 以下のコマンドを実行

/hello-world.
idf.py flash -p /dev/ttyUSB0

次に, 実行します

/hello-world.
idf.py monitor -p /dev/ttyUSB0

実行されたら完了です!お疲れ様でした。

参考にさせていただいた記事

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?