下記の手順に関してまとめる。
開発環境の構築
WSLのセットアップ
WSLのセットアップは、公式ページを参考にセットアップを行う。
Windows 10 バージョン 2004 以降 (ビルド 19041 以降) または Windows 11 を実行している必要がある。
管理者の PowerShell または Windows コマンド プロンプトを起動して、下記のコマンドを実行する。
wsl --install
Ubuntuがインストールされたので次に、Linux ユーザー情報を設定する。
[スタート] メニューを使用してディストリビューション (既定では Ubuntu) を開き、Linux ディストリビューションのユーザー名とパスワードの作成をする。
パッケージの更新とアップグレードを行う。
sudo apt update && sudo apt upgrade
ここまで出来たら、WSLのセットアップは完了。
WSLは2もあり、バージョンを変更する場合は下記を参照。
VScodeのセットアップ
エディタにはVScodeを使用する。
下記からダウンロードとインストールを行う。
インストールまで行ったら、初めにリモート接続用の拡張機能を追加する。
日本語化は、Japanese Language Pack for Visual Studio Codeをインストールした。
ローカル環境に対して拡張機能タブで**c/c++**と検索して c/c++ extention packをインストールする。
次に、リモートエクスプローラーから、WSLへ接続を行う。
接続を行った後から、リモート先へ拡張機能を追加する。
下記の拡張をインストールした。
- C/C++ Extension Pack (必須)
- Japanese Language Pack for Visual Studio Code (任意)
上記でエディタの環境構築は終了。
必要なツールのセットアップ
WSL上のUbuntuの環境を構築する。
VScode上から、WSLに接続してUbuntuを操作する。
下記の図のwindow+マークを選択し、wslに接続する。
WSLへの接続が正しくされると下記のように表示される。
ctrl + @
を押すとVScode上でターミナルが起動する。
最初に、パッケージのアップデート・アップグレードを行う。
sudo apt update && sudo apt upgrade
次に必要なパッケージをインストールする。
sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential git
下記の資料を参考にした。
基本的なことは下記に書いてあり、Raspberry Piからプログラムするのが一般的だが、
現在、とても値上がりしていたり、入手しにくい状況のため、今回は、windowsからの入門にすることとした。
LEDチカチカまでのプロジェクト作成ビルドまで
手順としては、下記のように行う。
-
pico-sdk
をクローンする。 -
CmakeList.txt
にインクルード、編集する。 - C/C++のソースを編集する。
- ビルドする。
- Raspberry Pi Picoへ送る
pico-sdk
をクローンする。
下記のコマンドを使用して、pico-sdk
をクローンする。
git clone https://github.com/raspberrypi/pico-sdk.git
[https://github.com/raspberrypi/pico-sdk.git:embed:cite]
今回は下記のようなフォルダ構成とする。
$ tree -L 1 ./
./
├── LEDblink
└── pico-sdk
CmakeList.txt
にインクルード、編集する。
LEDblinkフォルダ下には下記のようなフォルダ構成とする。
$ tree -L 1 ./LEDblink
./LEDblink
├── CMakeLists.txt
└── src
$ tree ./src
./src
└── pico-display
├── CMakeLists.txt
└── main.c
LEDblink/CMakeLists.txtは下記のようにした。
cmake_minimum_required(VERSION 3.12)
set(ENV{PICO_SDK_PATH} "${HOME}/src/repo/pico/pico-sdk/" )
# Pull in SDK (must be before project)
include(../pico-sdk/external/pico_sdk_import.cmake)
project(pico_examples C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
if (PICO_SDK_VERSION_STRING VERSION_LESS "1.3.0")
message(FATAL_ERROR "Raspberry Pi Pico SDK version 1.3.0 (or later) required. Your version is ${PICO_SDK_VERSION_STRING}")
endif()
# Initialize the SDK
pico_sdk_init()
add_compile_options(-Wall
-Wno-format # int != int32_t as far as the compiler is concerned because gcc has int32_t as long int
-Wno-unused-function # we have some for the docs that aren't called
-Wno-maybe-uninitialized
)
add_subdirectory(src/pico-ledblink)
基本的には、サンプルプログラムから引用した。
注目点は、下記の通り。
set(ENV{PICO_SDK_PATH} "${HOME}/src/repo/pico/pico-sdk/" )
include(../pico-sdk/external/pico_sdk_import.cmake)
add_subdirectory(src/pico-ledblink)
set(ENV{PICO_SDK_PATH} "${HOME}/src/repo/pico/pico-sdk/" )
およびinclude(../pico-sdk/external/pico_sdk_import.cmake)
は、サンプルを参考にPico-SDK使用するために設定する。
add_subdirectory(src/pico-ledblink)
をして、プロジェクトを追加する。
LEDblink/src/CMakeLists.txt下は下記の通り。
add_executable(pico_ledblink
main.c
)
# pull in common dependencies
target_link_libraries(pico_ledblink pico_stdlib)
pico_ledblinkのビルドとpico_ledblinkにライブラリをリンクする。
C/C++のソースを編集する。
/**
* Copyright (c) 2020 Raspberry Pi (Trading) Ltd.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include "pico/stdlib.h"
#define BACK_LIGHT_PIN
int main() {
const uint LED_PIN = PICO_DEFAULT_LED_PIN;
gpio_init(LED_PIN);
gpio_set_dir(LED_PIN, GPIO_OUT);
while (true) {
gpio_put(LED_PIN, 1);
sleep_ms(250);
gpio_put(LED_PIN, 0);
sleep_ms(250);
}
}
0.25秒おきに点滅するプログラムの完成。
ビルドする。
gcc-arm-none-eabiを使用してビルドを行う。
キットのスキャンを行い、gcc-arm-none-eabiを選択する。
VScodeのウィンドウ下方に上記のように表示されていればいざ、ビルドする。
ビルドがされるとpico-ledblink.elf
が.build/src/pico-display/pico_display.elf
に生成される。
このまま送っても動作しないため、.uf2
に変換する。
変換するには、pico-sdk内にelf2uf2
というツールがあるため、このツールを使用して変換する。
pico-sdkのプロジェクトを開き、プロジェクトをビルドする。
キットのスキャンを行い、gcc-arm-none-eabiを選択する。
そしてビルドすると、./pico-sdk/build/elf2uf2/elf2uf2
が生成される。
そして、下記のコマンドを使用し.uf2
に変換する。
../pico-sdk/build/elf2uf2/elf2uf2 build/src/pico-display/pico_ledblink.elf build/src/pico-display/pico_ledblink.uf2
この変換は、下記のサイトを参考にした。
Raspberry Pi Picoへ送る。
Raspberry Pi Picoをパソコンに接続し、linux内でマウントを行うことで転送する。
上記のサイトを参考にマウントを行った。
Raspberry Pi Picoをマウントするには、bootボタンを押したままUSBを接続する。
その後、下記のコマンドを実行する。今回は、windows上でDドライブにRaspberry Pi Picoがマウントされたことを前提としている。
$ sudo mkdir /mnt/d
$ sudo mount -t drvfs D: /mnt/d
上記によって下記のようにlinuxにRaspberry Pi Picoがマウントされる。
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sdb 251G 4.6G 234G 2% /
tmpfs 3.1G 0 3.1G 0% /mnt/wsl
tools 238G 201G 38G 85% /init
none 3.1G 0 3.1G 0% /dev
none 3.1G 8.0K 3.1G 1% /run
none 3.1G 0 3.1G 0% /run/lock
none 3.1G 0 3.1G 0% /run/shm
none 3.1G 0 3.1G 0% /run/user
tmpfs 3.1G 0 3.1G 0% /sys/fs/cgroup
drivers 238G 201G 38G 85% /usr/lib/wsl/drivers
lib 238G 201G 38G 85% /usr/lib/wsl/lib
C:\ 238G 201G 38G 85% /mnt/c
D: 128M 20K 128M 1% /mnt/d
最後に、$ cp build/src/pico-display/pico_display.uf2 /mnt/d/
を行うとPicoにコピーされる。
コピーされたのち、一回Picoを抜いて再度挿すとコピーした実行ファイルが実行される。