SONYから発売されているSPRESENSEを使ってみたくなったので開発環境を用意しました。
公式には、Arduino LibraryとSPRESENSE SDKと2つの開発環境が用意されています。
Arduino Libraryの方はArduino IDEで開発するため、macOS、Linux、Windowsとマルチプラットフォームで開発ができます。
一方で、SPRESENSEのマルチコアを利用した開発など、高度な開発はできません。
SPRESENSE SDKを使うと、SPRESENSEの全ての機能が利用できる一方で、開発環境がUbuntuにしか対応していません。
今回はDockerを利用することで、macOSの上でビルドを行い、マイコンへの書き込みまでができるように試してみたいと思います。
基本的には、公式のSPRESENSE SDKチュートリアルにしたがって作業を進めていきますが、Ubuntu向けの説明となっているため改変しながら進めていきます。
事前準備
- gitコマンドが必要です。Xcodeをインストールし、gitが使えるようにしてください。
- Homebrewが必要です。こちらのドキュメントにしたがってインストールしてください。
- Dockerが必要です。Docker Desktop for Macをインストールしてください。
- USBシリアル変換チップのドライバが必要です。こちらから、CP210x USB to serial driver for Macintosh OSXをダウンロードしてインストールしてください。
- Python3系
kconfig-frontends のインストール
SPRESENSE SDKでは、ビルド環境の設定等にkconfigを利用しています。
Homebrewでインストールできたのでインストールします。
brew tap PX4/homebrew-px4
brew update
brew install kconfig-frontends
SPRESENSE SDKをダウンロードする
git clone --recursive https://github.com/sonydevworld/spresense.git
サンプルアプリケーションのビルド設定
コンフィギュレーションはmacで行います。
cd spresense/sdk
tools/config.py --kernel release
tools/config.py examples/hello
途中でunameのエラーが出ますが、問題ありません。(Cygwinかのチェックにしか -o
オプションは使われていません)
うまくいくと最後に以下のようなファームウエアを書き込む指示が出力されます。
WARNING: New loader v1.2.1 is required, please download and install.
Download URL : https://developer.sony.com/file/download/download-spresense-firmware-v1-2-001
Install command:
1. Extract loader archive into host PC.
./tools/flash.sh -e <download zip file>
2. Flash loader into Board.
./tools/flash.sh -l /Users/chibiegg/Downloads/spresense/firmware/spresense -c <port>
サンプルアプリケーションのビルド
ビルドはDockerイメージと起動スクリプトが用意されているのでそちらを使います。
cd ../
source ./spresense_env.sh
spresense make -j8 buildkernel
spresense make -j8
spresense_env.sh
をロードすると spresense
コマンドがAliasで用意されます。
spresense
の後に実行するコマンドを指定すると、Dockerのイメージの中で実行されるように作られています。
実行する際には ./spresense
ディレクトリがカレントディレクトリである必要があります。
うまくいくと sdk/nuttx.spk
ファイルが生成されています。
ブートローダーの書き込み
先ほどの出力に表示されたURL (https://developer.sony.com/file/download/download-spresense-firmware-v1-2-001) からZIPをダウンロードします。
表示された通りコマンドを実行してブートローダーを書き込みます。
cd sdk
./tools/flash.sh -e /Users/chibiegg/Downloads/spresense-binaries-v1.2.1.zip
./tools/flash.sh -l /Users/chibiegg/Downloads/spresense/firmware/spresense -c /dev/tty.SLAB_USBtoUART
うまく書き込めた場合、以下のような出力が出ます。
>>> Install files ...
install -b 115200
Install /Users/chibiegg/Downloads/spresense/firmware/spresense/loader.espk
|0%-----------------------------50%------------------------------100%|
######################################################################
118832 bytes loaded.
Package validation is OK.
Saving package to "loader"
updater# install -b 115200
Install /Users/chibiegg/Downloads/spresense/firmware/spresense/AESM.espk
|0%-----------------------------50%------------------------------100%|
######################################################################
28944 bytes loaded.
Package validation is OK.
Saving package to "AESM"
updater# install -b 115200
Install /Users/chibiegg/Downloads/spresense/firmware/spresense/gnssfw.espk
|0%-----------------------------50%------------------------------100%|
######################################################################
450768 bytes loaded.
Package validation is OK.
Saving package to "gnssfw"
updater# install -b 115200
Install /Users/chibiegg/Downloads/spresense/firmware/spresense/dnnrt-mp.espk
|0%-----------------------------50%------------------------------100%|
######################################################################
88352 bytes loaded.
Package validation is OK.
Saving package to "dnnrt-mp"
updater# sync
updater# Restarting the board ...
reboot
アプリケーションの書き込み
先ほどビルドしたサンプルプログラムを書き込みます。
./tools/flash.sh -c /dev/tty.SLAB_USBtoUART nuttx.spk
こんな感じの出力が出ます。
>>> Install files ...
install -b 115200
Install nuttx.spk
|0%-----------------------------50%------------------------------100%|
######################################################################
154304 bytes loaded.
Package validation is OK.
Saving package to "nuttx"
updater# sync
updater# Restarting the board ...
reboot
実行
あとは、元のチュートリアルの通りminicomなどでシリアルポートに接続して、hello
コマンドが実行できたらOKです。
minicomもbrewでインストールできます。
brew install minicom