Spresense 開発環境構築(2021/08)

#Spresense 開発環境構築

## まえがき
Windows10で、Spresense開発環境を整えます。
CLI環境を作ったあと、VScode IDEでの環境をつくります。

基本はSony公式スタートガイドの通りに進めればいいですが、最新の環境との食い違いで不具合があった所をサポートしながら書き進めます。

https://developer.sony.com/develop/spresense/docs/sdk_set_up_ja.html

https://developer.sony.com/develop/spresense/docs/sdk_set_up_ide_ja.html


## CLI版の環境構築

IDEを使用するためにも、まずCLI環境をセットアップしておく必要があります。

### MSYS2セットアップ

#### 64bit版のダウンロード

ダウンロードは、こちらのリンクから。

http://repo.msys2.org/distrib/x86_64/

この中から、 __msys2-x86_64-20210419.exe__ をダウンロードします。

:::note warn
MSYS2最新版では、後程IDEで使用するSDKコンフィグが動きませんでした。
:::


#### ウィルススキャン例外設定
MSYS2をインストールするフォルダ、および上記でダウンロードしたファイルを例外設定します。
MSYS2はウィルススキャンにひっかかりやすいようで、必要なビルドコマンドが隔離されたりしないように設定します。

#### MSYS2インストール
インストーラに従ってインストールします。

:::note info
ここでは`D:\msys64`にインストールしています。
:::

#### ビルドに必要なパッケージをインストール
「MSYS2 MSYS」を開きます。

:::note warn
「MSYS2 MinGW ～～」のほうではないので注意。
また、pacman DBのアップデート(pacman -Syu等のコマンド)は行わない事。ビルドコマンドパッケージが最新バージョンに更新されてしまい、後程のIDE環境で不具合がでます。
:::

```
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
```

#### Spresense用ツールのインストール

```
curl -L https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh > install-tools.sh
bash install-tools.sh
```

インストールができたら、sourceしておきます。

```
source ~/spresenseenv/setup
```

#### Spresense SDKのclone

```
git clone --recursive https://github.com/sonydevworld/spresense.git
```

### USBシリアルドライバのインストール
こちらから、ドライバをインストールします。

https://www.silabs.com/documents/public/software/CP210x_Universal_Windows_Driver.zip

ドライバをインストール後、SpresenseをUSB接続します。

### USBシリアルポートの確認

デバイスマネージャーから、Spresense接続ポートを探します。
デバイス名は、次のようになります（ここではCOM3）
`Silicon Labs CP210x USB to UART Bridge(COM3)`

### CLIサンプルアプリケーション "Hello, World!" をためす

#### サンプルアプリケーションのコンフィグ

MSYS2を起動し、次のコマンドでコンフィグを行います。

```
cd spresense/sdk
tools/config.py examples/hello
```

上記コンフィグコマンドを打った後、次のようなWARNINGが表示されることがあります。
`WARNING: New loader vN.N.N is required, please download and install.`
この場合、表示されたバージョンのブートローダーのインストールが必要です。

#### ブートローダーのインストール

　1. 上記WARNINGのところで表示されたURLをブラウザで開きます。
　2. 表示されたページのDownload nowボタンを押し、End User License Agreementが同意できたらZIPファイルがダウンロードされます。
　3. ダウンロードされたZIPファイルをspresense/sdkディレクトリに移動します。
　4. ZIPファイルを、次のコマンドで展開します。

```
./tools/flash.sh -e （ダウンロードしたZIPファイル名）
```

　5. SpresenseメインボードとPCをUSB接続します。
　6. 次のコマンドで、ブートローダーバイナリをSpresenseメインボードへ書き込みます。

```
./tools/flash.sh -l ~/spresense/firmware/spresense -c （COMポート）
```

#### SDKとサンプルのビルド

```
make
```

バイナリイメージのnuttx.spkファイルができたらOKです。

#### サンプルアプリケーションをSpresenseボードへの書き込み

```
tools/flash.sh -c （COMポート） nuttx.spk
```

正常に書き込みが完了すると、ボードは自動的にリブートし書き込まれたイメージが実行されます。

#### シリアルターミナル上での動作確認

Windowsなので、Tera Termを使って確認します。
通信設定は、次の設定で。

|項目|設定値|
|:-:|:-:|
|ボーレート|115200|
|データ|8 bit|
|パリティ|none|
|ストップ|1 bit|
|フロー制御|none|

NuttShellへシリアル接続し、コマンド`hello`を打って、次のようになればOK

```
NuttShell (NSH)
nsh> hello
Hello, World!!
nsh>
```

## IDE環境構築

ここからIDE開発環境をセットアップします。

### Visual Studio Codeのインストール

こちらからダウンロードして、インストール。

