概要

  • ソニーのシングルボードコンピュータSpresense及びSpresense用カメラモジュールを使って、公式で公開されているサンプルプログラムを動かした。
  • 大体READMEの手順に従ったが、ところどころ詰まるところがあったのでメモとして残しておく。

Spresenseの簡単な説明

  • ソニーが開発したシングルボードコンピュータ。
  • Arduino IDEで開発可能。
  • NuttXというリアルタイムOSベースのSpresense SDKでも開発できる(今回はこっち)。
  • 機能の主な特徴は以下。
    • GPSが標準で内蔵されている。
    • マルチコア(6コア!)プロセッサ。
  • メインボード単体だとネットワーク機能が使えないという点が個人的にはネックだと思っている。
    • Spresenseが出る少し前に流行し始めたEPS32系にすべて持っていかれている印象がある。

サンプル実行手順

今回動かしたサンプル

今回はカメラモジュールの動作確認がしたかったので公式が公開しているexamples/cameraを動かした。

実行環境

  • OS:Windows10上のWSL(Ubuntu16.04)
  • 開発環境:Spresense SDK

手順

基本はスタートガイド参照。

1.開発ツールのセットアップ、ブートローダのインストールを行う。

  • ここは公式の手順通りでいけるはずなので省略。

2.手順1.でSpresenseのプロジェクト一式をGitHubから落としてきているはずなので、その中のexamples/camera/README.txtを確認する。

  • READMEを読むと、液晶コントローラILI9340で駆動しているLCDを使って、カメラが取得した画像を表示できるようになっていることが分かる。

3.ILI9340で駆動しているLCDを用意してSpresenseにつなぐ。

  • 今回はちょうど手元にILI9341で駆動している2.2インチTFTがあったのでそれを使った。
  • ここが引っかかるポイントその1(だと思う)。
  • READMEを読むと、拡張ボードを使わない場合はSPI5のピンにSPI関係の4ピンをつなげばよいということは書いてあるのだが、TFTのDCピンとRESETピンの配線先ピンが分からない。
  • この問題に関しては、コードを読みこむ必要があり(本当はどこかに説明書きがあるのかもしれないが…)、/sdk/bsp/board/spresense/include/board.h198行目~に定義されている。
#if defined(CONFIG_LCD_ON_MAIN_BOARD) /* Display connected to main board. */
#define DISPLAY_RST     PIN_I2S0_BCK
#define DISPLAY_DC      PIN_I2S0_LRCK

#define DISPLAY_SPI     5
  • この記述から、DCピンはI2S0 LRCKピン、RESETピンはI2S0 BCKピンにつなげば良いことがわかる。

4.サンプルプログラムのコンフィグレーションを行う。

  • ここが引っかかるポイントその2。
  • READMEには/sdk/configs/device/camera-defconfigに何個か設定を追記して、コマンド./tools/config.py examples/camera device/lcdを実行すればよいと書いてあるが、これだとLCDに画像が映らない。
  • 理由は、/sdk/configs/device/camera-defconfigに設定を追記した場合、devise/camera-defconfigを変更したのだから、コマンド./tools/config.py examples/camera device/lcd devise/camera(追加)を実行しないと変更が反映されない。
  • そもそもここらへんの設定はexamples/cameraに対する設定なのだから、examples/camera-defconfigに書くべきだと思うのだが違うのだろうか…。
  • あと、これはなくても良いかもしれないが、サンプルプログラム中、画像の色形式についてYUV形式からRGB形式に変換する処理が含まれており、この部分を有効にするにはコマンド./tools/config.py examples/camera device/lcd devise/camera feature/imageproc(さらに追加)を実行する必要がある。

5.カーネルとSDKのビルドを行う。

  • 以下のコマンドでOK。
make buildkernel
make

6.Spresenseにプログラムを書き込む。

  • 以下のコマンドでOK。
tools/flash.sh -c /dev/ttyXXX(Spresenseが接続されているUSBポート) nuttx.spk

7.TeraTermとかでSpresenseに接続する。

8.Spresenseのプロンプトでコマンドcameraを実行する。

  • プロンプトに以下のように表示され、LCDにカメラからの画像が表示されればOK(のはず)。
NuttShell (NSH) NuttX-7.22
nsh> camera
nximage_initialize: Initializing LCD
nximage_initialize: Open NX
nximage_initialize: Screen resolution (320,240)
FILENAME:/mnt/spif/VIDEO001.YUV
FILENAME:/mnt/spif/VIDEO002.YUV
FILENAME:/mnt/spif/VIDEO003.YUV
FILENAME:/mnt/spif/VIDEO004.YUV
FILENAME:/mnt/spif/VIDEO005.YUV
FILENAME:/mnt/spif/VIDEO006.YUV
FILENAME:/mnt/spif/VIDEO007.YUV
FILENAME:/mnt/spif/VIDEO008.YUV
FILENAME:/mnt/spif/VIDEO009.YUV
FILENAME:/mnt/spif/VIDEO010.YUV

雑記

  • 後で少し調べてみたら開発者フォーラムにLCD接続に関する投稿があった。
    • ちょうど2日前の投稿。タイムリー。
  • Spresense SDKに関しては開発者フォーラムの方にそこそこ情報がありそう。