鳥なき里のマイコン屋(128) VS CodeでラズパイPico、プロジェクトファイル生成

Joseph Halfmoon

ビルドとデバッグ、2件のトホホを乗り越えて、ラズパイ4にリモート接続のVS Codeを使ってのラズパイPicoの開発環境整備も山は越えた?感じです。でも必要なプロジェクトファイル類、まだ手動で準備しているものが多いんでないかい。いつものことながらラズパイの中の人はそんなことお見通し、自動化ツールがありました。

ラズパイPicoの運用は3か月ほどMicroPython環境オンリでしたが、2台目Picoの到着を受けて遅ればせながらC/C++での開発環境整備に着手いたしました。ラズパイPicoの母艦にはラズパイ4であります。そしてラズパイ4にはPC上のVS Codeからリモート接続で、編集、ビルド、デバッグを行っています。ビルドデバッグでそれぞれトラブった1件があったものの、分かってしまえば何のことはありません。今やビルドもデバッグも自在。

などといいつつ、まだ手動でメンドイことをやっています。CMakeLists.txt ファイルの作成、そして VS Codeの各種設定ファイル(.json類)のコピーなど。プロジェクトを開始する度に、CmakeLists.txt ファイルを自力で書くのは辛いです(コピペした後、必要なところをチョイと変更するだけなのですけれども。)あんまり、というより全然cmake詳しくないし。VS Code関係の設定ファイルのコピーなども何気にメンドイです。さらに言えば、Picoの「充実した」SDKを使うにあたり、空白状態から書くためにはSDKのドキュメントをあちこち調べまわらないとなりません。それがまた辛い(ドキュメントくらい読めよ、自分。)

しかし何でもお見通しのラズパイの中の人は、そういった面倒な事柄を自動化してくれるツールも用意してくれていました。

Getting started with Raspberry Pi Pico

の 7.3. Automating project creation にある pico-project-generator なるPythonのスクリプト(スクリプト名はpico_project.py)です。指示に従って簡単にインストール可能でした。これを使えば

  • SDKの必要部分を使用可能な CMakeLists.txt ファイルを生成
  • SDKの必要部分のサンプルコードを含めたひな形のソースファイルも生成
  • ビルド用のフォルダもセットアップしてくれる
  • VS Code用の設定ファイルも用意してくれる(コマンドライン開発にも対応可能)

というわけです。まとめて面倒見てくれる感じ(自分が書くべき部分に集中できるというべきでしょうか。)実際にこのツールが自動生成してくれたCMakeLists.txtの例を以下に置いておきます。

# Generated Cmake Pico project file

cmake_minimum_required(VERSION 3.13)

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

# initalize pico_sdk from installed location
# (note this can come from environment, CMake cache etc)
set(PICO_SDK_PATH "/home/pi/pico/pico-sdk")

# Pull in Raspberry Pi Pico SDK (must be before project)
include(pico_sdk_import.cmake)

project(tst1 C CXX ASM)

# Initialise the Raspberry Pi Pico SDK
pico_sdk_init()

# Add executable. Default name is the project name, version 0.1

add_executable(tst1 tst1.c )

pico_set_program_name(tst1 "tst1")
pico_set_program_version(tst1 "0.1")

pico_enable_stdio_uart(tst1 0)
pico_enable_stdio_usb(tst1 1)

# Add the standard library to the build
target_link_libraries(tst1 pico_stdlib)

# Add any user requested libraries
target_link_libraries(tst1
        hardware_i2c
        )

pico_add_extra_outputs(tst1)
生成されるディレクトリ

”Getting started” の 7.3 節に書かれている例の通りにこのツールを使ってみると pico-project-generator ディレクトリの中にプロジェクトディレクトリが作られ、必要なファイルはその中にできます。個人的な趣味としては、プロジェクトディレクトリは、ホームディレクトリの傘下にある proj ディレクトリの下に並列にぶら下げていきたいです。

