PlatformIO で Spresense

(2) Spresenseのパッケージをインストール

  • 「QUICK ACCESS」→「Miscellaneous」→「PlatfromIO Core CLI」をクリック。
  • TERMINALが開いて pio コマンドのヘルプが表示される。
  • TERMINALで下記コマンドを実行。
pio pkg install -g -p https://github.com/maxgerhardt/platform-sonyspresense.git

(3) プロジェクトの作成

  • 「PROJECT TASKS」→「Create New Project」をクリック。
  • 「Board」で「Spresense (1.5MB RAM, 768k Flash)(Sony)」を検索して選択。
  • 「Finish」をクリックでプロジェクトが作成される。初回は時間がかかる。
  • platformio.ini は下記のようになる。
[env:spresense]
platform = sonyspresense
board = spresense
framework = arduino

(4) マルチコアを利用する場合

  • platformio.ini を下記のように修正する。
[env]
platform = sonyspresense
board = spresense
framework = arduino

[env:spresense_mainCore]
build_src_filter = +<main/>

[env:spresense_subCore1]
build_flags = -DPIO_FRAMEWORK_ARDUINO_CORE_SUB_CORE_1
build_src_filter = +<sub1/>
  • src フォルダの下に main フォルダと sub1 フォルダを作成する。
  • main フォルダと sub1 フォルダの下にそれぞれのソースファイルを作成する。

(5) メインコア/サブコアの環境切り替えとビルド&書き込み

  • 下部のバーにある、プロジェクト環境切り替えボタン(フォルダのアイコン?)をクリックすると、env:spresense_mainCore か env:spresense_subCore1かを選択できる。
  • メインコア/サブコアそれぞれに切り替えてビルドとアップロードをおこなう。
  • ところが書き込み時に下記のエラーが発生する。
if isinstance(callback, collections.Callable):
AttributeError: module 'collections' has no attribute 'Callable'

(5+) エラーの原因と解決

  • 原因はPythonのバージョン問題。 (python 3.9以前に書かれた flash_writer.py が python 3.11.7 環境でエラーになっている。)
  • flash_writer はPythonスクリプト以外にOSごとのバイナリもあるのでそちらを使うように upload_command を platform.io に追記する。
  • 下記はWindowsの場合。${platformio.packages_dir} の実際のパスは C:\Users\ユーザ名\.platformio\packages\
[env]
platform = sonyspresense
board = spresense
framework = arduino
upload_command = ${platformio.packages_dir}/tool-spresense/flash_writer/windows/flash_writer -s -c $UPLOAD_PORT -b $UPLOAD_SPEED -d -n -s $SOURCE

(6) Library Dependency Finder の設定

  • 条件付きコンパイルするようなソースの場合、ライブラリの依存関係が正しく認識されないことがある。
  • 例えば、ssprocLib ライブラリのサンプルスケッチである YuruHorn_SubCore1 をビルドすると下記のようなエラーが出る。
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Scanning dependencies...
(中略)
|-- Sound Signal Processing Library for Spresense @ 1.3.0
(中略)
.platformio\packages\framework-arduinosonyspresense\libraries\File\src\File.cpp:35:
File.h:24:2: error: #error "File library is NOT supported by SubCore."
  • Library Dependency Finder に条件付きコンパイルを考慮するよう platform.io に下記の指定を追加するとビルドが通る。
lib_ldf_mode = chain+

(7) その他の設定

メモリサイズの設定などは下記を参照。

参考