Raspberry Pi PICOの開発環境設定 - Windows -

WindowsでRaspberry Pi Picoの開発環境を設定します。Windowsの場合、アプリケーションを起動するだけで、環境を(ほとんど)設定することができます。 まず、 Githibのndabas/pico-setup-windows からpico-setup-windows-x64-standalone.exeをダウンロードします。以下のReadmeからクリックすることでダウンロードが始まります。

ダウンロードしましたpico-setup-windows-x64-standalone.exeをダブルクリックすると、 以下の注意喚起が表示されますので。詳細情報をクリックします。

以下の画面が表示されますので実行をクリックします。

SDKのインストールが始まりますので、NEXTを押します。

インストール先のフォルダは変更せず、Installを押します。

インストールが終わると、pico-exampleなどのインストールが行われますので、赤線のインストール先のフォルダーを指定します。 ここでは、Documents/picoとしています。Finishを押します。

pico-example.zipがDocuments/picoに展開されます。

ここまでで、Documents/picoに以下のようなフォルダーが展開されているはずです。

Documents
  |- pico
      |- pico-examples
      |- pico-extras
      |- pico-play-ground
Visual Studio 2022のインストール

Visual Studio 2022付属のnmakeを使いたいのでVisual Studio 2022 Communityをインストールします。 https://visualstudio.microsoft.com/ja/vs/community/から VisualStudioSetup.exeをダウンロードして、これを実行します。

「C++によるデスクトップ開発」にチェックを入れてインストールします、





環境変数の設定

pico-setup-windowsを使ってインストールし、アプリケーションを利用すると環境設定は必要ありません。

SDKの場所を環境変数に設定します。

> SETX PICO_SDK_PATH "c:\Program Files\Raspberry Pi\Pico SDK v1.5.1\pico-sdk"
Pico-Developer PowerShell

私はLinuxのコマンドを使いたいので、Pico-Developer PowerShellを使います。Windowsのコマンドを使いたい場合は Pico-Developer Command Promptを使います。



pico-exampleのコンパイル

まず、pico-exampleをコンパイルしてみます。pico-exampleが以下のようにインストールされているとします。

コンパイルを行うにはcmakenmakeを使います。nmakeはVisual Studioに含まれているコマンドラインツールです。

ディレクトリをpico-exampleを保存した場所へ移動します。

C:cd C:\Users\Documents\pico\pico-example
C:\Users\Documents\pico\pico-example >

pico-example のフォルダーに buildフォルダーを作成し、移動します。

C:\Users\Documents\pico\pico-example> mkdir build
C:\Users\Documents\pico\pico-example> cd build

cmakeを実行します。

C:\Users\user\Documents\pico\pico-examples\build>cmake -G "NMake Makefiles" ..
Using PICO_SDK_PATH from environment ('c:\Program Files\Raspberry Pi\Pico SDK v1.5.1\pico-sdk')
PICO_SDK_PATH is C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
-- Defaulting build type to 'Release' since not specified.
PICO compiler is pico_arm_gcc
-- The C compiler identification is GNU 10.3.1
-- The CXX compiler identification is GNU 10.3.1
-- The ASM compiler identification is GNU
-- Found assembler: C:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2021.10/bin/arm-none-eabi-gcc.exe
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2021.10/bin/arm-none-eabi-gcc.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/GNU Arm Embedded Toolchain/10 2021.10/bin/arm-none-eabi-g++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
Build type is Release
Defaulting PICO target board to pico since not specified.
Using board configuration from C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk/src/boards/include/boards/pico.h
-- Found Python3: C:/Users/user/AppData/Local/Programs/Python/Python38/python.exe (found version "3.8.10") found components: Interpreter
TinyUSB available at C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; enabling build support for USB.
BTstack available at C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk/lib/btstack
cyw43-driver available at C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk/lib/cyw43-driver
Pico W Bluetooth build support available.
lwIP available at C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk/lib/lwip
mbedtls available at C:/Program Files/Raspberry Pi/Pico SDK v1.5.1/pico-sdk/lib/mbedtls
-- Configuring done (27.2s)
-- Generating done (39.9s)
-- Build files have been written to: C:/Users/user/Documents/pico/pico-examples/build

nmakeでコンパイルが始まります。

C:\Users\user\Documents\pico\pico-examples\build>nmake

Microsoft(R) Program Maintenance Utility Version 14.32.31332.0
Copyright (C) Microsoft Corporation.  All rights reserved.
          