とりあえず pico_project.py スクリプトを proj フォルダの中に入ってから起動すれば projの下にプロジェクトディレクトリを作成してくれました。ただし、デフォルトで

pico_configs.tsv

という名の設定ファイルをカレントディレクトリの中で探すので、pico-project-generator ディレクトリの中のtsvファイルをprojにコピーして使っています。多分、スクリプトの –tsv 引数に設定ファイルへのパスを与えるか、設定ファイルのあるpico-project-generatorディレクトリの中でスクリプトを起動し、逆にプロジェクトディレクトリの方にパスを与えても動作するのだと思いますが、確かめてないです。

GUIでのプロジェクト生成

スクリプトは、コマンドラインでの操作もGUIを表示しての操作も両方可能なスタイルです。操作が分かり易いのはGUIでの設定です。リモート接続のVS Codeとは別途でラズパイ4にVNCで接続してGUIを表示しています。以下のコマンドラインでGUIを起動できます。

$ pico_project.py --gui

以下のようなウインドウが現れるので直観的に設定できます。
PicoProjGenGUI
なお、上記に掲げた私の手元の版のGUI画面は、”Getting started” の 7.3 節で示されているGUI画面と微妙に違います。上の画面の構成の方が新しいのだと思います。

VS CodeのShellからのプロジェクト生成

ただ、プロジェクト生成の度に、VS Codeから離れてVNCで接続するのも何か癪です。勿論、GUI使わなくてもコマンドラインで操作できるようになっています。VS Codeでターミナルを開いてスクリプトを走らせれば、プロジェクトディレクトリの生成が行えます。こんな感じ(最初の1行以外はスクリプトの出力。)

$ pico_project.py -x -f i2c -usb -d 0 -p vscode tst2
PICO_SDK_PATH is /home/pi/pico/pico-sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
PICO compiler is pico_arm_gcc
PICO_GCC_TRIPLE defaulted to arm-none-eabi
-- The C compiler identification is GNU 7.3.1
-- The CXX compiler identification is GNU 7.3.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
Using regular optimized debug build (set PICO_DEOPTIMIZED_DEBUG=1 to de-optimize)
Defaulting PICO target board to pico since not specified.
Using board configuration from /home/pi/pico/pico-sdk/src/boards/include/boards/pico.h
-- Found Python3: /usr/bin/python3.7 (found version "3.7.3") found components: Interpreter 
TinyUSB available at /home/pi/pico/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; adding USB support.
Compiling TinyUSB with CFG_TUSB_DEBUG=1
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) 
Using PICO_EXAMPLES_PATH from environment ('/home/pi/pico/pico-examples')
ELF2UF2 will need to be built
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pi/proj/tst2/build

設定項目が増えると引数が多くなるので、–help でオプションを確かめながら書く感じ。一長一短です。

生成されたプロジェクトディレクトリをVS Codeから開きなおせばOKです。必要なファイルを皆自動生成してくれていることが分かります。そのままビルドかけた後はこんな感じ。

VSCodeTST1AFB

問題なくビルドできるのですが、注意が一点あります。私の環境で新たに生成されたプロジェクトディレクトリをVS Codeで開いた場合、

No Kit Selected

という状態で、ツールキットが選択されていません(「トホホ」でビルド失敗していた件と同じ。)下の青いバーから No kit Selected をクリックし、メニューを引き出し、ツールチェーンであるGCC 7.3.1 arm-none-eabiを設定しないとならなかったです。うまく設定できた環境では不要な操作かもしれませんが。

これで、SDKの所望の機能をとりこんだコードをビルドできるプロジェクトディレクトリも作れるようになりました。後は実践あるのみ?

鳥なき里のマイコン屋(127) Firmataでラズパイのお供にArduino へ戻る

鳥なき里のマイコン屋(129) VS CodeでラズパイPico、SDKのTimerを使う へ進む