# 概要
==限定共有資料だったものを 2021/11/24改版 し公開します==
SPRESENSE開発をされる方、ハンズオン参加者向けの情報になります。
情報の取得先を結構探してしまったので、備忘録を兼ねて記載します。
SPRESENSE とは
SPRESENSEはソニーセミコンダクタソリューションズ株式会社が開発されたIoT向けボードコンピュータです。
乾電池で動作する省電力デバイスなのに、簡単な画像解析などAIモデルを実行できるというところ。
こちらが実現できるかも ということで興味を持ったのがきっかけです。郵便受け でエッジコンピューティング(IoTLT/RaspberryPiでエッジAI 郵便物認識/Tensorflow)
ハードとしては、GPS受信機能とハイレゾリューション・オーディオコーデックを搭載する等々、私なんぞには語り尽くせない、こだわりのデバイスとなっています。
製品仕様
- MCUは、1つのGPS受信コア、1つのArm® Cortex®-M0+コア、6つのCortex-M4コア(FPU機能搭載)を搭載
- 各コアの間はクロスバススイッチで接続(どのコアにどの処理をさせるかを選択可能)
- GPS受信機能は米国のGPSとロシアのGLONASSに対応、今後、中国のBeiDouや欧州のGalileoにも対応予定
私が購入した理由
SPRESENSEが、AIを利用可能な省電力エッジデバイスだと、Maker Faire Kyoto 2019で知ったからです。
Sonyが開発したニューラルネットワークを直感的に設計できるツールNeural Network Consoleで学習したモデルを、動作させることができるようになった(とのお話でした)。
開発者用サイト
Developer Tools - Sony Developer Worldを参照する必要があります。
開発環境の準備 IDE版
将来的な作業を考慮してIDE版の開発環境を、Spresense SDK スタートガイド (IDE 版)の通り導入します。
Virtual Box上にUbuntu Desktop 20.04.3 LTSを構築します。
Ubuntu Desktop 20.04.3 LTSをダウンロード
Ubuntuを入手するからUbuntu Desktop 20.04.3 LTSをダウンロードします
Oracle VM VirtualBoxのインストールと準備
Oracle VM VirtualBoxからダウンロードし、インストールします
Oracle VM VirtualBoxを起動し、仮想マシンを新規作成します
PCがインターネットに接続されていることを確認してください
名前は何でも良いです
メモリーサイズは4096M以上にしてください
仮想ハードディスクを作成します
ファイルタイプはVDIにします
物理ハードディスクは可変サイズにします
サイズは30GB以上にし、作成します
仮想マシンへUbuntuをインストール
メディア設定と起動
新規作成した仮想マシンをクリック、設定ボタンを押します
ストレージ > コントローラIDEの「空」> 属性の高額ドライブをIDEプライマリマスター へ変更(IDEセカンダリマスターになっている場合)
DVDアイコンボタン > ディスクファイルを選択
ダウンロード済のUbuntu Desktop 20.04.3 LTSファイル(拡張子.iso)を選択します
OKボタンで閉じます
Ubuntuのインストール
★注意★普通に進めてしまうと画面の解像度が低く、インストールができません
起動Ubuntuのインストール画面が立ち上がりますので、Escボタンをすぐに押します
解像度の変更を行うため 一度、Ubuntu インストールを中止させる
仮想マシンが正しいことを確認し、起動ボタンを押します
以下の画面になったらEscボタンをすぐ押し、インストールを中断します
上手く行くと、この画面になります
画面上のポップアップは説明を読んだ後、×で消して構いません
settings アプリを起動し解像度を変更
左下のボタンからアプリ一覧を表示させます
検索欄にset と入力、settings アプリを起動します
左側のメニューから Displays > Resolution を選択
Resolution を 1024 x 768(4:3) に変更し、右上の Apply ボタンを押します
表示に問題がなければ Keep Changes を押します
Ubuntu インストール
ディスクトップのアイコンからインストールを再開します
左側のメニューから 日本語 を選択し、 続ける ボタンを押します
japanese を選択し、 続ける ボタンを押します
通常のインストール、 Ubuntuのインストール・・・ をチェックし、続ける ボタンを押します
ディスクを削除してUbuntuをインストール を選択し、インストール ボタンを押します
続ける ボタンを押します
Tokyo を選び 続ける ボタンを押します
それぞれの項目を記載し、後で必要になるためメモします、 続ける ボタンを押します
インストールが開始されます
今すぐ再起動 ボタンを押します
メディアを取り出せと表示され再起動が止まりますが Enter をそのまま押します
もし、駄目な場合は 仮想ドライブからディスクを除去 を試してください
起動後、アカウント名を左クリックすることで、パスワード入力欄が出てきます
### Ubuntu のセットアップ
ディスプレイ設定の変更
インストール時と同じ手順で、ディスプレイ設定を変更します
言語サポートのインストール
ユーザーパスワードを入力し、認証 ボタンを押します(以降、同様に対応下さい)
システム全体に適用 ボタンを押し、閉じる ボタンを押します
不完全な言語サポート のアップデート情報ウインドウを閉じてください
ソフトウェアの更新 を実行する
最新の状態に更新するため、今すぐインストールする ボタンを押します
状況は左端のメニューからこのアイコンを左クリックするとわかります
時間がかかるので、終わるまでしばらく待ちます。
注意:snapdの更新処理が止まってしまったら、キャンセルまたは(×)ボタンで終了し、端末で以下のコマンドを入力します
手順記載についての説明:
以下の記載では、Ubuntu を起動 > 端末 アプリを起動 > 以下の入力コマンドの内容を入力します
$は入力しなくてよいです
先頭に$が無い行は入力後の応答・ログを参考のため記載している行です
この行は入力する必要はありません、また、個々の環境で出力される詳細は異なります
$ 入力コマンド
応答・ログ(参考情報)
入力するコマンド:
sudo fuser -vki /var/lib/dpkg/lock
sudo apt purge snapd
sudo dpkg --configure -a
sudo apt update
sudo apt upgrade
sudo apt dist-upgrade
sudo apt install snapd
実行例:
$ sudo fuser -vki /var/lib/dpkg/lock
[sudo] tag のパスワード:
USER PID ACCESS COMMAND
/var/lib/dpkg/lock: root 10420 F.... dpkg
プロセス 10420 をkillしますか? (y/N) y
$ sudo apt purge snapd
[sudo] tag のパスワード:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下のパッケージは「削除」されます:
snapd*
アップグレード: 0 個、新規インストール: 0 個、削除: 1 個、保留: 3 個。
この操作後に 134 MB のディスク容量が解放されます。
続行しますか? [Y/n] Y
(データベースを読み込んでいます ... 現在 193806 個のファイルとディレクトリがインストールされています。)
snapd (2.51.1+20.04ubuntu2) を削除しています ...
<省略>
$ sudo dpkg --configure -a
$ sudo apt update
<省略>
$ sudo apt upgrade
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
アップグレードパッケージを検出しています... 完了
以下のパッケージはアップグレードされます:
python3-software-properties software-properties-common
software-properties-gtk
アップグレード: 3 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。
101 kB のアーカイブを取得する必要があります。
この操作後に追加で 14.3 kB のディスク容量が消費されます。
続行しますか? [Y/n] Y
<省略>
$ sudo apt dist-upgrade
<省略>
$ sudo apt install snapd
<省略>
Guest Additions のインストール (ホストOS用オプション機能)
Ubuntu起動画面 > デバイス > Guest Additions CDイメージの挿入...
実行 ( 1回 実行 ボタンを押したら、次に立ち上がってきた場合はキャンセルで良い )
実行 ボタンを押すと 端末 アプリが立ち上がりインストールが開始します
Press Return ・・・が表示されたら、return キーを押して端末を閉じます
Ubuntuを電源オフ、メディアを再起動
右上の電池マークを左クリック > 電源オフ します
Ubuntuが停止したら、取り外さないとUbuntuの起動ができなくなるため、設定 から Guest Additions CDイメージ を取り外します
その後、Ubuntuの起動します。
ウインドウの拡大縮小などが出来るようになっているはずです
USBの設定
同様にシステムを停止します
ホストOSがWindowsの場合
Spresense ボードをUSBシリアルで接続するために、ドライバをインストール
Windows 7/8/8.1の場合 CP210x USB to serial driver for Windows 7/8/8.1
Windows 10の場合CP210x USB to serial driver (v10.1.3) for Windows 10
Windows 10の例:
ダウンロードファイルを解凍し、フォルダCP210x_Universal_Windows_Driverを開く
64bitの場合は CP210xVCPInstaller_x64.exe を起動
32bitの場合は CP210xVCPInstaller_x86.exe を起動
SpresenseをUSBケーブルでホストPC(Windows)に接続します
デバイスマネージャーで Slicon Labs CP210・・・が認識されます
VirtualBoxの仮想OS > 設定 > USB > 右端上から2つ目(USBと+のアイコン) を左クリック
Slicon Labs CP210・・・を左クリック > USBデバイスフィルタに追加 される
OK ボタンで画面を閉じます
開発環境 のセットアップ
開発用アプリケーションのインストール
makeなど開発に必要なものが無いため、インストールします
$ sudo apt-get install build-essential
シリアル通信の設定
ログイン中のユーザーを dialout グループに追加し、再起動します
$ sudo usermod -a -G dialout ログイン中のユーザー名
$ sudo shutdown -r now
例:
$ sudo usermod -a -G dialout tag
起動後、ログインし、Ubuntu 上でのシリアルポート名を確認
/dev/に出力されたttyUSB??を追加したものがシリアルポート名です
以下の例では シリアルポート名は /dev/ttyUSB0 になります
$ dmesg | grep "cp21.*attached"
[ 7.306676] usb 1-2: cp210x converter now attached to ttyUSB0
Spresense 開発環境に必要なアプリケーションのインストール
必要なツールを以下のコマンドでダウンロード、インストールします
しばらく時間がかかります
$ mkdir -p ~/Dev/Spresense
$ cd ~/Dev/Spresense
$ wget https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh
$ bash install-tools.sh
注意:Proxy設定が必要なネットワーク/ネットワークエラーになる場合、以下のコマンド投入後にwget を再実行すること
export http_proxy=http://プロキシーサーバー名/IPアドレス:ポート番号
export https_proxy=http://プロキシーサーバー名/IPアドレス:ポート番号
ツールを利用するための設定を反映
$ source ~/spresenseenv/setup
$ cp ~/.bashrc ~/.bashrc.org
$ echo "source $HOME/spresenseenv/setup" >> ~/.bashrc
Spresense SDK リポジトリからソースコードをダウンロードし、開発環境をビルド、インストールします
$ cd ~/Dev/Spresense
$ git clone --recursive https://github.com/sonydevworld/spresense.git
VSCode のインストール
VSCode は様々な環境で動作する開発者向けのツールです
編集、デバッグ、デプロイなどが、1つのアプリケーションで実施でき便利です
VSCodeのインストーラをダウンロード
注意) VirtualBoxのUbuntu にログインして作業します
画面左端からFireFox(Webブラウザ)アイコンをダブルクリックし起動します
VSCodeウエブサイトのURL https://code.visualstudio.com/ を入力しアクセス
Ubuntuは .deb の方を左クリック
練習のために、今回はファイルを保存(ダウンロード)を選び OK ボタンを押します
ダウンロードが完了後、完了しました表示が出ます
ファイルを確認するため 端末 アプリを起動 (左下 > 端末 を検索)
ダウンロードしたファイルを確認
英語と日本語の切替は control + space(controlとspaceを同時に押す)
$ cd ~/ダウンロード
tag@IoT-Ubuntu:~/ダウンロード$ ls
code_1.62.3-1637137107_amd64.deb
ダウンロードしたファイルから VSCode をインストール
$ sudo apt install ./code_1.62.3-1637137107_amd64.deb
VSCode の日本語化
Japanese Language Pack をインストールして表示内容やメニュー等を日本語にします
インターネットに接続した状態で VSCode を起動します 画面左下 > VSCode を検索
起動後、しばらく待つと右下にJapanese Language Pack をインストールして再起動 が出ます
表示されない、消えた 場合は VSCode を × で終了後、再度起動してください
自動的に VSCode が再起動され、表示が日本語に変わります
VSCode に Spresense 拡張機能をインストール
Spresense 開発を VSCode で行えるようにSpresense 拡張機能をインストールします
VSCode 左端の 拡張機能 アイコンを押す
spresense を検索し、インストール
インストールが開始されます
ワークスペースの作成
Spresense 拡張機能の Spresense: Workspace Setup Wizard を使って開発用のディレクトリを作成します
今回作成するワークスペースは以下の構成になります
・Spresense SDK パス
~/Dev/Spresense/spresense
・プロジェクトフォルダーパス(新規に作成します)
~/Dev/Spresense/myproject
・ワークスペースファイル(ワークスペース情報の保存先、後ほど作成)
~/Dev/Spresense/myproject.code-workspace
F1キーを押し、検索画面へSpresense Workspaceと入力
Spresense: Workspace Setup Wizardを選択し、起動します
それぞれの 参照 ボタンを押し、ディレクトリを選択していきます
Spresense SDK のデイレクトリを開き、右上の OK ボタンを押す
プロジェクトフォルダーパス(新規に作成します)
~/Dev/Spresense に、myproject ディレクトリを新規作成
プロジェクトフォルダーパス(新規に作成します)を開いた状態になるので、右上の OK ボタンを押す
作成 ボタンを押します
信頼しますか と聞かれるので はい ボタンを押します
作成したワークスペースをメニューの ファイル > 名前を付けてワークスペースを保存 で、保存しておきます
~/Dev/Spresense に、myproject.code-workspace で保存
Hello Spresense!!! の表示
アプリケーションコマンドの追加
・追加対象プロジェクトフォルダー
~/Dev/Spresense/myproject
・アプリケーションコマンド名
myapps
F1キーを押し、検索画面へSpresense projectと入力
Spresense: Add to project holderを選択し、起動します
次へ を押します (複数出る場合は、追加したい先を選択すること)
アプリケーションコマンド を選択し、次へ ボタンを押します
アプリケーションコマンド名 myapps を入力し、作成 ボタンを押します
myapps_main.cが開きます
プログラムを修正
myapps_main.c を全て削除し、以下のプログラムを記載します
#include <sdk/config.h>
#include <stdio.h>
int myapps_main(int argc, char *argv[])
{
printf("Hello Spresense!!!\n");
return 0;
}
ファイル > 保存 もしくは ctrol + s で変更を保存します
ビルドのコンフィグレーション
ビルド( プログラムをコンパイルしSpresenseが実行できるデータにすること )を行うための事前設定をします
画面右下に Cにお勧めの拡張機能をインストールしますか? が出ている場合は、インストールしてください
C/C++の拡張パックがインストールされます
F1キーを押し、検索画面へ spresense sdk と入力
Spresense: SDK Config を選択し、起動します
myprojectを選びます
コンフィグレーションメニューの起動に少し時間がかかります
コンフィグレーションメニューが表示されたら 新規追加 を左クリック
何も選択せずに OK を左クリック
プロジェクトのビルド
注意:修正したプログラム+Spresenseで動作するためのプログラムがビルド対象になるため、環境によっては数十分かかります
VSCode左端、一番上のアイコンを左クリックしエクスプローラーを開く
myproject (ビルドしたいプロジェクトフォルダー)の上で右クリック、プロジェクトメニューから Spresense: アプリケーションのビルド を選択
VSCode右下に ビルドしています が表示されます
こちらの画面は x で閉じても構いません
ビルドが終了するまで ターミナルはタスクで再利用されます、閉じるには任意のキーを押して下さい。 が表示されるまで 待ちます
VSCodeのウインドウを左クリックし、任意のキー(Enterなど)を押し、ターミナルを閉じます
エクスプローラーに out配下のファイルが作られたことを確認します
Spresenseボードへの書き込みと動作確認
SpresenseをUSBケーブルでPC接に接続します
Ubuntu がシリアルポートを認識していることを確認
$ dmesg | grep "cp21.*attached"
[ 7.306676] usb 1-2: cp210x converter now attached to ttyUSB0
F1キーを押し、検索画面へ spresense serial port と入力
Spresense: シリアルポートの選択 を選択し、起動します
シリアルポートを選択します、Ubuntuが認識しているものと同じであることを確認
Spresenseへのブートローダの書き込み
F1キーを押し、検索画面へ spresense bootloader と入力
Spresense: ブートローダの書き込み を選択し、起動します
ブートローダのインストールには別途ダウンロード・・・ で OK ボタンを押します
Webブラウザが起動され表示されたページからfirmwareをダウンロードします
内容を確認し Accept ボタンを押します
ダウンロード後に表示される画面で ファイルを保存する を選択し OK ボタンを押します
(~/ダウンロードに保存されます )
画面左端のアイコンからVSCodeのウインドウに戻り、画面右下の ブートローダーのインストールを・・・の OK ボタンを押します
~/ダウンロードにダウンロードしたファイルを選択し、画面右上の 開く を左クリック
ブートローダがSpresenseにインストールされます
終了したらターミナル画面からメッセージが消えます
ビルドバイナリの書き込み
VSCode左端、一番上のアイコンを左クリックしエクスプローラーを開く
myproject (ビルドしたいプロジェクトフォルダー)の上で右クリック、プロジェクトメニューから Spresense: ビルドと書き込み を選択
右下のターミナルにビルドと書き込みのログが出力されます
Spersenseへ書込み(インストール )中
終了したら、シリアルターミナルが自動的に起動されます
シリアルターミナルで myapps を入力しエンターキーを押すと
Hello Spresense!!! と表示されます
参考
Developer Tools - Sony Developer World
Spresense SDK スタートガイド (IDE 版)