0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【RaspberryPipicoW】WSL2から操作するラズパイピコをC++で。セットアップ編

Last updated at Posted at 2025-12-01

はじめに

大学の提出物が一通り終わって暇を持て余し、勢いで 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です。
bash
$ sudo apt update
$ sudo apt install code

VSCodeについては拡張機能をインストールすることが必要です。拡張機能Raspberry Pi Picoをインストールしてください。

image.png

次に、(これはお好みですが)raspberry piプロジェクトをまとめるraspフォルダを作成した方が良いと思います(名は自由です)。
私は/projects/rasp/というフォルダを作成しました。

左上のフォルダーを開くから作成した作業フォルダへ入っておきましょう。

初期設定

依存関係をインストール

Ubuntu内の任意のターミナルで以下をインストールします。これらは基本的に依存関係にあるソフトウェアは以下です。

  • Python 3.9以降
  • Git
  • Tar
  • C/C++のコンパイラ(GCC)
bash
$sudo apt install python3 git tar build-essential

デモプロジェクトを作成

今回は所謂Lチカというものを試し、正常にピコの方に命令ファイルをおくることができているかのチェックを行います。

先ほど拡張機能をインストールしたことによって、VSCodeのサイドバーにラズベリーパイのアイコンとピコの基盤のアイコンの2つが現れたかと思います。2つはそれぞれMicroPico Device Cntroller, Raspberry Pi Pico Projectというラベル付けされています。

image.png

このうち、下の基板アイコンの機能を利用します。アイコンを押下してください。

image.png

このようにクイックアクセスに様々な項目が確認できるでしょうか。

この中からNew Project from Examplesを選びましょう。

次に、以下の画像のように項目を埋めます。

image.png

  • 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

image.png

この2つのボタンと
ウィンドウの右下に

image.png

2つのボタンがあることを確認してください。どちらかあれば問題ありません。

動かしてみる

上に示した2つのボタンによってCompileRunができるようになっています。
それでは動かしてみましょう。
まずは、Compileを押下してください。

bash
 *  実行するタスク: /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
 *  ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。 

新しいターミナルが開き、実行が成功するはずです。

ここで実行が失敗する方は、デモファイルを作成する際、ボードの種類を設定し間違えた可能性が高いです。
image.png
画像のBoard:pico_wなどがご使用されている機器と一致しているか再度確認してください。

次に、Runを押下してください。

bash
 *  実行するタスク: /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を管理者権限で起動した後

powershell
winget install usbipd

を実行し、usbipd-winをインストールします。

次に、

powershell
usbipd list

とコマンドを打つとPCが認識しているデバイスの一覧が表示され、

powershell
Connected:
BUSID  VID:PID    DEVICE                                                        STATE
1-1    2e8a:0003  USB 大容量記憶装置, RP2 Boot                                  Shared

のようにあればOKです。

WSLにラズパイピコを認識させる

ではもう一度Runを押下してみましょう。

bash
 *  実行するタスク: /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ボタンを押しながら再度接続するようにしてください。

powershell
usbipd list

すると、一覧に2e8a:0003のようなデバイスがあるはずです。

powershell(再掲)
Connected:
BUSID  VID:PID    DEVICE                                                        STATE
1-1    2e8a:0003  USB 大容量記憶装置, RP2 Boot                                  Shared

この左側のBUSID、ここでは1-1を確認しましょう。
次に、WSLにアタッチします。

powershell
usbipd attach --wsl --busid <確認したBUSID>

例:usbipd attach --wsl --busid 1-1

powershell(出力)
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共有用のドライバに置き換える操作がまず必要らしいです。

powershell
usbipd bind --busid 1-1

この操作によってWSL側でピコが見えるようになったはずです。確認してみましょう。

bash
$ 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)を行うと

bash
 *  実行するタスク: /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ルールをという設定ファイルを作成します。

bash
sudo nano /etc/udev/rules.d/99-pico.rules

開いた画面に以下のテキストを貼り付けます。

/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で保存できます。
この設定を反映させます。

bash
sudo udevadm control --reload-rules
sudo udevadm trigger

これでVSCodeがピコにsudoなしでアクセスできるようになりました。

Runを押してみましょう。
すると今度は

bash
 *  実行するタスク: /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が点滅するはずです!

PXL_20251201_155216899.jpg

お疲れさまでした!

2回目以降に実施するべきルーティン(保存版)

ピコを接続するために様々な作業を行いましたが、正しく接続するためには毎回行わなければならない作業があります。
慣れればルーティン化されて面倒ではなくなるはずなので耐えましょう。

全てはWSLから動かそうとするお前が悪い!!!

以下、手順です。

  1. PicoをBOOTSELモードにする
    • USBを抜いた後、ボタンを押しながら挿入
  2. Windows側でバスIDを確認
    • Windows PowerShellを管理者で実行し、usbipd listを実行
    • 2e8a:0003のBUSIDを確認
  3. WSLにアタッチ
    • PowerShellでusbipd attach --wsl --busid <BUSID>を実行
  4. 確認
    • WSL側でlsusbを実行し、Raspberry Piが含まれているか確認
  5. VSCodeRun
    • 正しく動作してhappy end

まとめ

​手順通りに進めることで、無事にLチカを成功させることができました。

​「WSLからUSBデバイスを扱う」という点さえクリアしてしまえば、windowsから操作するとは違い、使い慣れたLinuxコマンドやGitコマンドを使用することができ、結果的にとても快適な開発環境になります。

まずは第一歩クリアです。環境構築は終わったので、次は何を作ろうか考えつつ、また何かあれば備忘録として残そうと思います。

補遺

1. USBを繋ぎなおさなくてもよい方法

プロジェクト内のCMakeLists.txtを開き、以下の行を追加する。

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)

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?