はじめに
大学の提出物が一通り終わって暇を持て余し、勢いで Raspberry Pi Pico WH を購入しました。
開発環境として普段使っているWSL2を選んだのですが、USB接続周りで少し設定が必要だったので、その手順を整理しておきます。
Windows環境でわざわざWSL2経由で開発したいと思う物好きは私以外にもいるだろうと思った次第です。
基本的には自分用の備忘録という建前ですが、初心者の方にもわかるように書きました。必要な部分だけ拾って読んでいただければ幸いです。
以下の内容は公式ドキュメントに準拠しているものです。しかしながら、公式ドキュメントではもちろんWSL2で動かすことは想定されていません。追加の操作や、接続時に毎回を要求される操作も多いためひとつひとつやるべきことを初心者向けに書いてみました。
環境
- Raspberry Pi Pico W
- windows11 PC WSL2: Ubuntu 24.04.3 LTS, VSCode
- USB type-A to micro-B ケーブル (充電・通信ケーブル)
ラズパイピコ購入
購入先はお任せですが、購入する機種については注意が必要です。
ラズパイピコには主に以下のような種類があります。
| 機種名 | Wi-Fi機能 | ピンヘッダー |
|---|---|---|
| Raspberry Pi Pico | なし | なし |
| Raspberry Pi Pico W | あり | なし |
| Raspberry Pi Pico H | なし | あり |
| Raspberry Pi Pico WH | あり | あり |
私ははんだごてを持っていないのでWHを購入しました。ヘッダーピンがないと何も出来ないので、自分でピンをつけられない方はこちらを購入しましょう。
(2WHを買ったつもりだったんですが、WHを購入していたことに今、気が付きました。ガチ悔しい。ちなみに2シリーズであっても記号の位置は変わりません。)
2025年12月現在、2WHが2580円に対し、WHは2290円でした。今買うなら断然、性能の良い2の方です。値段も大して変わらないですし。
通販サイト
WSL
こちらは潤沢に資料がありますので割愛します。
単純にインストールされて操作できる状態であれば問題ありません。
私はUbuntuをインストールしています。
VSCode
インストールは他の記事か以下を参照してください。
インストール方法
以下のコードをUbuntu内の任意のターミナルで入力すればOKです。$ sudo apt update
$ sudo apt install code
VSCodeについては拡張機能をインストールすることが必要です。拡張機能Raspberry Pi Picoをインストールしてください。
次に、(これはお好みですが)raspberry piプロジェクトをまとめるraspフォルダを作成した方が良いと思います(名は自由です)。
私は/projects/rasp/というフォルダを作成しました。
左上のフォルダーを開くから作成した作業フォルダへ入っておきましょう。
初期設定
依存関係をインストール
Ubuntu内の任意のターミナルで以下をインストールします。これらは基本的に依存関係にあるソフトウェアは以下です。
- Python 3.9以降
- Git
- Tar
- C/C++のコンパイラ(GCC)
$sudo apt install python3 git tar build-essential
デモプロジェクトを作成
今回は所謂Lチカというものを試し、正常にピコの方に命令ファイルをおくることができているかのチェックを行います。
先ほど拡張機能をインストールしたことによって、VSCodeのサイドバーにラズベリーパイのアイコンとピコの基盤のアイコンの2つが現れたかと思います。2つはそれぞれMicroPico Device Cntroller, Raspberry Pi Pico Projectというラベル付けされています。
このうち、下の基板アイコンの機能を利用します。アイコンを押下してください。
このようにクイックアクセスに様々な項目が確認できるでしょうか。
この中からNew Project from Examplesを選びましょう。
次に、以下の画像のように項目を埋めます。
-
Name欄にはプルダウンからblinkを選択 -
Board Typeには自身の基板の型を選択
Pico 2を購入した場合は、Board Typeで pico2_w などを選択してください。
-
Locationには先ほどピコ用のプロジェクトフォルダを作成した場合はそのフォルダのパスを選択 - 他の項目は初期設定で良く、
Createを押下
すると、拡張機能が自動でSDKやtoolchainをダウンロードしてくれます。最初の動作には5~10分程度かかることがありますが、最初だけです。
ここでCMake Toolsの拡張機能が表示されるかもしれませんが、無視してバッテン押して大丈夫です。
(押してしまってもぶっちゃけ全く問題ないです。)
最初の動作が終わると、新しいウィンドウが/projects/rasp/blinkを開いた状態で起動します。
ここで基板アイコンの Raspberry Pi Pico Projectに
この2つのボタンと
ウィンドウの右下に
2つのボタンがあることを確認してください。どちらかあれば問題ありません。
動かしてみる
上に示した2つのボタンによってCompileとRunができるようになっています。
それでは動かしてみましょう。
まずは、Compileを押下してください。
* 実行するタスク: /home/oni/.pico-sdk/ninja/v1.12.1/ninja -C /home/oni/projects/rasp/blink/build
ninja: Entering directory `/home/oni/projects/rasp/blink/build'
[85/85] Linking CXX executable blink.elf
* ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。
新しいターミナルが開き、実行が成功するはずです。
次に、Runを押下してください。
* 実行するタスク: /home/oni/.pico-sdk/picotool/2.2.0-a4/picotool/picotool load /home/oni/projects/rasp/blink/build/blink.elf -fx
No accessible RP-series devices in BOOTSEL mode were found.
* ターミナル プロセス "/home/oni/.pico-sdk/picotool/2.2.0-a4/picotool/picotool 'load', '/home/oni/projects/rasp/blink/build/blink.elf', '-fx'" が起動に失敗しました (終了コード: 249)。
* ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。
もちろん実行は失敗するはずです。
なぜならピコを繋いでいないから
接続
ということで、準備が整いました。ついに接続しましょう。
ラズパイピコのUSB差し込み口とパソコンをケーブルで接続してください。その際、ラズパイピコの基板に付いている、BOOTSELボタンを押下しながら接続するようにしましょう。
すると、windowsにD:ドライブとして2つのファイルが入ったフォルダが自動で開いたのが確認できるはずです。
次に、WindowsからWSLへデバイスを転送するusbipd-winを設定が必須です。
まず、PowerShellを管理者権限で起動した後
winget install usbipd
を実行し、usbipd-winをインストールします。
次に、
usbipd list
とコマンドを打つとPCが認識しているデバイスの一覧が表示され、
Connected:
BUSID VID:PID DEVICE STATE
1-1 2e8a:0003 USB 大容量記憶装置, RP2 Boot Shared
のようにあればOKです。
WSLにラズパイピコを認識させる
ではもう一度Runを押下してみましょう。
* 実行するタスク: /home/oni/.pico-sdk/picotool/2.2.0-a4/picotool/picotool load /home/oni/projects/rasp/blink/build/blink.elf -fx
No accessible RP-series devices in BOOTSEL mode were found.
* ターミナル プロセス "/home/oni/.pico-sdk/picotool/2.2.0-a4/picotool/picotool 'load', '/home/oni/projects/rasp/blink/build/blink.elf', '-fx'" が起動に失敗しました (終了コード: 249)。
* ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。
当たり前ですが、初期状態であれば、標準状態のWSL2は接続されているデバイス情報を認識できません。しかしながら、VSCodeのRunボタンはWSL内のLinuxカーネルから直接USBデバイスにアクセスする必要があります。
次に、ラズパイピコがBOOTSELモードであることを確認してください。フォルダが開いていればOKです。
もしそうでない場合、BOOTSELボタンを押しながら再度接続するようにしてください。
usbipd list
すると、一覧に2e8a:0003のようなデバイスがあるはずです。
Connected:
BUSID VID:PID DEVICE STATE
1-1 2e8a:0003 USB 大容量記憶装置, RP2 Boot Shared
この左側のBUSID、ここでは1-1を確認しましょう。
次に、WSLにアタッチします。
usbipd attach --wsl --busid <確認したBUSID>
例:usbipd attach --wsl --busid 1-1
PS C:\WINDOWS\system32> usbipd attach --wsl --busid 1-1
usbipd: error: Device is not shared; run 'usbipd bind --busid 1-1' as administrator first.
エラーメッセージの通りbindというWindowsが使っている標準ドライバをWSL共有用のドライバに置き換える操作がまず必要らしいです。
usbipd bind --busid 1-1
この操作によってWSL側でピコが見えるようになったはずです。確認してみましょう。
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 2e8a:0003 Raspberry Pi RP2 Boot
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
しっかりと認識しているようです!!
Linux内で権限を設定する
しかしながら、この状態で実行(Run)を行うと
* 実行するタスク: /home/oni/.pico-sdk/picotool/2.2.0-a4/picotool/picotool load /home/oni/projects/rasp/blink/build/blink.elf -fx
No accessible RP-series devices in BOOTSEL mode were found.
but:
RP2040 device at bus 1, address 5 appears to be in BOOTSEL mode, but picotool was unable
to connect. Maybe try 'sudo' or check your permissions.
* ターミナル プロセス "/home/oni/.pico-sdk/picotool/2.2.0-a4/picotool/picotool 'load', '/home/oni/projects/rasp/blink/build/blink.elf', '-fx'" が起動に失敗しました (終了コード: 249)。
* ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。
となり、失敗します。
VSCodeの拡張機能は基本的にsudoなしでpicotoolを実行しようとしますが、デフォルトのWSLは一般ユーザがUSBデバイスを操作することは(あたりまえですが)権限不足でできないようになっています。
そこで、これを許可するudevルールをという設定ファイルを作成します。
sudo nano /etc/udev/rules.d/99-pico.rules
開いた画面に以下のテキストを貼り付けます。
# Raspberry Pi Pico (Bootloader mode)
SUBSYSTEM=="usb", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="0003", MODE="0666"
# Raspberry Pi Pico (Serial mode / USB stdio)
SUBSYSTEM=="usb", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="000a", MODE="0666"
# Raspberry Pi Pico 2 (Bootloader mode)
SUBSYSTEM=="usb", ATTRS{idVendor}=="2e8a", ATTRS{idProduct}=="000f", MODE="0666"
Ctrl+X->y->Enterで保存できます。
この設定を反映させます。
sudo udevadm control --reload-rules
sudo udevadm trigger
これでVSCodeがピコにsudoなしでアクセスできるようになりました。
Runを押してみましょう。
すると今度は
* 実行するタスク: /home/oni/.pico-sdk/picotool/2.2.0-a4/picotool/picotool load /home/oni/projects/rasp/blink/build/blink.elf -fx
Loading into Flash: [==============================] 100%
The device was rebooted to start the application.
* ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。
そして、ピコの基板についているLEDが点滅するはずです!
お疲れさまでした!
2回目以降に実施するべきルーティン(保存版)
ピコを接続するために様々な作業を行いましたが、正しく接続するためには毎回行わなければならない作業があります。
慣れればルーティン化されて面倒ではなくなるはずなので耐えましょう。
全てはWSLから動かそうとするお前が悪い!!!
以下、手順です。
- PicoをBOOTSELモードにする
- USBを抜いた後、ボタンを押しながら挿入
- Windows側でバスIDを確認
- Windows PowerShellを管理者で実行し、
usbipd listを実行 -
2e8a:0003のBUSIDを確認
- Windows PowerShellを管理者で実行し、
- WSLにアタッチ
- PowerShellで
usbipd attach --wsl --busid <BUSID>を実行
- PowerShellで
- 確認
- WSL側で
lsusbを実行し、Raspberry Piが含まれているか確認
- WSL側で
- VSCode
Run- 正しく動作してhappy end
まとめ
手順通りに進めることで、無事にLチカを成功させることができました。
「WSLからUSBデバイスを扱う」という点さえクリアしてしまえば、windowsから操作するとは違い、使い慣れたLinuxコマンドやGitコマンドを使用することができ、結果的にとても快適な開発環境になります。
まずは第一歩クリアです。環境構築は終わったので、次は何を作ろうか考えつつ、また何かあれば備忘録として残そうと思います。
補遺
1. USBを繋ぎなおさなくてもよい方法
プロジェクト内のCMakeLists.txtを開き、以下の行を追加する。
# USB経由での通信を有効にする(これでpicotoolがPicoを再起動できるようになります)
pico_enable_stdio_usb(blink 1)
pico_enable_stdio_uart(blink 0)
この設定によって次回からはピコが動いている状態でもう一度Runを押すと、picotoolが再起動命令をピコへ送信し、ピコが自動で再起動して書き込まれることで、外す手間を省くことができるようになります。
※ WSLの場合、Picoが再起動すると接続(アタッチ)が切れてしまいます。BOOTSELボタンを押す必要はありませんが、再起動のタイミングで再度usbipd attachコマンドを実行する必要があります。
2. 類似記事
@ypsitau (Yutaka Saito)







