search
LoginSignup
24

More than 3 years have passed since last update.

posted at

updated at

SONY SPRESENSEボードを使ってみる

SONYから組込用ボードSPRESENSEボードが出ていたので、どんなものやらと購入していろいろ調査してみることにしました。普段はRas.PI一辺倒のユーザーですが、Ras.PI, Arduinoなどとの比較をしてみたいと思います。

購入した理由としては、GPS(QZSS/GLONASSにも対応:GPS(L1-C/A), QZSS(L1-C/A), GLONASS(L1), WAAS, QZSS(L1-S))が使えるのと、Arm Cortex-M4F 6コア搭載ということで、結構、処理能力がありそうなこと、さらにSONYセンサーのカメラモジュール(5MP,RAW撮影可能)があるということです。いろいろ遊べそうなボードです(全体的にやや高いですが....)。

なお、Spresense 拡張ボードはArduino Unoとの互換性がありますが、ピン仕様についてはArduino Uno と一部異なる部分がありますのでご注意下さい(https://developer.sony.com/ja/develop/spresense/developer-tools/hardware-documentation#_spresense_%E3%81%A8_arduino_uno_%E3%81%AE%E9%81%95%E3%81%84 )。

購入したもの(from Switch Science)

  • SONY SPRESENSEメインボード
  • SONY SPRESENSE拡張ボード(メインボードを取り付けるタイプ)
  • SONY SPRESENSEカメラ拡張ボード
  • WiFi Add-on for SPRESENSE
  • SPRESENSE用ピンヘッダ&ユニバーサル基盤少々
  • その他、転がってたもの(USBケーブル、センサー類)

開発サイトを見ると、加速度、気圧、地磁気などいろいろセンサー類は出ているようです。
https://developer.sony.com/ja/develop/spresense/
Digi-keyなどからは手配できるようですが、とりあえず手持ちの中華IMUセンサを使ってみることにします。

開封の儀

左から、メインボード、拡張ボード、WiFi Add-onです(カメラモジュールはまだ届いてなかったので後から追記します。)
P_20190107_204606.jpg

PCとの接続&開発環境

一般的なマイクロUSB-Bでシリアル接続します。開発環境は、Arduino IDEもしくはオリジナルのSPRESENCE SDKが使えるようです。また、開発PCとの接続にはCP210x USB to serial driverが必要となります。デバイスマネージャのポート(COMとLPT)に、CP210xUSB to UART Bridge (COM6)などと出てくれば認識されています。COMポート番号は後で利用しますので確認しておきます(今回はCOM6でした)。

ピンヘッダなどは、開発サイトに掲載されていた以下の図をご覧ください。
Main-Board.jpg
Extention-Board.jpg
(出典:https://developer.sony.com/ja/develop/spresense/specifications)

拡張ボードとの接続

PWMや3.3V/5VでのI/Oに必要なボードです。マイク入力、microSDカードも使えます。
メインボードのみでは、"All Spresense main board pins operate at 1.8V"と1.8V入出力のようなので、市販のセンサー類をGPIOで制御したい場合は、やはり拡張ボード経由が必要と思われます。

ホームページに”Do not separate the Spresense main board from the extension board by force once mounted.”とかいう記載があったので、1回付けたら外せないようになってるのかもしれません。

また、拡張ボードにもマイクロUSBで接続できますが、通常は拡張ボードに取り付けたメインボードのマイクロUSBと開発PCを接続すればよいようです。拡張ボード上にあるUSBコネクタを利用した場合は、Mass Storage Classとして認識され、SDカードをストレージとして活用でき、計測データのやりとりを行うことができるとのことです。後から試してみよう。

P_20190107_215209[1].jpg

開発環境:Arduino IDE(最新1.8.8@2019/1)を利用する場合

Arduino IDEを開発PCにインストールし、提供されているArduino互換ライブラリをArduino IDE Board Manager経由でインストールして利用します。現状の開発サイトでは、Spresense Arduino Library specific libraryとしてAudioとGNSSの2つのライブラリが示されています。

  1. Arduino IDEの起動
  2. ファイル→環境設定: "追加のボードマネージャのURL"に以下のURLを入力してOK https://github.com/sonydevworld/spresense-arduino-compatible/releases/download/generic/package_spresense_index.json
  3. ツール→ボード→ボードマネージャを選択
    1. Spresenseを検索して出てきた”Spresense Reference Board”を選択してインストールします(現在ver.1.1.2)。
    2. 以上でIDE側の設定は完了です。

Boot loaderのインストール

いわゆるファームウェアの更新方法です。

  1. ツール→ボード→Spresenseを選択
  2. ツール→ポートで上述のCOMポートを指定(COM6)
  3. ツール→書込装置→Spresense Firmware Updaterを選択
  4. ツール→ブートローダを書き込むを選択
    1. 画面が出てきて、ファームウエアのzipファイルをダウンロードして、ドラッグ&ドロップするよう指示されますので、従います。zipファイルは解凍する必要はないようです。また、ファームウェアのバージョンはver.1.1.0でした。
    2. 書き込みが終われば、自動的にrebootされます。

サンプルスケッチ:メインボード上の4つのLEDのLチカ

LED.ino
void setup() {
    pinMode(LED0, OUTPUT);
    pinMode(LED1, OUTPUT);
    pinMode(LED2, OUTPUT);
    pinMode(LED3, OUTPUT);
}

void loop() {
    digitalWrite(LED0, HIGH);
    delay(100);
    digitalWrite(LED1, HIGH);
    delay(100);
    digitalWrite(LED2, HIGH);
    delay(100);
    digitalWrite(LED3, HIGH);
    delay(1000);

    digitalWrite(LED0, LOW);
    delay(100);
    digitalWrite(LED1, LOW);
    delay(100);
    digitalWrite(LED2, LOW);
    delay(100);
    digitalWrite(LED3, LOW);
    delay(1000);
}

サンプルスケッチ:その他の例

上述のライブラリを導入すると、ファイル→スケッチ例→Spresenseのスケッチ例から、様々なスケッチを参考にすることが可能です。GNSSのサンプルもありました。
image.png

開発環境:SPRESENSE SDKを利用する場合

チップの性能を発揮するには、こちらを使用することが望ましいようです。
https://developer.sony.com/ja/develop/spresense/developer-tools/get-started-using-nuttx
に使用方法が書かれていますので、順に追っていきます。

使用OSでの設定(WSL on Windows 10)

SDKを導入するOSは64bit LinuxでUbuntuのみ動作確認されているようです。Windows10上のWSLからできないかと思い調べたところ、すでに、https://qiita.com/FlyingYacht/items/0f49ed82b4912381ffe7という記事がありましたので、参考にさせて頂きます。

1.WSLを起動し、必要なパッケージをインストールします。

$ sudo apt-get install git gperf libncurses5-dev flex bison gcc-arm-none-eabi genromfs pkg-config autoconf automake cmake

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 https://github.com/sonydevworld/spresense.git

4. WSLのユーザー"user"をdialoutのグループに追加します。

$ sudo usermod -a -G dialout user

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

Arduiono IDEから書き込んだはずだが、なぜかWarningが出たので、以下のようにしてダウンロード&インストールします。

https://developer.sony.com/file/download/download-spresense-firmware-v1-1-000でEULAに同意してzipファイルをダウンロード
$ tools/flash.sh -e spresense-binaries-1.1.0.zip (WSLへのインストール)
Update succeed.と表示されれば成功(この時点ではWSL上に展開されただけ)

→ ここからWSLに特有の作業です。ボードはWindows上ではCOM11として認識されているとします(デバイスマネージャ上で115200bps, データビット8bit, パリティなし、ストップビット1, フロー制御なし)。
Windows10のFall creators updateからWSLからCOMポートのデバイスとシリアル通信ができるようになったはずなので(http://matsuneko22.hateblo.jp/entry/2017/12/09/144803)、以下のような設定を行います。

$ sudo chmod 666 /dev/ttyS11
$ stty -F /dev/ttyS11 -a 
speed 115200 baud; rows 0; columns 0; line = 0; ....と出てくれば接続OK
$ ./tools/flash.sh -l ../firmware/spresense -c /dev/ttyS11 (ブートローダーのボードへの書き込み)
→ こんな感じで書き込みが終われば成功です。
>>> Install files ...
install -b 115200
Install ../firmware/spresense/gnssfw.espk
Waiting for XMODEM (CRC or 1K) transfer. Ctrl-X to cancel.
..............................................................................................................................................................................4
50336 bytes loaded.
Package validation is OK.
Saving package to "gnssfw"
updater# install -b 115200
Install ../firmware/spresense/loader.espk
Waiting for XMODEM (CRC or 1K) transfer. Ctrl-X to cancel.
....................................................................................................................115856 bytes loaded.
Package validation is OK.
Saving package to "loader"
updater# sync
updater# Restarting the board ...
reboot

サンプルコード(Hello World)のビルド&実行

nuttx.spk というバイナリイメージがsdkフォルダに作成され、Spresenseメインボードにアップロードして実行する流れになります。

$ cd spresense/sdk
$ tools/config.py --kernel release   (NuttX Kernelのコンフィグレーション)
$ tools/config.py examples/hello (SDKのコンフィグレーション)
$ make buildkernel
$ make
$ tools/flash.sh -c /dev/ttyS11 nuttx.spk

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

Window上の適当なターミナルソフトウェアからアクセスしてみます。今回は、mobaXtermのシリアル通信(minicomの設定でハードウエアフロー制御なしで接続)してみました。NuttX上のnshで、helloコマンドを打てば、Hello, World!と返ってきます。SnapCrab_NoName_2019-1-8_10-45-28_No-00.png

サンプルアプリケーション(GNSS)のビルド&実行

$ cd spresense/sdk
$ tools/config.py --kernel release (Kernelコンフィグ)
$ tools/config.py examples/gnss (SDKコンフィグ)
$ make buildkernel (イメージビルド)
$ make
# tools/flash.sh -c /dev/ttyS11 nuttx.spk (イメージアップロード)
>>> Install files ...
install -b 115200
Install nuttx.spk
Waiting for XMODEM (CRC or 1K) transfer. Ctrl-X to cancel.
.................................................................................................................................................1
58960 bytes loaded.
Package validation is OK.
Saving package to "nuttx"
updater# sync
updater# Restarting the board ...
reboot

Windows側のmobaXtermからシリアル接続します。
nshプロンプトでgnssと入力します。
測位ができていないと、

No Positioning Data

という表示と、起動時を0時とした時刻が表示されます。
測位できた場合、およそ1分ぐらいで、グリニッジ標準時での時刻が表示されます。
アンテナの大きさのせいか、衛星をつかむのに窓際では難しいようで、
少し外に出してやると測位できました。
また、いったん衛星をつかむことができれば、窓際でも再補足は容易です。

Hour:2, minute:2, sec:7, usec:568
LAT 38.55.4741
LNG 141.6.4415
Hour:2, minute:2, sec:8, usec:571
LAT 38.55.4741
LNG 141.6.4417

カメラボードを使ってみる

カメラボードを取り付けてArduinoのCameraサンプルスケッチを利用して画像取得してみました。SDカードに書き込むのですが、最初そこらに転がってた512MBのマイクロSDカードを使ったら書き込みされず、32GB microSDHCカードにしたら書き込んでくれました。
レンズカバーシールをはがしてから撮影してみました。
なぜか周辺が暗いのですが、レンズ調整とか必要なんでしょうか?
P_20190118_085728.jpg
PICT011.JPG

参考サイト

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
24