Spresense SDKで開発してみる その1(環境構築、サンプルアプリケーションの実行)

はじめに

 今回はSpresense SDKを利用して、Spresenseにプログラムを書きこんでみました。

 Spresenseを使ってハードウェアを開発するならArduino IDEでプログラムを書く方が情報も多くて楽なのですが、なぜSpresense SDKを試すのかというとソフトウェアを開発してみたいからです。

 Node-RED MCUではESP32系のマイコンが主にサポートされていて、内部的にはESP-IDF、Moddable SDKが使われているのですが、Spresenseはサポートされていません。そこで、Node-REDのプラグインとして開発できないかなと考え中です。いろんな壁がありそうですが、趣味的にのんびり開発しようと思っています。

▼以前の記事はこちら

RumiCar-C3の改造 Spresense搭載編(HDRカメラ)

はじめに  今回はRumiCar-C3を改造して、Spresenseを搭載してみました。Spresenseぐらいのマイコンなら、より自動運転に近くなりそうですね。  カメラの位置を確認した…

Node-RED関連

ここではNode-RED関連の情報を集めています。 書籍 関連記事 関連記事RumiCar-C3の改造 Spresense搭載編(HDRカメラ) 2024年4月23日 3Dプリンターで新しい筐体づく…

関連情報

▼SpresenseのGitHub上のリポジトリはこちら

https://github.com/sonydevworld/spresense

▼Spresense SDKの開発ガイドはこちら

https://developer.sony.com/spresense/development-guides/sdk_developer_guide_ja.html

▼Spresense SDKのIDE版のスタートガイドはこちら。VS Code用の拡張機能があるようです。今回は利用しません。

https://developer.sony.com/spresense/development-guides/sdk_set_up_ide_ja.html

▼CLI版のスタートガイドはこちら。今回はこちらを参照しています。

https://developer.sony.com/spresense/development-guides/sdk_set_up_ja.html

 なお、Windows 10だとMSYS2でも環境を構築できるそうですが、私はうまくいかなかったので今回は触れていません。kconfig-conf not foundというエラーが出て、解決できませんでした。

 Spresenseをビジュアルプログラミングで開発できる環境は無いか調べてみたのですが、Scratchならありました。

▼こちらの記事ではScratchでSpresenseにプログラムを書きこんでいます。

https://spresense.livedoor.blog/archives/32578726.html

▼SpresenseのAmazonでの販売ページはこちら。今回はメインボードだけ使います。

WSL2のUbuntu 20.04で実行してみる

 WSL2の環境はROSを利用していたときに構築済みです。インストール方法はそのときの記事をご覧ください。

▼以前Windows 10のWSL2で環境を構築した、Ubuntu 20.04で実行しています。

WSL2を使ってみる その3(Ubuntu 20.04、ROS Noetic、Open Manipulator)

はじめに  今回はWSL2のUbuntu 20.04に、ROSをインストールしてみました。  前回構築したのはWSL2のUbuntu 22.04です。WSL2で複数のバージョンのUbuntu環境をインストー…

 ビルドに必要なツールをインストールします。

wget https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh
bash install-tools.sh

 インストールしたツールを使用可能にします。毎回実行する必要があります。

source ~/spresenseenv/setup

 リポジトリをcloneします。

git clone --recursive https://github.com/sonydevworld/spresense.git

 SpresesnseとUSBシリアルで接続するために、シリアルドライバをインストールする必要があります。

▼以下のリンクをクリックすると、ドライバがインストールされます。

https://github.com/sonydevworld/spresense-hw-design-files/raw/master/misc/usb-to-uart-bridge-vcp-drivers/CP210x_Universal_Windows_Driver-v11.1.0.zip

 解凍後、インストールを実行します。

▼infファイルを右クリックすると、インストールされます。

WSL2環境とUSBデバイスを接続する

 スタートガイドには書かれていなかったのですが、WSL2上のLinux環境でUSBデバイスにアクセスするには少し作業が必要です。

▼WSL2のUbuntuでlsusbを実行しても、CP210xのデバイスは表示されていません。

 WindowsのPowerShellを管理者権限で実行し、usbipd listで接続されているデバイスを確認します。

▼今回はCP210xのBUSIDが1-2になっています。

 以下のコマンドを入力して、USBデバイスを共有しました。

usbipd bind --busid 1-2
usbipd attach --wsl --busid 1-2

▼ちなみに、管理者権限で実行しないと、以下のようなエラーが表示されます。

 その後、WSL2のLinux環境でlsusbを実行すると、CP210xが表示されます。

▼デバイスが認識されています。

 この状態で、Linux上でのシリアルポートを確認しました。

dmesg | grep "cp21.*attached"

▼ttyUSB0になっています。

 今回のポート名は/dev/ttyUSB0になります。

 次にコンフィグレーションを実行します。

cd spresense/sdk
tools/config.py examples/hello

 このとき警告が表示されて実行できませんでした。

▼WARNING: New loader v3.2.0 is requiredと表示されています。

▼ブートローダーのインストールのページに、この場合の対処方法が書かれていました。