https://code.visualstudio.com/

### 日本語言語パックをインストール

拡張機能から、日本語言語パックもインストールしておきます。

### Spresense 拡張機能のインストール

1. 拡張機能画面で`Spresense`と検索
![capture20210721-154.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107906/e2b96405-54cd-e5ba-0176-2656315855e6.png)
1. 「Spresense VSCode IDE」をインストール

### MSYS2インストールPathの設定

1. F1キーを押してコマンドパレットを表示
1. `spresense msys2`と入力してコマンドを絞り込み「Spresense: MSYS2パスの設定(Windowsのみ)」を選択
1. フォルダーの選択画面が出るのでMSYS2のパスを選択して「フォルダーの選択」をクリック

### アプリケーションプロジェクトの作成

1. F1キーを押してコマンドパレットを表示
1. `spresense workspace`と入力してコマンドを絞り込み「Spresense: ワークスペースセットアップウィザード」を選択
1. 「新規ワークスペースの作成」ダイアログが表示されるので、
Spresense SDK パス：CLI開発環境でgit cloneしたspresense SDKのフォルダを選択
プロジェクトフォルダーパス：新しく作成したフォルダーを指定します。

1. 「作成」 ボタンをクリックし、「Spresenseセットアップ: セットアップ完了」 が表示されればワークスペースセットアップは完了
1. ファイルから名前を付けてワークスペースを保存を選択することで作成したワークスペースを保存

### シェル設定の有効化

1. ターミナルから新しいターミナルを選択
1. 「新しいターミナルの作業ディレクトリを選択してください」と入力を求められますので、どちらかを選択してください。(どちらでも同じ結果になります。)

:::note info
公式ガイドでは、「このワークスペースによるターミナルシェルの変更を許可しますか？」とありましたが、このダイアログは出現しませんでした。
:::

### アプリケーションコマンド "myapps" の追加

1. 上記で作成したプロジェクトフォルダー上で右クリックし、「Spresense: プロジェクトフォルダーへの追加」を選択します。
1. 開いた「プロジェクトフォルダーへの追加」ダイアログから、アプリケーションコマンドを追加したいプロジェクトフォルダーを選択し、次へ をクリック
1. アイテムの種類から「アプリケーションコマンド」を選択し、次へをクリック
1. アプリケーションコマンド名に追加したいアプリケーションコマンドの名前を入力(今回の例では`myapps`です。)
1. 作成ボタンをクリック

### メインソースコードの編集

1. 上記のとおりに進めて作成ボタンを押すと、メインソースコードがエディタに表示されます。
1. 次のようにソースを編集して、"Hello Spresense!!!"と表示されるようにします。

```c:myapps_main.c
#include <sdk/config.h>
#include <stdio.h>

int myapps_main(int argc, char *argv[])
{
  printf("Hello Spresense!!!\n");
  return 0;
}
```

### ビルドのコンフィグレーション

![capture20210726-175.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107906/b1da7afc-235e-8fcd-c5e1-dcb3c1edac43.png)

1. 次にビルドするためのコンフィグレーションを行います。プロジェクトフォルダー上で右クリックし、プロジェクトメニューから「Spresense: SDKコンフィグ」を選択します。
1. 別タブに「SDKコンフィグ」が開くので、「新規作成」をクリック
1. 「New Configuration」ダイアログが出たら、何も選択せず、「OK」をクリックしてダイアログを閉じます。
1. 「保存」をクリック
1. `コンフィグレーションが保存されました。`と通知が表示されるまで待ちます。


### プロジェクトのビルド

1. プロジェクトフォルダー上で右クリックし、プロジェクトメニューから「Spresense: アプリケーションのビルド」を選択します。
1. アプリケーションビルドが開始するので完了まで待ちます。
1. ビルドが完了すると、`ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。`と表示されます。

### シリアルポートの設定

1. F1キーを押してコマンドパレットを表示
1. `spresense serial port`と入力してコマンドを絞り込み「Spresense: シリアルポートの選択」を選択
1. シリアルポートの選択 リストの中からSpresenseのポートを選択します。（ここではCOM3）

### Spresenseボードへの書き込み

1. プロジェクトフォルダー上で右クリックし、プロジェクトメニューから「Spresense: ビルドと書き込み」を選択します。
1. ビルドと書き込みが実行され、それが終わると自動でシリアルターミナルが開きます。

### 動作確認

1. 開いたシリアルターミナル上で`myapps`を入力しエンターキーを押します。
1. 作成したコマンドの実行結果が表示されます。

```
NuttShell (NSH) NuttX-8.2
nsh> myapps
Hello Spresense!!!
nsh>
```


![capture20210816-198.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107906/dbe556f8-d455-fe57-d00c-ef54b7867942.png)