3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

RaspberryPi Pico W 開発環境を Ubuntuで構築する

Last updated at Posted at 2024-03-06

 前々回の投稿「RaspberryPi Pico の開発環境を Ubuntu と RaspberryPi 4 で構築する」で、Raspberry Pi 4 に Raspberry Pi Pico の開発環境を構築する方法を紹介しました。
RaspberryPi Pico の開発環境を Ubuntu と RaspberryPi 4 で構築する (Qiita@pipito-yukio)

 実際に Raspberry Pi 4 上の開発環境で各種センサーのアプリを作成・ビルドしてみるとあまりパフォーマンスが良くないなと感じました。そこで今回は Ubuntu PCに開発環境を構築する方法を解説します。
 Ubuntu PCを選択した理由は、Windows PC に比べ遥かに環境構築が簡単なことです。

以降 Raspberry Pi 4 はラズパイ4、Raspberry Pi Pico は ラズパイ Pico として説明します。

問題点

  • ローカルPCのVSCodeからラズパイ4のVSCodeへの接続にそこそこ時間がかかる
  • ソースコードの反映(保存)に若干時間がかかる
  • SDカードの破損等の懸念

環境構築手順

(1) 開発環境のみの構築でデバック環境は以下の理由により対象外とします。
 ※ラズパイPicoを2台揃えるか、Raspberry Pi デバッグプローブなど別途必要になる為
(2) extrasplayground もインストール対象外とします。
Interface - CQ出版: Pico用USBプログラミング 環境の構築 (PDF)
raspberrypi/pico-extras
raspberrypi/pico-playground
 ※1 ラズパイPicoの開発環境ではセットアップで同時にビルドされている
 ※2 ビルドするのであればセットアップスクリプト pico_setup.sh を確認してください。

  • OS: Ubuntu 22.04
    • Gitがインストール済み
    • ラズパイPicoSDKとサンプルの取得
    • ラズパイOS向けArm用のツールチェーン、ビルドツールのインストール
    • VSCode がインストール済み
      • Microsoft C/C++ Extension Pack のインストール
      • Micfosoft CMake Tools のインストール

参考ドキュメント

書籍

日本語で解説されている書籍は重要な情報源。特にこの書籍は様々な環境構築に詳しいです。

  • ラズベリー・パイ Pico/Pico W 攻略本 [CQ出版株式会社]
    ISBN978-4-7898-4477-2 (2023 年 6 月 1日 第2版発行)
    • 第2章 開発環境2 … PCだけで Picoをプログラミング

公式ドキュメント

英語ながら裏付けは本家公式ドキュメント

ローカルPCの環境構築

1. ラズパイPico開発用ソースの取得

下記のディレクトリ構成でソースを取得する

~/pico/
  pico-sdk/
  pico-examples/

公式ドキュメント [2.1 Get the SDK and examples]

(1) SDKの取得

$ cd ~/pico
$ git clone https://github.com/raspberrypi/pico-sdk.git --branch master

(1)-b. SDKのサブモジュール(lib)の初期化と最新のコミットで更新
btstack, cyw43-driver, lwip, mbedtls, tinyusb

$ cd pico-sdk
$ git submodule update --init

(2) サンプルの取得

1つ上の階層に戻って実行

$ cd ../
$ git clone https://github.com/raspberrypi/pico-examples.git --branch master

2. ツールチェーンのインストール

公式ドキュメント [2.2 Install the Toolchain] の例をそのまま実行

(1) パッケージ情報の更新

$ sudo apt update

(2) ツールチェーンとビルドツールのインストール

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

※1 build-essential は pythonをソースコードからビルドしている場合はすでにインストール済みです。
※2 ラズパイOSのpythonと UbuntuOSのpythonのバージョンは通常異なります。ラズパイOSのpython向けのアプリをローカルPCで作成する場合はソースコードからpythonをビルドすることが必要になります。
※3 pythonをソースコードからビルドする方法については下記Qiita投稿をご覧ください。
Ubuntu環境 Raspberry Pi のpythonアプリ用にpythonをソースコードからビルドする

3. ユーザーの環境変数編集

下記の環境変数を .bashrc に追加していたほうが後々の作業が楽になります。

  • 環境変数 PICO_SDK_PATH.bashrc に追加する
  • 環境変数を反映させる
$ cd ~
$ echo "export PICO_SDK_PATH=$HOME/pico/pico-sdk" >> ~/.bashrc
$ . ~/.bashrc

4.サンプルのビルド

