VSCode & PlatformIOで始める!WSL×組み込み開発環境構築の完全ガイド
Back to Top
これまで以下の記事で VSCode と PlatformIO を使った組み込みソフトウェア開発を紹介してきました。
- IoT を使ってみる(その14:有機ELディスプレイ(OLED)SSD1306編)
- ESP32開発ボードをESP-PROGとPlatformIOを使ってデバッグする
- Raspberry Pi PicoをRaspberry Pi デバッグプローブとPlatformIOを使ってデバッグする
- STM32マイコンボード(STM32F103C8T6)をST-Link V2互換品とPlatformIOを使ってデバッグする
- みんな大好きVSCodeと組み込みソフトウェア開発環境PlatformIOでリモート開発をしてみる(Arduino編)
さて、今日のお題は「WSL(Ubuntu)に、PlatformIO を入れて 組み込みソフトウェア開発環境 を作ってみよう」です。
最終的な構築イメージは以下のようになると考えています。
あらかじめ、Windows上にVSCodeのインストールは済んでいるとします。
構築の手順は以下です。
- Windowsに WSL を使って Ubuntu24.04 を導入する
- VSCodeに拡張機能(WSL または Remote Development)をインストールする
- VSCode で WSL に接続する
- WSL 上に PlatformIO をインストールする
- WSL から USB を認識させる(Usbipd-WIN を使用)
- WSL(上のPlatformIO)から、プログラムを Arduino にアップロードする
では、早速実施してきましょう。
WSL(Ubuntu)の準備
#WSL(Windows Subsystem for Linux)とは、Windows上でLinux環境を実行できる機能です。
WSLを使えばWindows上に簡単にLinux環境が用意できます。
WSLを使ってWindows上にLinux(Ubuntu)インストールする手順についてはこちらの記事で詳しく書いてあります。
ただし今回は Docker まで入れる必要はありません。
VSCodeに拡張機能「WSL」または「Remote Development」をインストールする
#ソフトウェア開発自体は Windows上にインストールしてある VSCode 上で行います。
VSCode から WSL につなぐために 拡張機能「WSL」を使用します。
今後、SSH接続やDockerコンテナ上での開発もする場合は、以下の拡張機能「Remote Development」をインストールしておいた方が良いでしょう。
「Remote Development」拡張機能をインストールすると、以下の4つの拡張機能が同時にインストールされます。
- WSL(今回の記事で使用する拡張機能)
- Remote - SSH
- Dev Containers
- Remote - Tunnels
拡張機能がインストールされると、VSCodeにの左側ペインに「リモートエクスプローラー」が追加されます。
VSCode で WSL に接続する
#VSCodeの左下の「リモートウィンドウを開きます」をクリックして「WSLへの接続」を選択します。
接続が完了すると、VSCodeの左下の表示が以下のように変わります。(接続先 WSL が Ubuntu24.04の場合)
WSL 上に PlatformIO をインストールする。
#PlatformIOのインストール先が WSLであろうと、ローカル環境であろうと、PlatformIOのインストール方法は同じです。
VSCodeでWSLに接続した状態(★ここ重要)で、VSCodeの拡張機能「PlatformIO IDE」をインストールします。
PlatformIO が正しく WSL側にインストールされると、拡張機能のアイコンの右下に インストール先がリモート側であることを示すマークがつきます。
また、拡張機能が有効である環境が WSLの何の環境であるかが表示されます。
WSL から USB を認識させる
#さて、ここで1つ課題にぶち当たります。
ArduinoマイコンをホストPCに接続して、USB-COMポート経由でプログラムのアップロードを行うのですが、今回は開発環境が WSL 上の Ubuntu にあります。
「どうやって WSL(Ubuntu)にホストPC上のUSBを認識させるか?」
VirtualBoxとかの仮想環境だったら、設定すればUSBデバイスを認識させることはできると思いますが、いまさら WSLを諦めて、他の環境を導入したくありません。
どうにかして、USB-COMポートを WSL(Ubuntu)に認識させることができないか?
色々と探したいたら、マイクロソフトのサイトで このような情報 を見つけました。
このサイトで紹介されている usbipd-win を使えば課題を解決できそうです。
上記のサイトから最新版をダウンロードして、ホストPCにインストールします。
アプリをインストールした後、以下のコマンドで USBデバイス一覧 を表示します。
usbipd list
ホストPCに Arduinoマイコン を接続してから、再度USBデバイス一覧を取得します。
すると以下のようにデバイスが一つ増えました。
どうやら、このBUSID「3-2」ってやつが、Arduinoマイコンを接続したときに作成された USBデバイス のようです。
では、この BUSID が示す USBデバイス を WSL から利用できるように共有(バインド)します。
Powershellかコマンドプロンプトを管理者権限で起動して、以下のコマンドを実行します。
(BUSID は各自の環境にあわせて置き換えてください)
usbipd bind --busid 3-2
すると、STATEのところが「Shared」に変化し、共有されていることがわかります。
ただし、この状態ではまだ WSL からUSBデバイスを利用できません。
利用するためには割り当て(アタッチ)が必要です。
USBデバイス を WSL に割り当てていきます。
以下のコマンドを実行します。
usbipd attach --wsl --busid 3-2
USBデバイス一覧で確認すると STATE が「Attached」に変化していることがわかります。
ちなみに 割り当て解除コマンドは以下です。
usbipd detach --busid <busid>
また、共有解除コマンドは以下です。
usbipd unbind --busid <busid>
99-platformio-udev.rules 設定
#また、LinuxでPlatformIOを使う場合は、以前の記事で紹介した「99-platformio-udev.rules 設定」が必要になりますので、WSL上のUbuntuにて、設定を実施します。
(上で紹介した記事では Rasbian(Raspberry Pi)を対象にしてましたけど、Linux系なので同じ手順で実施して大丈夫です)
WSL上からプログラムのアップロード
#これでやっとプログラムの開発&アップロードができる環境が整いました。
今にして思えば、PlatformIOの設定よりも、USBデバイス設定の方が色々と面倒だったような気がしないでもありません。
Arduinoマイコン にアップロードするプログラムには、いつもの「Lチカプログラム」を使用します。
プログラムはこちらと同じです。
アップロード後に以下のようにログが出力され、ArduinoマイコンのLEDが1秒間隔でチカチカと点滅していたら、アップロード成功です。
おまけ(GUIでUSB操作)
#USBの共有や割り当てを、コマンドラインからポチポチと実施するのは面倒だと感じるあなたに、GUIツールをご紹介します。
こちらのツールをインストールすると、GUIでUSBの共有、割り当てなどの操作ができます。
まとめ
#VSCode+WSL+PlatformIO だけですべてを完結したかったのですが、USBデバイスの操作をするために、一部ではありますが Windowsにアプリのインストールが必要になってしまいました。
ただ、usbipd-win はマイクロソフトのサイトでも紹介されているアプリので、そこは取り敢えずは良しとしましょう。
これでホストPCを汚さずに WSL上のUbuntu で組み込みソフトウェアを開発していく環境ができました。
今後も いろいろな組み込みデバイスの開発環境を紹介していきたいと思います。