Spresense HeaderSpresense Header

Spresense - IoTの新しい体験をあなたの手で

Spresense を使って、あなたならではの新しいIoTシステムを作ってみませんか?IoTの未来は、あなたの手の中にあります。

Spresense SDK

1. Spresense SDK の使い方

この章は、 Spresense SDK のインストール、セットアップならびに簡単なサンプルアプリケーション Hello, World! の作成について解説しています。Spresense SDK の基本的な使い方を学ぶことができます。

1.1. Spresense SDK の開発環境の構築

Spresense SDK は 64bit Linux Ubuntu で動作確認されています。それ以外のプラットフォームには対応していません。

1.1.1. Spresense SDK の開発ツールのインストール

  1. GCC ARM toolchain の他、必要なパッケージをインストールします。

    $ sudo apt-get install git gperf libncurses5-dev flex bison gcc-arm-none-eabi genromfs pkg-config autoconf automake
  2. nuttx-tools から kconfig-frontends を取得し、インストールします。

    $ git clone https://bitbucket.org/nuttx/tools.git
    $ cd tools/kconfig-frontends/
    $ ./configure --disable-shared
    $ make
    $ sudo make install
  3. Spresense SDK リポジトリからソースコードをダウンロードします。

    $ git clone --recursive git@github.com:sonydevworld/spresense.git

1.1.2. USB接続の設定

  • 64bit版 Linux Ubuntu 16.04 ではシリアルポートをArduino IDEで利用できるように次の設定をします。

    1. Ubuntuのユーザを dialout のグループに追加します。

      $ sudo usermod -a -G dialout <user-name>
    2. Ubuntuを再起動します。

    3. Spresense メインボードへUSBを接続します。

      spresense musb connect
      図 1. メインボードへのUSBの接続
    4. Spresense ボードのUSBを接続し直したら完了です。

接続し直すことでこの設定が反映されます。
この設定を行わない場合Arduinoで作成したソフトウェアをSpresense ボードにアップロードできません。

1.2. サンプルアプリケーション "Hello, World!" のビルド手順

ダウンロードしたSpresense SDKフォルダに移動し、次の手順でビルドします。

  1. sdk ディレクトリへ移動します。

    $ cd spresense/sdk
  2. NuttX Kernelのコンフィギュレーションを行います。

    $ tools/config.py --kernel release
  3. SDKのコンフィギュレーションを行います。

    今回は hello というExampleアプリケーションをビルドするので examples/hello を指定します。

    $ tools/config.py examples/hello
    コンフィギュレーションについての詳細はコンフィギュレーションを参照してください。
  4. ビルドを行います。

    $ make buildkernel
    $ make
    ビルドについての詳細はビルドを参照してください。

全ての手順がうまくいけば、 nuttx.spk というバイナリイメージが、 sdk フォルダに作成されます。このイメージは Spresense で、実行可能なアプリケーションイメージであり、そのまま Spresenseメインボードにアップロードすることができます。

1.3. Spresense メインボードへのブートローダーのインストール

Spresense メインボードを正しく動作させるためにはバージョンに合わせたブートローダーのインストールが必要になります。

Spresense ボードは出荷状態ではローダーはインストールされていません。
Spresenseのローダーを利用するためにはEnd User License Agreementの同意が必要です。

SDKのコンフィギュレーション 及び Spresense メインボードへのイメージのロード 時にバージョンに合わせたブートローダーが見つからない場合は次のような WARNING が出るのでそれに従ってインストールを行います。

WARNING: New loader v1.0.003 is required, please download and install.
         Download URL   : https://developer.sony.com/file/download/spresense-binaries-vx.x.x.zip
         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 /home/user/mySpresense/spresense/firmware/spresense -c <port>
  1. バイナリのダウンロード

    WARNING 上の Download URL に記載されているリンクを開きバイナリのZIPファイルをダウンロードします。

  2. バイナリのPCへのインストール

    ダウンロードしたZIPファイルで次のコマンドを使いPCにインストールします。

    $ ./tools/flash.sh -e spresense-binaries-vx.x.x.zip
  3. バイナリのSpresense メインボードへのロード

    WARNING 上で表示されたコマンドをそのまま実行します。

    $ ./tools/flash.sh -l ../firmware/spresense -c <port>
  4. ロードが完了し自動で再起動されます。