4-1. cmake プリプロセス実行

  • サンプルのディレクトリ直下に build ディレクトリを作成
  • cmake プロプロセスオプションの設定
    • PICO_BOARD=pico_w
      ※ラズパイPico W を使う場合は必須
    • CMAKE_BUILD_TYPE=Release
      ※今回はデバックしないため指定。デフォルトはDebug
$ cd ~/pico/pico-examples
$ mkdir build
$ cd build
$ cmake .. -DPICO_BOARD=pico_w -DCMAKE_BUILD_TYPE=Release

下記のように出力されたらOKです。

pico-extraspico-playground がセットアップされていないので、 xxxx submodule unavailable 等が出力されますが問題ありません。

-- Configuring done
-- Generating done
-- Build files have been written to: /home/yukio/pico/pico-examples/build

4-2. 点滅サンプルビルド (Pico W用)

Pico W 用の点滅サンプルは build/pico_w/wifi/blink に有ります

$ cd pico_w/wifi/blink/
$ make -j4

最終的に下記のように出力されたらOKです。※ビルド途中のコンソール出力は割愛します。

[100%] Linking CXX executable picow_blink.elf
[100%] Built target picow_blink

一番最後のファイル picow_blink.uf2 を ラズパイPico W にコピーします

$ ls -lrt --time-style long-iso
合計 2888
-rw-rw-r-- 1 yukio yukio 143489 2024-03-06 15:34 Makefile
-rw-rw-r-- 1 yukio yukio   1154 2024-03-06 15:34 cmake_install.cmake
drwxrwxr-x 3 yukio yukio   4096 2024-03-06 15:34 CMakeFiles
-rw-rw-r-- 1 yukio yukio 275655 2024-03-06 15:45 picow_blink.elf.map
-rwxrwxr-x 1 yukio yukio 307260 2024-03-06 15:45 picow_blink.elf
-rw-rw-r-- 1 yukio yukio 740861 2024-03-06 15:45 picow_blink.hex
-rwxrwxr-x 1 yukio yukio 263368 2024-03-06 15:45 picow_blink.bin
-rw-rw-r-- 1 yukio yukio 672446 2024-03-06 15:45 picow_blink.dis
-rw-rw-r-- 1 yukio yukio 526848 2024-03-06 15:45 picow_blink.uf2

4-3. ラズパイPico W の接続

  • [BOOTSEL] ボタンを押しながら ラズパイPicoとPCをUSBケーブルで接続
    ※SCSI ドイラブとして認識されています ※SDカードと同じ扱い
$ lsusb | grep RP2
Bus 004 Device 004: ID 2e8a:0003 Raspberry Pi RP2 Boot
$ sudo dmesg | tail | grep RP2
[ 4965.945223] scsi 7:0:0:0: Direct-Access  RPI  RP2          3    PQ: 0 ANSI: 2
$ ls -l /media/yukio/RPI-RP2/
合計 8
-r--r--r-- 1 yukio yukio 241  9月  6  2008 INDEX.HTM
-r--r--r-- 1 yukio yukio  62  9月  6  2008 INFO_UF2.TXT

4-4. ラズパイPico W で実行

  • picow_blink.uf2 をマウント先にコピー
    ※1 コピーが完了すると(数秒かかります)、自動でラズパイPico W がアンマウントされ内蔵のLEDが点滅します。
    ※2 マウント先を開いてバイナリをドラック&コピーすることもできます
$ cp picow_blink.uf2 /media/yukio/RPI-RP2/

Dell_t7500_to_pico_connect.jpg

5.VSCodeの設定

サンプルプロジェクトを初めて開くと下記のような[キットのスキャン]プロンプトが開きます

  • 下記コンパイラーを選択
    GCC 10.3.1 arm-none-eabi コンパイラ C =/usr/bin/arm-none-eabi-gcc, CXX=/usr/bin/arm-none-eabi-g++

VSCode_0_setCompilor_0.png

選択後 cmakeが実行され、buildディレクトリにビルド用(make)のファイル群が作成されます。

この状態でソースコードを開くとインクルードが波線のエラーになっています。

VSCode_2_picow_blink_error.png

このエラーを解消するには手動でクロスコンパイラの設定を追加する必要があります。
c_cpp_properties.json
公式ドキュメント Visual Studio Code: Docs > C++ > IntelliSense for cross-compiling

更に上記ファイルのインクルードパスにラズパイPico SDKの環境変数を追加する必要があります。
c_cpp_properties.json support for environment variables defined in ~/.bashrc used in "includePath" and "compilerPath" #11186

 クロスコンパイラのインテリセンス設定ファイルを新規作成し、ラズパイPico SDKの環境変数を追加する。