https://developer.sony.com/spresense/development-guides/sdk_set_up_ja.html#_%E3%83%96%E3%83%BC%E3%83%88%E3%83%AD%E3%83%BC%E3%83%80%E3%83%BC%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB

 表示されていたダウンロードURL先のZIPファイルをダウンロードし、コマンドを実行しました。

▼Download URLとして表示されていたものがこちら。Windowsのダウンロードフォルダにダウンロードしました。

https://developer.sony.com/file/download/download-spresense-firmware-v3-2-0

 ダウンロード先のURLでAgreementにAcceptする必要があります。

▼その影響で、wgetでダウンロードしても必要なZIPファイルではありませんでした。

▼HTMLドキュメントがダウンロードされていたみたいです。

 ブラウザならAcceptを押せばいいのですが、私はWSL2のデスクトップ環境を用意していません。

 今回は以下のコマンドでWindows環境でダウンロードしたZIPファイルを、WSL2上のUbuntu環境にコピーしました。

cp /mnt/c/Users/mgs_1/Downloads/spresense-binaries-v3.2.0.zip ~/spresense/sdk/

▼ZIPファイルをコピーできました。

 以下のコマンドでZIPファイルを展開し、Spresenseメインボードにロードしました。その後、先程実行できなかったコマンドを実行しました。

./tools/flash.sh -e <<ダウンロードしたzipファイル>>
./tools/flash.sh -l /home/user/spresense/firmware/spresense -c /dev/ttyUSB0
tools/config.py examples/hello

▼正常に実行されました。

サンプルアプリケーションを実行する

 Spresense SDKのビルドを行い、ボードに書き込みます。

make
tools/flash.sh -c /dev/ttyUSB0 nuttx.spk

▼問題なく実行できました。

 シリアルターミナルで動作を確認します。

sudo apt install screen
screen /dev/ttyUSB0 115200

▼Nutt Shellが表示されました。helloと入力すると、Hello, World!と返ってきます。

 screenを終了させる場合、Ctrlキー+Aキーの後にKキーを押してから、yを入力すると終了します。

▼ウィンドウの下の方で、本当に終了するかどうかを聞かれます。

ミニPCのUbuntu 20.04で実行してみる

 以前Ubuntu 20.04のデスクトップ環境をインストールしたミニPCで試してみました。WSL2の場合とほとんど同じ手順でした。

▼こちらの記事でインストールしました。

USBメモリでミニPCにUbuntuをインストールする(Rufus)

はじめに  今回はUSBメモリでミニPCにUbuntuをインストールしてみました。  身近にUSBでWindowsとUbuntuを切り替えている方がいたので、できることは知っていました。た…

▼こんな感じで挿しています。

 まずは以下のコマンドでシリアル通信の設定を行い、再起動する必要があるようです。

sudo usermod -a -G dialout <user-name>
sudo reboot

 ビルドに必要なツールのインストールを行います。

wget https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh
bash install-tools.sh

▼一度ダウンロードに失敗していたのですが、もう一度実行するとうまくいきました。

 インストールしたツールを使用可能にします。毎回実行する必要があります。

source ~/spresenseenv/setup

 シリアルポートは、WSL2の場合と同じttyUSB0でした。

dmesg | grep "cp21.*attached"

 コンフィグレーションを実行します。

cd spresense/sdk
tools/config.py examples/hello

▼今回もブートローダーの設定が必要でした。

▼Download URLとして表示されていたものがこちら。

https://developer.sony.com/file/download/download-spresense-firmware-v3-2-0

 デスクトップ環境だったのでブラウザでDownload URLにアクセスし、AgreementにAcceptしてダウンロードしました。

 その後、表示されていたコマンドを実行し、先程実行できなかったコマンドを実行しました。

./tools/flash.sh -e <<ダウンロードしたzipファイル>>
./tools/flash.sh -l /home/user/spresense/firmware/spresense -c /dev/ttyUSB0
tools/config.py examples/hello

 Spresense SDKのビルドを行い、ボードに書き込み、シリアルターミナルで動作を確認しました。

make
tools/flash.sh -c /dev/ttyUSB0 nuttx.spk
sudo apt install screen
screen /dev/ttyUSB0 115200

 NuttShellが表示されました。

▼helloと入力すると、Hello, World!!と表示されました。

 screenを終了させる場合は、Ctrlキー+Aキーの後にKキーを押してから、yを入力してください。

最後に

 Windowsでは環境を構築できなかったのですが、Linuxではできました。WSL2はデバイスにアクセスするために共有する必要があります。

 Node-RED MCUの環境を構築したときと同様に、Raspberry Pi 400でも構築を試したのですが、エラーが出ていました。対応策はあるみたいで、アーキテクチャの違いが原因のようです。

▼こちらの記事で紹介されていました。

https://qiita.com/cmm614/items/c96788d48c0b9148c335

 Spresense SDKのExamplesに関するチュートリアルがあったので、次はその内容を試してみようと思っています。当面の間はLinux環境で試します。

▼GNSSやAudio、Cameraなどのサンプルがいろいろあります。

https://developer.sony.com/spresense/development-guides/sdk_tutorials_ja.html

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です