1.4. Spresense メインボードへのイメージのロード

ビルドしたイメージ nuttx.spk をSpresenseにロードするためには tools/flash.sh を用います。

  1. Spresense メインボードとPCをUSBケーブルで接続します。

  2. Spresense メインボードが接続されているシリアルポートを探すには、以下のコマンドを試してみてください。

    $ dmesg | grep "cp21.*attached"
    [12220.625979] usb 1-1: cp210x converter now attached to ttyUSB0

    この場合は、 ttyUSB0 に接続されていることになります。フルパスは、 /dev/ttyUSB0 になります。

  3. 次のコマンドを使い nuttx.spk をSpresenseへロードします。

    $ tools/flash.sh -c /dev/ttyUSB0 nuttx.spk
    tutorial nuttx image load
    図 2. nuttx.spk ロード画面
  4. ロードが完了し自動で再起動されます。

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

ビルドしたイメージ nuttx.spk を実機へロードすると作成したプログラムが実行されます。 ここでは実行されているプログラムの動作確認をシリアルターミナルで行うための一例を説明します。

ここでは minicom というUbuntu上で使用できるシリアルターミナルを使います。

  1. シリアルターミナルのインストール

    $ sudo apt-get install minicom
  2. 次のコマンドでシリアルターミナルを開きます。

    $ minicom -D /dev/ttyUSB0 -b 115200 -s
    ボーレートは初期設定では 115200 ですが、SDKのコンフィギュレーションで変更した場合はここを変更してください。
  3. Serial port setup を選択します。

    tutorial nuttx minicom setting open
    図 3. minicom設定画面
  4. F キーを入力し Hardware Flow ControlNo にします。

    tutorial nuttx minicom setting done
    図 4. minicom設定内容
    Hardware Flow ControlNo にしない場合、コマンド入力が正しく行えません。
  5. EnterEsc キーの順に入力し次のように表示されればSpresense メインボードは正しく起動しています。

    tutorial nuttx minicom
    図 5. シリアルターミナル画面
  6. hello コマンドを実行し Hello, World! と表示されれば完了です。

    tutorial nuttx hello
    図 6. helloサンプルアプリケーション
シリアルターミナルを開くたびにSpresense メインボードはリセットされます

Spresense SDK の基本的な使い方は以上です。

2. サンプルアプリケーション GPS(GNSS)

この章では、GPS(GNSS)のサンプルアプリケーションの動作手順を示します。

2.1. ビルド&ロード手順

ダウンロードしたSpresense SDKフォルダに移動し、次の手順でビルドします。

  1. sdk ディレクトリへ移動します。

    $ cd spresense/sdk
  2. NuttX Kernelのコンフィギュレーションを行います。

    $ tools/config.py --kernel release
  3. SDKのコンフィギュレーションを行います。
    今回は gnss というExampleアプリケーションをビルドするので examples/gnss を指定します。

    $ tools/config.py examples/gnss
    コンフィギュレーションについての詳細はコンフィギュレーションを参照してください。
  4. ビルドを行います。

    $ make buildkernel
    $ make
    ビルドについての詳細はビルドを参照してください。

    全ての手順がうまくいけば、 nuttx.spk というバイナリイメージが、 sdk フォルダに作成されます。

  5. Helloのサンプルと同様、ビルドしたイメージ nuttx.spk をSpresenseに tools/flash.sh を用いてロードします。

    $ tools/flash.sh -c /dev/ttyUSB0 nuttx.spk
  6. ロードが完了し自動で再起動されます。

2.2. GPS動作確認

この nuttx.spk をSpresenseへロードするとGPSのプログラムが実行できます。

Helloサンプルと同様に、シリアルターミナルを開きます。

$ minicom -D /dev/ttyUSB0 -b 115200 -s

builtinされている、 gnss というアプリを実行すると、

