Raspberry Pi PicoのC/C++開発環境をVS Code on Macで作る


Raspberry Pi Picoを調べてると、通常のRaspberry Piから接続して書き込む...みたいな記載がよくあります。

僕はMacから直接書き込みをしたいので、進めてみました。

[PicoのGetting Started](https://datasheets.raspberrypi.org/pico/getting-started-with-pico.pdf)の34ページのあたりを参考に進めてみます。

いつもみるのは[こちら](https://www.raspberrypi.org/documentation/pico/getting-started/)

> ↑まじでここのリンク分からなくなる

## 事前情報など

* MacBook Pro (2019) / Big Sur
* Pico SDKを利用
	* https://github.com/raspberrypi/pico-sdk
	* これをC/C++の開発で利用するらしい
* MicroPythonでのLチカは終わったところ
	* [【初見にオススメ】Raspberry Pi PicoをブラウザだけでLチカする(Web Serial API)](https://qiita.com/n0bisuke/items/c16f77c7017a2d4018dd)
* 僕はC/C++開発がよくわかっていない

## 必要なコマンドのインストール

### 0. homebrewの準備

homebrew経由でビルドツールをインストールしていくので、事前にインストールしましょう。

まずはアップデート準備

```bash
$ brew update
$ brew upgrade
```

### 1. cmakeのインストール

```bash
$ brew install cmake
```

問題なくインストールできました。

### 2. arm-none-eabi-gccのインストール

```bash
$ brew tap ArmMbed/homebrew-formulae
$ brew install arm-none-eabi-gcc
```

ここで`arm-none-eabi-gcc`のインストールでこんなエラーが

```
・
・
・
==> Downloading https://cli-assets.heroku.com/heroku-v7.47.12/heroku-v7.47.12.tar.xz
######################################################################## 100.0%
Error: Your CLT does not support macOS 11.
It is either outdated or was modified.
Please update your CLT or delete it if no updates are available.
Update them from Software Update in System Preferences or run:
  softwareupdate --all --install --force

If that doesn't show you any updates, run:
  sudo rm -rf /Library/Developer/CommandLineTools
  sudo xcode-select --install

Alternatively, manually download them from:
  https://developer.apple.com/download/more/.

```

[Homebrewで「Your CLT does not support macOS 11」エラーの対応](https://www.yokoweb.net/2020/12/05/homebrew-clt-macos11-error/)の記事を参考に対応してみます。
僕もこの記事同様にxcode本体はmacにインストールしてなく、コマンドラインツールだけいれてました。

```bash
$ sudo rm -rf /Library/Developer/CommandLineTools
Password:
```

![スクリーンショット 2021-02-05 16.31.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/35656b32-f686-6606-621a-3a50a9b85aae.png "スクリーンショット 2021-02-05 16.31.07.png")

> めちゃ時間かかるな...

![スクリーンショット 2021-02-05 16.31.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/98229f30-0ed3-e3ae-89a1-45e05aecb286.png "スクリーンショット 2021-02-05 16.31.18.png")

完了したら次のコマンドです。

```bash
$ sudo xcode-select --install
```

またエラーが出ました。

```bash
xcode-select: error: command line tools are already installed, use "Software Update" to install updates
```

との表示なので、すでにインストールされてる風だった（↑のプロセスがそれだった気がする）ので再度`arm-none-eabi-gcc`のインストール。

```bash
$ brew install arm-none-eabi-gcc
```

### 3. インストール完了を確認

```bash
$ cmake
Usage

  cmake [options] <path-to-source>
  cmake [options] <path-to-existing-build>
  cmake [options] -S <path-to-source> -B <path-to-build>

Specify a source directory to (re-)generate a build system for it in the
current working directory.  Specify an existing build directory to
re-generate its build system.

Run 'cmake --help' for more information.
```

```bash
$ arm-none-eabi-gcc
arm-none-eabi-gcc: fatal error: no input files
compilation terminated.
```

無事にどちらのコマンドもインストールされました。

## Pico SDKの準備

ドキュメント([PicoのGetting Started](https://datasheets.raspberrypi.org/pico/getting-started-with-pico.pdf))の7ページの2.1を参照です。

以下の二つのリポジトリを利用します。

* https://github.com/raspberrypi/pico-sdk
* https://github.com/raspberrypi/pico-examples


### 1. 適当なフォルダを作成

```bash
$ cd ~/
$ mkdir pico
$ cd pico
```

### 2. pico-sdkとpico-examplesの二つをclone


```bash
$ git clone -b master https://github.com/raspberrypi/pico-sdk.git
$ cd pico-sdk
$ git submodule update --init
$ cd ..
$ git clone -b master https://github.com/raspberrypi/pico-examples.git
```

picoフォルダ以下にpico-examplesとpico-sdkのフォルダがある感じになりました。

```
$ ls
pico-examples pico-sdk
```

## VC Codeから使えるようにする

[CMake Tools](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools)の拡張機能をVS Codeにインストールします。



### 1. settings.jsonの作成

`pico-examples`のフォルダをVS Codeで開き、`.vscode`フォルダを作成します。

更にその中に`settings.json`を作成します。

```settings.json
{
    "cmake.environment": {
        "PICO_SDK_PATH":"先ほどcloneしたPICO SDKのパス"
    },
    "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools"
}
```

ちなみに僕はこんな感じで絶対パスで指定してます。相対パスでも動くかもしれませんが試してません。

```settings.json
{
    "cmake.environment": {
        "PICO_SDK_PATH":"/Users/n0bisuke/Documents/playground/pico/pico-sdk"
    },
    "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools"
}
```

### 2. サンプルコードをビルドする

確かプロジェクトを開くとか、cファイルを開くとかどちらかで以下のような選択フォームが出てきます。

> ![スクリーンショット 2021-02-05 17.50.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/5ad1f08b-d54a-d09d-e83c-a42d7d4c9e2a.png "スクリーンショット 2021-02-05 17.50.05.png")

ここで`GCC for arm-none-eabi`を選択しましょう。

`cmd+shift+p`で出てくるコマンドパレットで`CMake: Build`を選択してビルドします。

> ![スクリーンショット 2021-02-06 17.08.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/888c28c2-6cbc-cd4d-9bce-38752ad6fcba.png "スクリーンショット 2021-02-06 17.08.41.png")

buildフォルダが作成されて、その中にビルド後のファイルが生成されていきます。試しにblink.cを編集してみたのですが、`build/blink/blink.uf2`として生成されていました。

> <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/394dde74-c312-1567-aebf-05136b012079.png" width="150px"> 

あとはこのuf2ファイルをMicroPythonのファームを書き込んだときのように、BOOTSELボタンを押しながらRaspberry Pi Picoの電源を起動してマウントされたディレクトリにドラッグ&ドロップで書き込めます。

> 参考: [【初見にオススメ】Raspberry Pi PicoをブラウザだけでLチカする(Web Serial API)](https://qiita.com/n0bisuke/items/c16f77c7017a2d4018dd)

## 所感など

VS Codeで開発できるのは便利ですね！
毎回BOOTSELで起動するのはUSBケーブルの再接続が必要で手間があるのでそのままPicoに流し込むやり方を調べていきます。

UF2ファイルってなんだろうと思ってましたが`Microsoftがマイコンフラッシュ向けに開発したファイル形式`らしいです。

> 参考: [ハンディバーサライタ PovRanianの表示映像生成フォームの仕組み](https://homemadegarbage.com/povranian-form02#:~:text=%E3%81%A7%20%E3%83%93%E3%82%B8%E3%83%A5%E3%82%A2%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-,uf2%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A8%E3%81%AF,%E5%BD%A2%E5%BC%8F%E3%81%A8%E3%81%AE%E3%81%93%E3%81%A8%E3%81%A7%E3%81%99%E3%80%82&text=uf2%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AFAdafruit%E3%81%AE,%E3%83%9C%E3%83%BC%E3%83%89%E3%81%A7%E3%82%82%E5%88%A9%E7%94%A8%E5%8F%AF%E8%83%BD%E3%81%A7%E3%81%99%E3%80%82)

pico-goとかで出来るんですかね？