.vscode/c_cpp_porperties.json
{
  "configurations": [
    {
       "name": "Linux",
       "includePath": [
           "${workspaceFolder}/**",
           "${env:PICO_SDK_PATH}/**"
       ],
      "defines": [],
      "compilerPath": "/usr/bin/arm-none-eabi-g++",
      "cStandard": "c11",
      "cppStandard": "c++14",
      "IntelliSenseMode": "linux-gcc-arm"
    }
  ],
  "version": 4
}

作成したファイルを保存すると下記画面のような構成の変更ログが出力されます。

VSCode_9_manulaCreateC_CPP_props.png

更にラズパイPico W 用に cmake コマンドを再実行する必要があります。
※1 キットの選択後に実行されるcmakeのターゲットはデフォルトで ラズパイPico用です。
※2 VSCodeのターミナルから実行できます。

yukio@Dell-T7500:~/pico/pico-examples/build$ cmake .. -DPICO_BOARD=pico_w -DCMAKE_BUILD_TYPE=Release
PICO_SDK_PATH is /home/yukio/pico/pico-sdk
PICO platform is rp2040.
Build type is Release
PICO target board is pico_w.
Using CMake board configuration from /home/yukio/pico/pico-sdk/src/boards/pico_w.cmake
Using board configuration from /home/yukio/pico/pico-sdk/src/boards/include/boards/pico_w.h
TinyUSB available at /home/yukio/pico/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; enabling build support for USB.
BTstack available at /home/yukio/pico/pico-sdk/lib/btstack
cyw43-driver available at /home/yukio/pico/pico-sdk/lib/cyw43-driver
Pico W Bluetooth build support available.
lwIP available at /home/yukio/pico/pico-sdk/lib/lwip
Pico W Wi-Fi build support available.
mbedtls available at /home/yukio/pico/pico-sdk/lib/mbedtls
Skipping some Pico W examples as WIFI_SSID is not defined
Skipping some Pico W BTstack examples that require pico-extras
Adding 19 BTstack examples of type 'background'
Skipping TinyUSB dual examples, as TinyUSB hw/mcu/raspberry_pi/Pico-PIO-USB submodule unavailable
-- Configuring done
-- Generating done
-- Build files have been written to: /home/yukio/pico/pico-examples/build

 これでラズパイPico W 用のソースのインテリセンスが有効になり、ヘッダーファイルも開けるようになります。

VSCode_3_includeOK.png

ヘッダーは settings.json に追加されます。

.vscoce/settings.json
{
   "files.associations": {
      "stdlib.h": "c",
      "cyw43_arch.h": "c"
   }
}

最後に

 前々回はラズパイ4上で稼働するVSCodeをリモートから開いてビルドしていましたが、今回ホストPCのVSCodeから直接コードの作成・編集・ビルド・ターゲットへの投入ができるようになり格段に作業が捗るようになりました。

参考までにインクルードパスとCMakeToolsキャッシュを下記に示します。

(1) コンパイラーのインクルードパス: /usr/include/newlib/

stdio.h
string.h
math.h
...

(2) ラズパイPico SDK のインクルードバス
$PICO_SDK_PATH/src/common/pico_stdlib/include/

pico/
  stdlib.h
  binary_info.h
hardware/
  gpio.h
  adc.h
  spi.h

(3) CMakeToolsキャッシュディレクトリ

 もしキットの選択を誤った場合は下記ファイルを削除すると、再度キットの選択プロンプトが表示されるのでやり直すことが出来ます。

~/.local/share/CMakeTools
※これは私のUbuntu-22.04 環境の内容

cmake-tools-kits.json
[
  {
    "name": "GCC 10.3.1 arm-none-eabi",
    "compilers": {
      "C": "/usr/bin/arm-none-eabi-gcc",
      "CXX": "/usr/bin/arm-none-eabi-g++"
    },
    "isTrusted": true
  },
  {
    "name": "GCC 11.4.0 x86_64-linux-gnu",
    "compilers": {
      "C": "/usr/bin/gcc",
      "CXX": "/usr/bin/g++"
    },
    "isTrusted": true
  },
  {
    "name": "GCC 12.3.0 x86_64-linux-gnu",
    "compilers": {
      "C": "/usr/bin/gcc-12"
    },
    "isTrusted": true
  },
  {
    "name": "GCC 9.5.0 x86_64-linux-gnu",
    "compilers": {
      "C": "/usr/bin/gcc-9"
    },
    "isTrusted": true
  }
]
3
1
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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?