[  0%] Building ASM object pico-sdk/src/rp2_common/boot_stage2/CMakeFiles/bs2_default.dir/compile_time_choice.S.obj
[  0%] Linking ASM executable bs2_default.elf
[  0%] Built target bs2_default
[  0%] Generating bs2_default.bin
[  0%] Generating bs2_default_padded_checksummed.S
[  0%] Built target bs2_default_padded_checksummed_asm
[  0%] Building C object blink/CMakeFiles/blink.dir/blink.c.obj
[  0%] Building C object blink/CMakeFiles/blink.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_stdlib/stdlib.c.obj
[  0%] Building C object blink/CMakeFiles/blink.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/hardware_gpio/gpio.c.obj
[  0%] Building C object blink/CMakeFiles/blink.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_platform/platform.c.obj
...
...
(略)
...
...
[100%] Building ASM object watchdog/hello_watchdog/CMakeFiles/hello_watchdog.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_float/float_v1_rom_shim.S.obj
[100%] Building C object watchdog/hello_watchdog/CMakeFiles/hello_watchdog.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_malloc/pico_malloc.c.obj
[100%] Building ASM object watchdog/hello_watchdog/CMakeFiles/hello_watchdog.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_mem_ops/mem_ops_aeabi.S.obj
[100%] Building ASM object watchdog/hello_watchdog/CMakeFiles/hello_watchdog.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_standard_link/crt0.S.obj
[100%] Building CXX object watchdog/hello_watchdog/CMakeFiles/hello_watchdog.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_standard_link/new_delete.cpp.obj
[100%] Building C object watchdog/hello_watchdog/CMakeFiles/hello_watchdog.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_standard_link/binary_info.c.obj
[100%] Building C object watchdog/hello_watchdog/CMakeFiles/hello_watchdog.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_stdio/stdio.c.obj
[100%] Building C object watchdog/hello_watchdog/CMakeFiles/hello_watchdog.dir/C_/Program_Files/Raspberry_Pi/Pico_SDK_v1.5.1/pico-sdk/src/rp2_common/pico_stdio_uart/stdio_uart.c.obj
[100%] Linking CXX executable hello_watchdog.elf
[100%] Built target hello_watchdog

コンパイルが終わるとbuildフォルダの下に、exampleをコンパイルした結果が書き込まれています。

buildフォルダーの位置を変更

buildフォルダーを、pico-examplesと同じディレクトリに作成したとします。

  Documents
    |- pico
        |- pico-examples
        |- pico-extras
        |- pico-play-ground
        |- build

この場合、cmakeのコマンドは以下のようになります。

C:\Users\user\Documents\pico\build> cmake -G "NMake Makefiles" ..\pico-example
*
midi_testのコンパイル

PICOでMIDIを扱うサンプルプログラムは %PICO_SDK_PATH%¥lib¥tinyusb¥examples¥device¥midi_testにあります。 このmidi_testフォルダーをpico¥pico-workにコピーしています。

cd C:\Users\user\Documents\pico
C:\Users\user\Documents\pico> mkdir pico-work
C:\Users\user\Documents\pico> cd pico-work
C:\Users\user\Documents\pico\pico-work> xcopy ”%PICO_SDK_PATH%¥lib¥tinyusb¥examples¥device¥midi_test" midi_test /s/i

もう1つ、pico-examplesからpico_sdk_import.cmakeをmidi_testの下にコピーします。

  C:\Users\user\Documents\pico\pico-work> copy ../poco-examples/pico_sdk_import.cmake midi_test

midi_testのフォルダにある、CMakeLists.txtを以下に置き換えます。

          cmake_minimum_required(VERSION 3.5)
          set(FAMILY rp2040) 
        
          include($ENV{PICO_SDK_PATH}/lib/tinyusb/hw/bsp/family_support.cmake)
          include(pico_sdk_import.cmake)
        
          family_get_project_name(PROJECT ${CMAKE_CURRENT_LIST_DIR})
          
          project(${PROJECT})
          set(CMAKE_C_STANDARD 11)
          set(CMAKE_CXX_STANDARD 17)
          set(PICO_EXAMPLE_PATH $ENV{PICO_EXAMPLE_PATH})
          
          add_executable(${PROJECT})
          family_initialize_project(${PROJECT} ${CMAKE_CURRENT_LIST_DIR})
          
          target_sources(${PROJECT} PUBLIC
                  ${CMAKE_CURRENT_SOURCE_DIR}/src/main.c
                  ${CMAKE_CURRENT_SOURCE_DIR}/src/usb_descriptors.c
          )
          
          target_include_directories(${PROJECT} PUBLIC
                  ${CMAKE_CURRENT_SOURCE_DIR}/src
          )
          
          family_configure_device_example(${PROJECT})

midi_testフォルダーにディレクトリを移動し、buildフォルダを作成、buildフォルダへ移動します。cmake, nmakeでビルドします。

C:\Users\user\Documents\pico\pico-work> cd midi_test
C:\Users\user\Documents\pico\pico-work\midi_test> mkdir build
C:\Users\user\Documents\pico\pico-work\midi_test> cd build
C:\Users\user\Documents\pico\pico-work\midi_test\build> cmake "NMake Makefiles" ..
C:\Users\user\Documents\pico\pico-work\midi_test\build> nmake

コンパイルが終わるとbuildフォルダの下にmidi_test.uf2ファイルができています。 このファイルをPICO(RPI-RP2)へコピーします。PICOにリセットがかかり、PICOがMIDIデバイスとして認識できるようになります。

Send And Receiveで見てみるとTinyDeviceとして認識され、Note On/Offが繰り返し出力していることを見て取れます。