はじめに
Raspberry Pi Picoのプログラム制作において pico-sdkを使用して開発したいと思います。
その場合に、独自のプロジェクトを一から作る基本的な手順についてまとめておきます。
この記事は「Getting Started with Raspberry Pi Pico」(以下参考資料)の8章をほぼそのまま実行した記録です。
- はじめに
- pico-sdkとpico-examplesの準備
- サンプルソースファイルの準備
- CMakeLists.txtの準備
- pico_sdk_import.cmakeのコピー
- pico-sdkのパスの設定
- ビルド
- おわりに
pico-sdkとpico-examplesの準備
pico-sdkが必要になるので、gitから任意のディレクトリにcloneしておきます。 これらはどちらも同じディレクトリにしてください。 (gitがインストールされていることが前提になります。) サンプルプログラムがたくさん入っているpico-examplesも大変参考になるはずなので、合わせてcloneします。
この記事ではpicoという名前のディレクトリを作り、その下にcloneしました。
mkdir pico cd pico git clone https://github.com/raspberrypi/pico-sdk.git git clone https://github.com/raspberrypi/pico-examples.git
サンプルソースファイルの準備
プロジェクト用のディレクトリの作成
独自のプロジェクトを構築していくためのディレクトリ(フォルダ)を作成します。
mkdir test_prj
ディレクトリ名は任意ですがここではtest_prj
にしました。(参考資料と変えています。)
以下、test_prj
をプロジェクトのルートディレクトリ、あるいは単にルートと呼びます。
テスト用のソースコードの準備
以下のソースファイルを用意します。ソースファイルのファイル名は参考資料と変えて、test_prj.c
としました。
#include <stdio.h> #include "pico/stdlib.h" #include "hardware/gpio.h" #include "pico/binary_info.h" const uint LED_PIN = 25; int main() { bi_decl(bi_program_description("This is a test binary.")); bi_decl(bi_1pin_with_name(LED_PIN, "On-board LED")); stdio_init_all(); gpio_init(LED_PIN); gpio_set_dir(LED_PIN, GPIO_OUT); while(1) { gpio_put(LED_PIN, 0); sleep_ms(250); gpio_put(LED_PIN, 1); puts("Hello World\n"); sleep_ms(1000); } }
bi_decl
の行はpicotool
と言う、コンパイル後のバイナリから情報を得るツールで生かされる行で、
プログラムの動作の本質とは関係ない様です。
CMakeLists.txtの準備
開発環境としてcmakeを用いますので、cmakeの動作指示書とでもいえるCMakeLists.txt
を準備します。
CMakeLists.txt
はプロジェクトのルートであるtest_prj
ディレクトリ内に作ります。
ソースコードと同じ場所に置くと言うことです。
以下のテキストをCMakeLists.txt
としルートに保存してください。
cmake_minimum_required(VERSION 3.13) include(pico_sdk_import.cmake) project(test_prj C CXX ASM) set(CMAKE_C_STNDARD 11) set(CMAKE_CXX_STANDARD 17) pico_sdk_init() add_executable(test_prj test_prj.c ) pico_enable_stdio_usb(test_prj 1) pico_enable_stdio_uart(test_prj 1) pico_add_extra_outputs(test_prj) target_link_libraries(test_prj pico_stdlib)
プロジェクトの名前とCのソースファイルの名前が一致しているので、自分でプロジェクトを作る際は
CMakeLists.txt
の該当箇所を注意して変更してください。
pico_sdk_import.cmakeのコピー
ビルドを正常に行うためにルートにpico-sdk
からpico_sdk_import.cmake
と言うファイルをコピーしてきます。
cp ../pico-sdk/external/pico_sdk_import.cmake .
pico-sdkのパスの設定
ビルドする前に、pico-sdkのパス(場所)を環境変数に設定します。
export PICO_SDK_PATH=../../pico-sdk
上記はpico-sdk
の場所を後述するbuild
ディレクトリからの相対パスで指定しています。
そのため、この記述ででうまくいくのはプロジェクトのルートディレクトリが本記事どうりに、
pico-sdk
ディレクトリと同じディレクトリ内に存在している必要があります。
ビルド
cmakeを用いたビルドは
- ルートに
build
ディレクトリを作成 build
ディレクトリに移動- cmakeを実行して、makefile作成
- makeを実行してコンパイル&リンク、書き込み用ファイル作成
と言う様な流れで行います。実際は以下の様にコマンドを実行していきます。
mkdir build cd build cmake .. make
マルチコアのCPUを搭載しているマシンではmake
で以下の様にコンパイルに使用するコア数を指定すると
コンパイルが高速になるかもしれません。(以下の例はコア数を4に指定)
make -j4
うまくビルドが終わるとuf2
ファイルが出来上がるのでPicoをUSB接続するとUSBドライブとして見えるので、
そこにドラッグアンドドロップすると、書き込み完了となります。
おわりに
今回は基本的なRaspberry Pi Picoの独自プロジェクトを構築する方法の基礎のきそを解説しました。 複雑なプロジェクトになるとCMakeLists.txtの記述内容を理解しなければなりませんが、そこはまた後日余裕があればとしたいと思います。
お急ぎの方は、以下の記事が大変参考になるかと思います。(執筆者に感謝です。)