概要
- ソニーのシングルボードコンピュータ
Spresense
及びSpresense用カメラモジュールを使って、公式で公開されているサンプルプログラムを動かした。 - 大体READMEの手順に従ったが、ところどころ詰まるところがあったのでメモとして残しておく。
Spresenseの簡単な説明
- ソニーが開発したシングルボードコンピュータ。
Arduino IDE
で開発可能。NuttX
というリアルタイムOSベースのSpresense SDK
でも開発できる(今回はこっち)。- 機能の主な特徴は以下。
- GPSが標準で内蔵されている。
- マルチコア(6コア!)プロセッサ。
- メインボード単体だとネットワーク機能が使えないという点が個人的にはネックだと思っている。
- Spresenseが出る少し前に流行し始めた
EPS32
系にすべて持っていかれている印象がある。
- Spresenseが出る少し前に流行し始めた
サンプル実行手順
今回動かしたサンプル
今回はカメラモジュールの動作確認がしたかったので公式が公開している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.h
198行目~に定義されている。
#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に関しては開発者フォーラムの方にそこそこ情報がありそう。