Raspberry Pi PicoをWSL(Windows Subsystem for Linux)で使う


Raspberry Pi Picoを買ってみました。

環境構築の方法はGetting started with Raspberry Pi Picoに載っていますが、開発環境はRaspberry Pi 4上で構築するのが基本となっているようです。Windowsでのやり方も一応載っていますが、コマンドライン上での操作となるとWSL(Windows Subsystem for Linux)を使うのが便利なので、その方法をまとめてみました。

必要なもの

  • Raspberry Pi Pico本体 (できれば2枚)
    • 2枚あると片方をデバッグプローブにすることでJTAGデバッグが可能になるので便利です。
  • ピンヘッダ
    • Raspberry Pi Picoにはピンヘッダがマウントされていないので、ブレッドボードに挿すためのピンヘッダを別途用意して、基板にはんだ付けする必要があります。
    • Picoの基板には両側に20ピンずつ2列、あとJTAGデバッグ用に3ピン必要なので、適宜折り取って20ピンのヘッダは基板の裏面に、3ピンのヘッダは基板の表面にはんだ付けします。
  • ブレッドボード
    • Raspberry Pi Picoにいろいろ繋げて遊ぶために使います。
  • ジャンパワイヤ
    • ブレッドボード上で配線をつなげたり、後述のUSBシリアル変換アダプタをつなぐのに必要です。通常はオス~オスタイプだけあれば良いですが、他の基板やケーブルとつなぐ際にはメスが必要になることもあるので、 オス~オスタイプオス~メスタイプメス~メスタイプ を一通り揃えておけば、後で繋げるときにあれが足りない、というようなことがなくてよいと思います。
  • USBシリアル変換アダプタ
    • Raspberry Pi PicoのGPIOに出るシリアル(UART)出力をPCのターミナルソフトで見るために必要です。もちろん変換アダプタをPCにつなぐためのUSBケーブルも。

Raspberry Pi Picoにピンヘッダをはんだ付けすると、こんな感じになります。

環境構築

Windows上に以下のアプリをインストールします。

  • WSL(Windows Subsystem for Linux)
    • WSL上で動かすLinuxはUbuntu-20.04を推奨します。Ubuntu-18.04だと入っているCmakeが古いため、Pico SDKのビルドが通らないためです。
    • 既存の環境があってUbuntu-18.04を使用したい場合は、Ubuntu 18.04 に Cmake の Latest Release をインストールする などを参考にして最新のCmakeに入れ替えてやることで使えるようになるようです。
    • WSLのバージョンはWSL1でもWSL2でも構いません。ビルドの速度はWSL2の方が圧倒的に速いのですが、JTAGデバッグの準備がそこそこ面倒です(こんな感じで)。
  • USBシリアル変換アダプタのドライバ
    • 購入した変換アダプタに対応するものを使用します。 上記のリンク先にあるFTDIのチップの変換アダプタの場合はFTDI社のドライバを使用します。
  • ターミナルソフト (TeraTermなど)
    • Pico SDKのシリアル接続のデフォルトは「115,200bps 8bit パリティなし ストップビット1」なので、通信パラメータもこのように設定しておきます。
  • Visual Studio Code
    • "Remote - WSL" 機能拡張を入れておくと、WSL上のファイルもWindows上のものと同様に編集できます。

WSL上の環境構築

Getting started with Raspberry Pi PicoChapter 2. The Pico SDK に従って以下を実行します。Chapter 1. Quick Pico Setup は 開発環境にRaspberry Pi 4を使う場合の設定手順なので、実行しないように!

$ cd ~/
$ mkdir pico
$ cd pico

$ git clone -b master https://github.com/raspberrypi/pico-sdk.git
$ cd pico-sdk
$ git submodule update --init
$ cd ..
$ git clone -b master https://github.com/raspberrypi/pico-examples.git

$ sudo apt update
$ sudo apt install cmake gcc-arm-none-eabi build-essential 

(Ubuntu-18.04の場合は、最後のapt installでcmakeはインストールせずに自前でビルドします)

Pico SDKの位置を環境変数PICO_SDK_PATHに設定しておきます。.bashrcに以下の記述を追加します。

export PICO_SDK_PATH=${HOME}/pico/pico-sdk

サンプルアプリのビルドと実行

Chapter 3. Blinking an LED in C

ビルドの手順はドキュメントと全く同一です。

$ cd pico-examples
$ mkdir build
$ cd build

$ cmake ..
Using PICO_SDK_PATH from environment ('/home/xxxx/pico-sdk')
PICO SDK is located at /home/xxxx/pico/pico-sdk
  .
  .
  .
-- Build files have been written to: /home/xxxx/pico/pico-examples/build

$ cd blink
$ make -j4
Scanning dependencies of target ELF2UF2Build
Scanning dependencies of target boot_stage2_original
[ 0%] Creating directories for 'ELF2UF2Build'
  .
  .
  .
[100%] Linking CXX executable blink.elf
[100%] Built target blink

実行もドキュメントの通りです。Raspberry Pi PicoのBOOTSELボタンを押しながらPCのUSB端子に接続するとマスストレージデバイスとして認識されるので、ビルドでできたblink.uf2をドラッグ&ドロップします。
ファイルのコピーが行われると、Raspberry Pi Picoが再起動してLED点滅を始めます。

ビルド直後のコマンドラインで、

$ explorer.exe .

を実行するとそのフォルダがWindowsのエクスプローラで表示されるので便利です。

ドキュメントでは 3.2.2. Using the command line でコマンドラインでcpコマンドによって書き込む手順も紹介されていますが、WSLではこの手順はうまく動作しないようです。

(追記) WSLからPowerShellを呼び出してコマンドラインから書き込めるようにしました。【小ネタ】WSL利用時のRaspberry Pi Picoへの書き込みをコマンドラインから行う を参照してください。

Chapter 4. Saying "Hello World" in C

ビルド・実行手順はChapter 3.同様です。UART出力を見る際は 9.2.5.1. UART output を参考にして USBシリアル変換アダプタとジャンパワイヤで接続し、Windowsのターミナルソフトで見てください。