執筆者: 瀕死
最終更新: 2024/07/03
瀕死(ひんし)と申します。しばらくはマイコン関連の記事を投稿する予定です。
より良い記事を目指す一環として、表現や文体等を見直しました。
本稿でもよろしくお願いいたします。
本稿ではRP2040開発ボード、つまりRaspberry Pi Picoの互換ボードでRaspberry Pi Pico C/C++ SDK(以下SDK)をWindows11において用いる方法について解説する。
互換ボード専用の手順は存在しないため、 Raspberry Pi PicoをSDKで開発するのにも適用可能である。
Windows11においておそらく最も簡単にSDKを用いた開発環境を構築する方法は、pico-setup-windowsのインストーラーを実行することである。
GitHubページ右側のReleasesの下のvX.Y.Z(X, Y, Zは数字)をクリックし、拡張子が.exe
のファイルをダウンロードして実行する。
そうすると、デスクトップに以下のようなアイコンが作成されるのでクリックして実行する。
もしショートカットがデスクトップになければ、 インストールした場所(標準は"C:\Program Files\Raspberry Pi\Pico SDK vX.Y.Z\"
)の pico-code.ps1
をPowerShellで実行する。
このSDKで開発する場合は上記のショートカットorPowerShellスクリプトからVSCodeを起動する必要がある。 その他の方法でVSCodeを起動すると、CMake 実行可能ファイルが正しくありません
などのエラーが出るので、必ずデスクトップのアイコンから起動する。
起動すると、以下のような画面が表示されるのでPico ARM GCCを選択する。
消してしまった場合は、VSCodeのコマンドパレットからCMake: Configure
を選択すると同じ画面になる。
他には、CMake拡張機能が無効であるなどの原因が考えられる。
次に、CmakeタブのBlink(実行可能ファイル)の右のツールチップがビルド
のアイコンをクリックすると、Blinkプロジェクトをビルドできる。
VSCodeの出力のとおり、./build
フォルダに実行可能ファイルが生成される。 今回はさらにその下の./blink/blink.uf2
が開発ボードで実行できるファイルである。
開発ボードのBOOTSELボタンを押しながらUSBでPCに接続すると、ドライブとして認識するので、ここにblink.uf2
をコピーする。
新しいプログラムを開発ボードに書き込む場合は、BOOTSELボタンを押しながらUSBで接続する必要がある。 押していなかった場合は、給電のみ行われる。
コピーすると自動でマウントが解除され、LEDが点滅する。
開発ボードを用いた電子工作におけるHello, World.
はLEDを点滅させるLチカである。
1つ前の章でもLチカを実行したが、この章では新しいプロジェクトとしてLチカプロジェクトを作成す。
適当なフォルダをC:\Users\${あなたのユーザー名}\Documents\Pico-X.Y.Z
の下に作成し、 以下の3ファイルを配置する。
..\pico-examples\pico_sdk_import.cmake
をコピーして配置する。CMakeLists.txt
を作成し、下記をコピーして貼り付けておく。main.cpp
を作成し、下記をコピーして貼り付けておく。cmake_minimum_required(VERSION 3.13)
# PICO_SDK_PATHを基にSDKを初期化する
# project()より先に呼ばれる必要がある
include(pico_sdk_import.cmake)
# プロジェクトを宣言
project(my_project)
# Raspberry Pi Pico SDKを初期化
pico_sdk_init()
# 実行可能ファイルを作成する
# (生成するファイル名, ソースファイル1, ...)
add_executable(a
main.cpp
)
# pico_stdlibを追加する
target_link_libraries(a pico_stdlib)
# Raspberry Pi Picoで実行可能なファイルを作成する
pico_add_extra_outputs(a)
#include "pico/stdlib.h"
#include "hardware/gpio.h"
#define LED_BUILTIN 25 // LEDがつながっているピンを定数マクロとして定義
int main() {
gpio_init(LED_BUILTIN); // gpioを初期化
gpio_set_dir(LED_BUILTIN, GPIO_OUT); // gpioの役割を出力に設定
while(true) {
gpio_put(LED_BUILTIN, 1); // LEDをONに
sleep_ms(1000); // 1秒待機
gpio_put(LED_BUILTIN, 0); // LEDをOFFに
sleep_ms(1000); // 1秒待機
}
}
上記のとおりにビルドし開発ボードに書き込むと、 先ほどより点滅の間隔の広いLチカが実行される。
CMakeLists.txt
のpico_add_extra_outputs(a)
の直前に以下を追記する。
# 標準出力をUARTピンからUSBに変更
pico_enable_stdio_usb(a 1)
pico_enable_stdio_uart(a 0)
main.cpp
を以下のとおり書き換える。
#include "pico/stdlib.h"
#include "hardware/gpio.h"
#include <iostream>
#define LED_BUILTIN 25
const char LED_ON_CMD = 'Y';
using namespace std;
int main() {
// stdio初期化 ないとシリアルポートが見つからないので注意
stdio_init_all();
gpio_init(LED_BUILTIN);
gpio_set_dir(LED_BUILTIN, GPIO_OUT);
gpio_put(LED_BUILTIN, 1);
while(true) {
char c;
cin.get(c);
if(c == LED_ON_CMD) gpio_put(LED_BUILTIN, 1);
else gpio_put(LED_BUILTIN, 0);
cout << "read success" << endl;
}
}
この開発ボードでは標準入出力をUSBに流すようにするだけで、 cin
やprintf
等を簡単に用いることができる。
VSCodeのシリアルモニターで'Y'
を送信するとLEDが点灯し、 それ以外を送信するとLEDが消灯する。
読んでいただきありがとうございました。 次回は、RP2040開発ボードで複数のコアを利用する方法について解説する予定です。
この人が書いた記事