tutorial gnss log1
図 7. `GPS起動時ログ

というログが表示されます。

測位ができていないうちは、

> No Positioning Data

という表示と、起動時を0時とした時刻が表示されます。 見晴らしの良い場所であれば、およそ、1分ぐらいで、グリニッジ標準時での時刻が表示されます。 およそ、3分ぐらいで、測位ができるはずです。

測位ができた場合は、

> Hour:9, minute:13, sec:20, usec:559
> LAT 35.25.6303
> LNG 139.22.1986

このような表示が行われ、緯度経度が取得できます。

3. サンプルアプリケーション Audio Player

この章では、Audio Playerのサンプルアプリケーションの動作手順を示します。

3.1. ビルド&ロード手順

ダウンロードしたSpresense SDKフォルダに移動し、次の手順でビルドします。

  1. sdk ディレクトリへ移動します。

    $ cd spresense/sdk
  2. NuttX Kernelのコンフィギュレーションを行います。

    $ tools/config.py --kernel release
  3. SDKのコンフィギュレーションを行います。
    今回は audio_player というExampleアプリケーションをビルドするので examples/audio_player を指定します。

    $ tools/config.py examples/audio_player
    コンフィギュレーションについての詳細はコンフィギュレーションを参照してください。
  4. ビルドを行います。

    $ make buildkernel
    $ make
    ビルドについての詳細はビルドを参照してください。

    全ての手順がうまくいけば、 nuttx.spk というバイナリイメージが、 sdk フォルダに作成されます。

  5. Helloのサンプルと同様、ビルドしたイメージ nuttx.spk をSpresenseに tools/flash.sh を用いて、ロードします。

    $ tools/flash.sh -c /dev/ttyUSB0 nuttx.spk
  6. ロードが完了し自動で再起動されます。

  7. Audio Playerの場合、デコード処理を行うDSPバイナリのロードが必要です。 DSPバイナリの置き場所は、SDカードか、SPI-Flashのどちらかを選択できますが、 ここでは、SDカードからロードする方法を行います。

    DSPバイナリのパスの指定は、アプリケーションコード(audio_player_main.cxx)内で指定します。 audio_player_main.cxx では、DSPBIN_PATH で指定しています。

    #define DSPBIN_PATH "/mnt/sd0/BIN"

    であれば、SDカードになります。

    SPI-flashにしたい場合は、"/mnt/spif/BIN" を指定してください。 また、nullを指定すると、Configで設定されたパスになります。

    この "/mnt/sd0/BIN" は、PCで読み込んだ時に、ルートディレクトリの下の BIN/ になります。
    このディレクトリを作成し、ここに必要なコーデックのDSPを置きます。

    MP3でデコードする場合は、
    spresense/sdk/modules/audio/dsp/ の下の MP3DEC を選択してください。

  8. 同時に再生したい音楽ファイルをSDカードに書き込みます。 audio_player_main.cxx では、AUDIOFILE_ROOTPATH で指定しています。

    #define AUDIOFILE_ROOTPATH "/mnt/sd0/AUDIO"

    このため、PC上で読み込んだ時に、ルートディレクトリの下の AUDIO/ 以下に、 再生したいオーディオファイルを置いて下さい。サブディレクトリに置くこともできます。

  9. 現在のAudio Playerサンプルでは、簡易PlayListを利用した再生を行っています。 このため、playlistファイルの置き場所とファイル名を指定して再生します。 audio_player_main.cxx では、PLAYLISTFILE_PATH でパスを指定、 PLAY_LIST_NAMEでファイル名を指定しています。

    #define PLAYLISTFILE_PATH "/mnt/sd0/PLAYLIST"
    #define PLAY_LIST_NAME "TRACK_DB.CSV"

    このため、PC上で読み込んだ時に、ルートディレクトリの下の PLAYLIST/ 以下に、 TRACK_DB.CSV というファイルを作成してください。 + TRACK_DB.CSV`の中身は、`spresense/sdk/modules/audio/playlist/ の下の README.txt を参照してください。

これらすべてを用意することで、音楽再生が行えます。

3.2. Audio Playerの動作確認

この nuttx.spk を実機へロードするとAudio Playerのプログラムが実行されます。

Helloサンプルと同様に、シリアルターミナルを開きます。

$ minicom -D /dev/ttyUSB0 -b 115200 -s

builtinされている、 player というアプリを実行すると、

tutorial player log
図 8. `音楽再生時ログ

というログが表示され、音声が再生されます。

エラーが発生した場合は、オーディオサブシステムのエラーについてを参照してください。