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

この記事はraspberry pi pico W攻略 Advent Calendar 2025の2日目です。

はじめに

ご覧いただきありがとうございます。これがどのような意図によって書かれているのか、どのような環境でおこなわれているかについては1日目の投稿を参照してください。

なにをするか

タイトルにあるとおり、C++のコードをラズパイピコの内部で動作させ、それの出力をWSL内のVSCodeから監視しようということをやってみます。

なるべく簡潔にまとめようと思っています。

ラズパイピコシリーズの入出力について

シリアル入力(stdin)と出力(stdout)の宛先は、シリアルUART、USB CDC(USBシリアル)、あるいはその両方を指定することができます 。
シリアルUARTコンソールの場合 入出力はデバイス上のUARTピンを経由して送信されます。デフォルトでは、出力用(UART0_TX)に Pin 1 (GP0) 、入力用(UART0_RX)に Pin 2 (GP1) が使用されます 。 この方法を使うには、「Debug Probe Wiring」の図にあるように、Pico側のUARTピンを「Debug Probe」のようなUART-USB変換器に物理的に接続する必要があります 。
USB CDCコンソールの場合 入出力はコンピュータと接続しているUSBケーブルを介して直接送受信されるため、追加の配線は一切不要です 。 ただし、Picoが再起動してからコンピュータ側がデバイスを再認識・接続するまでに1〜2秒かかる場合があるため、コードが走り始めた直後の出力(ログ)を見逃してしまう可能性があります 。
(スタートドキュメント5.1日本語訳)

つまりピン経由でも、USB経由でも出力を受け取ることができます。ただ、物理配線はだるいので、今回は既に接続しているのでUSB出力を受け取ろうと思います。

プロジェクトの作成

まずは、新しいプロジェクトをRaspberry Pi Pico Projectから作成します。New C/C++ Projectから、前回開いたような画面が得られます。Nameには自由名前を設定しましょう。私はhelloにしました。

board typeも間違えずに選び、作成するフォルダも間違えずに選択します。

image.png

Stdio supportでは、利用したい出力方法を選びます。

image.png

Createを押します。

すると、同様に新しいウィンドウが開きます。

接続する

接続方法は前回と同じで、BOOTSELモードでUSB接続するようにしてください。

実行する

初期状態で"Hello world"を出力しそうなcppファイルが入っています。これを今回動かし、その文字を見ようというわけです。

ではCompileを押します。できます。
できないならば、前回の記事を参照してください。

次にRunを押します。できます。

が、"Hello world!"の文字が確認できないはずです。

どこにあるのでしょうか?

文字を見る

ターミナルのタブには他に問題出力などがあるはずです。この右側にシリアルモニターというものがあります。ラズパイピコの拡張機能がここへつないでくれています。

モニターモード:Serial
表示モード:テキスト
ポート:/dev/ttyS0
ボーレート:115200
行の終わりなし

が私の環境の初期設定でした。今回の出力は

ボーレート:115200
ポート:/dev/ttyACM0 - Raspberry Pi

に出力されています。

よって、ポートの選択を変更すればよいのですが、そのような選択はプルダウンにはないと思います。

これは実行中のラズパイピコの名義のようなものが変更されているためです。

実行中の(BOOTSELモードでない)ラズパイピコが接続されている状態でWindows Power Shellを管理者権限で開き、usbipd listをすると、

power shell
PS C:\WINDOWS\system32> usbipd list
Connected:
BUSID  VID:PID    DEVICE                                                        STATE
1-1    2e8a:000a  USB シリアル デバイス (COM3), Reset                           Not shared
1-5    0408:5440  HP True Vision HD Camera, HP IR Camera                        Not shared
1-9    06cb:00c9  Synaptics UWP WBDI                                            Not shared
1-10   8087:0026  インテル(R) ワイヤレス Bluetooth(R)                           Not shared

Persisted:
GUID                                  DEVICE
ab8e1711-b9cd-4cf0-bd6c-aad68be73bfb  USB 大容量記憶装置, RP2 Boot

となり、BOOTSELモードのラズパイピコのPID0003だったはずが、実行中のラズパイピコのPID000aです。
よって、これに対してもattachをしたいのですが、

power shell
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.

と怒られるので、おとなしく

power shell
PS C:\WINDOWS\system32> usbipd bind --busid 1-1

としてbindしてからもう一度attachを打つと、

power shell
PS C:\WINDOWS\system32> usbipd attach --wsl --busid 1-1
usbipd: info: Using WSL distribution 'Ubuntu' to attach; the device will be available in all WSL 2 distributions.
usbipd: info: Detected networking mode 'nat'.
usbipd: info: Using IP address 192.168.160.1 to reach the host.

attachが成功します。
WSL上でもlusbを打っても確認できるはずです。

bash
oni@DESKTOP-JVSVBV8:~/projects/rasp/hello$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 010: ID 2e8a:000a Raspberry Pi Pico
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub

すると、ラズパイピコのポートが確認できるはずです。

bash
oni@DESKTOP-JVSVBV8:~/projects/rasp/hello$ ls /dev/ttyACM*
/dev/ttyACM0

ありました。

では、Runをし、その操作が成功した状態で再度、シリアルモニターを選択し、ポートのプルダウンから該当するものを選び、監視の開始を選択すると下にHello, world!が1秒ごとに出力しているのが確認できるはずです。

これで成功しました!

image.png

補足

CMakeLists.txt内にある以下のコードはそれぞれこのような意味を持っています。

  • pico_enable_stdio_uart(hello 0) → シリアルUARTコンソール(物理配線が必要な方)を無効化

  • pico_enable_stdio_usb(hello 1) → USB CDCコンソール(USBケーブル1本で済む方)を有効化

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?