このセクションでは、WindowsにPicoのプログラムがC/C++で作成できる環境を作成する方法を見ていきます。
C/C++言語を使ったPicoプログラムはLinuxやmacOS、Windowsで作成できるのですが、その開発環境作りは、Raspberry Pi OS -> Linux -> macOS -> Windows の順で難度が増すようです。
ちなみにRaspberry Pi OSは、Raspberry Pi 4や3などのいわゆるシングルボードコンピュータで動作するOSで、Linuxの一種です。イギリスにRaspberry Pi 4などのコンピュータを開発しているラズベリーパイ財団という団体があり、Raspberry Pi Picoもラズベリーパイ財団が開発した製品の1つです。
最もやっかいなWindowsでの環境作りは「Pico Setup for Windows」という名前のGitHubプロジェクトで公開されている設定アプリを使うと、自動的に一切を完了させてくれます。以下は、「Pico Setup for Windows」プロジェクトページに書かれている説明文の翻訳です。
Pico Setup for Windowsが設定できると、Visual Studio CodeでC/C++によるPicoプログラムの開発環境を手に入れることができます。ただし、いかにも簡単そうに書かれていますが、道を1つそれると元に戻るのはなかなかやっかいです。
なお、Pico Setup for Windowsをインストールする前に、「Git for Windows」をインストールしてGitHubのメンバー登録を済ませておいた方が(おそらく)よいと思います。
Pico Setup for Windows
ツールのインストール
最新リリースをダウンロードして実行します(pico-setup-windows-x64-standalone.exeがダウンロードされる)。
Visual Studio Codeの起動
[スタート]メニューで、Raspberry Pi Pico SDK フォルダにある[Pico – Visual Studio Code]ショートカットを探します。ショートカットは必要な環境変数を設定し、Visual Studio Code を起動します。
サンプルを開く
[スタート]メニューのショートカットを使って、初めてVisual Studio Codeを起動すると、pico-examples リポジトリが開きます。
後からサンプルリポジトリを再度開くには、C:\ProgramData\Raspberry Pi\Pico SDK \pico-examples にインストールされているコピーを開きます。
サンプルのビルド
Visual Studio Codeは、pico-examplesプロジェクトが初めて開かれたとき、それを構成するかどうかを聞いてくるので、[YES]をクリックして続行します(見逃した場合は、右下の[ベル]アイコン(通知)を探してください)。すると、キットの選択が求められるので、[Pico ARM GCC – Pico SDK Toolchain with GCC arm-none-eabi]項目を選択します。[Pico ARM GCC]項目がない場合は、SDKが自動でコンパイラを検出する[Unspecified]を選択します。
1つのサンプルをビルドするには、サイドバーの[CMake] ボタンをクリックします。すると、サンプルプロジェクトのツリービューが表示されるので、ビルドしたいプロジェクトを展開し、ターゲット名の右にある小さなビルド アイコンをクリックして、そのプロジェクトをビルドします。
全部のプロジェクトをビルドするには、[CMake Project Outline]ビューの上部にある[Build All Projects]ボタンをクリックします。
サンプルのデバッグ
pico-examplesリポジトリには、Visual Studio Codeでのデバッグ用に構成された .vscode\*.json ファイルが付属しています。これらのファイルを自分のプロジェクトにコピーすることもできます。
サンプルのデバッグを始めるには、サイドバーの [実行とデバッグ]ボタンをクリックします。[Pico Debug] 起動構成がすでに選択されているはずです。デバッグを開始するには、デバッグウィンドウ上部にある小さな “再生”アイコンをクリックするか、F5 キーを押します。
デバッグを初めて開始すると、ターゲットの選択が求められます。後で起動ターゲットを変更したい場合は、ターゲットの名前が表示されたステータスバーボタンで変更できます。
Picoprobeが構成され、ターゲットデバイスへの接続が終わっていると仮定した場合、選択したターゲットがビルド、アップロードされ、スタートします。デバッガーインターフェイスが読み込まれ、main()エントリポイントで、コードの実行が一時停止されます。
この時点で、通常のデバッグツールを使って、ステップ実行やブレークポイントの設定、メモリの検査などを行うことができます。
PicoprobeへのSWDとUARTの配線
Picoprobeの配線は、「Getting started」ドキュメントの付録A「Picoprobeの使用」の「Picoprobeの配線」で説明されています。
Picoprobeとして使用されるRaspberry Pi Picoボードは、Picoprobeリリースで最新の picoprobe.uf2ビルドでフラッシュする必要があります。SDKインストーラに含まれるOpenOCDビルドは、PicoprobeのCMSIS-DAPバージョンのみをサポートします。
VSCodeでシリアルモニターを開く
SDK インストーラは、Visual Studio CodeにSerial Monitor拡張機能を追加します。 Picoprobe にはUSBシリアルブリッジも含まれています。前述したように、ターゲットのTXとRXピンをPicoprobeに配線していると仮定すると、下部パネルの [シリアルモニター]タブに [COMn – USBシリアルデバイス (COMn)] を選択するオプションがあるはずです。
ボーレートはほとんどの場合、デフォルトの 115200 に設定すべきです。[監視の開始]をクリックして、シリアル ポートを開きます。
コマンドラインの使用
コマンドラインツールを使ってプロジェクトをビルド、デバッグするには、[スタート]メニューの[Pico – Developer Command Prompt]か[Pico – Developer PowerShell]を使ってターミナルウィンドウを開きます。
OpenOCDとgdbの起動
openocd -f interface/cmsis-dap.cfg -f target/rp2040.cfg -c "adapter speed 5000"
コマンドラインからgdbを実行したい場合は、次のように呼び出します。
arm-none-eabi-gdb
たとえば、hello_serialサンプルをロードしてデバッグするには、次のようにします(上記のように OpenOCDが実行済みだと仮定して)。
cd ${env:PICO_EXAMPLES_PATH}\build\hello_world\serial\ arm-none-eabi-gdb hello_serial.elf # hello_serial.elf is built at SDK install time by pico-setup.cmd
そしてgdbの中で、
(gdb) target remote localhost:3333 (gdb) load (gdb) monitor reset init (gdb) continue
新しいプロジェクトの作成
以下はPowerShell用のコマンドです。コマンドプロンプトを使用する場合は、少し変える必要があります。
- SDKからcmakeをプロジェクトディレクトリにコピーします。
- SDKのサンプルからVS Codeの構成ファイルをプロジェクトディレクトリにをコピーします。
- CMakeLists.txtを次のように設定します。
- コードを記述します(詳細はpico-examplesやRaspberry Pi Pico C/C++ SDK ドキュメントを参照してください)。
最も簡単なのは、1つのソースファイルです(例: hello_world.c)。 - [スタート]メニューの[Pico – Visual Studio Code]ショートカットからVS Codeを起動し、新しいプロジェクトフォルダを開きます。
- VS CodeのコマンドパレットからCMake: Configureコマンドを実行して、プロジェクトを構成します。
- 前述したように、プロジェクトをビルドしてデバッグします。
copy ${env:PICO_SDK_PATH}\external\pico_sdk_import.cmake .
copy ${env:PICO_EXAMPLES_PATH}\.vscode .
cmake_minimum_required(VERSION 3.13) # initialize the SDK based on PICO_SDK_PATH # note: this must happen before project() include(pico_sdk_import.cmake) project(my_project) # initialize the Raspberry Pi Pico SDK pico_sdk_init() # rest of your project
#include#include "pico/stdlib.h" int main() { setup_default_uart(); printf("Hello, world!\n"); return 0; }
CMakeLists.txt に以下を追加します。
add_executable(hello_world hello_world.c ) # Add pico_stdlib library which aggregates commonly used features target_link_libraries(hello_world pico_stdlib) # create map/bin/hex/uf2 file in addition to ELF. pico_add_extra_outputs(hello_world)
この例では、stdout にデフォルトのUARTを使用していることに注目してください。デフォルトの USB を使用する場合は、hello-usbサンプルを参照してください。
アンインストール
Windows設定の[アプリと機能]を開き、[Raspberry Pi Pico SDK <バージョン>] を選択し、[アンインストール] ボタンをクリックして指示にしたがいます。