なぜ PlatformIO か?
Arduino IDEは初心者でも導入のハードルが低い開発環境ですが、その代償として使い勝手が悪い面があります。
- ビルドに無駄に時間がかかることがある。
- ボードの設定をスケッチごとに保存できない。
- ライブラリをスケッチごとに管理できない。
エディタが貧弱。← Arduino IDE 2.xでは改善されました。
加えて、Spresenseのマルチコアプログラミングでは、コアごとに別々にスケッチを開いてコアを選択して書き込むのが少し不便です。(シンプルなやり方ではありますが。)
VSCode + PlatformIOを使えばこれらの問題が解決します。
セットアップ
PlatformIOのセットアップ
VSCode および PlatformIO のセットアップについての情報はすでに沢山あるので省略します。
Spresenseのパッケージをインストール
PlatformIOはデフォルトではSpresenseをサポートしていないようなので、有志の方が公開されている下記のデバイス情報パッケージを利用します。
https://github.com/maxgerhardt/platform-sonyspresense
「QUICK ACCESS」→「Miscellaneous」→「PlatfromIO Core CLI」をクリックすると TERMINALが開くので、そこで下記コマンドを実行します。
pio pkg install -g -p https://github.com/maxgerhardt/platform-sonyspresense.git
使い方
プロジェクトの作成
「PROJECT TASKS」→「Create New Project」をクリックし、「+ New Project」をクリックすると「Project Wizard」が開きます。「Name」に適当な名前を付け、「Board」で「Spresense (1.5MB RAM, 768k Flash)(Sony)」を選択します。「Finish」をクリックするとプロジェクトが作成されます。初回はビルドツール等のダウンロードのため時間がかかります。
プロジェクトの設定はplatformio.ini
というファイルに記述します。デフォルトでは下記のようになっています。
[env:spresense]
platform = sonyspresense
board = spresense
framework = arduino
マルチコアを使用する場合
メインコアとサブコア1を使用する場合、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/>
[env]
セクションには共通の設定を書きます。[env:spresense_mainCore]
セクションにはメインコア用の設定を書きます。メインコア用のソースはsrc/main
フォルダに配置します。[env:spresense_subCore1]
セクションにはサブコア1用の設定を書きます。サブコア1用のソースはsrc/sub1
フォルダに配置します。
サブコア2~を使用する場合は、同様にセクションを増やします。build_flags
にサブコア用のビルドを指示するオプションを指定することに注意してください。
メインコア/サブコアの切り替えとビルド&アップロード
下部のバーにある、プロジェクト環境切り替えボタンをクリックすると、env:spresense_mainCore
か env:spresense_subCore1
かを選択できます。それぞれに切り替えてビルドとアップロードをおこないます。
ところが、アップロードを実行しようとすると下記のエラーが発生しました。これについては次に述べます。
if isinstance(callback, collections.Callable):
AttributeError: module 'collections' has no attribute 'Callable'
トラブルシュート
アップロード時のエラー
原因はPythonのバージョンでした。Spresenseへのアップロードをおこなうflash_writer.py
はpython 3.9以前に書かれたもののようで、python 3.10以降の環境ではエラーになります。
アップロードツールは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
なお、LinuxやMacの場合は、アップロードツールを実行可能なようにパーミッションの設定も必要です。
Library Dependency Finder の設定
条件付きコンパイルするようなソースの場合、ライブラリの依存関係が正しく認識されないことがあります。 例えば、ssprocLibライブラリのサンプルスケッチであるYuruHorn_SubCore1
をビルドすると下記のようなエラーが出ます。
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Scanning dependencies...
(中略)
.platformio\packages\framework-arduinosonyspresense\libraries\File\src\File.cpp:35:
File.h:24:2: error: #error "File library is NOT supported by SubCore."
このような場合、platform.io
に下記を追記して、Library Dependency Finder が条件付きコンパイルを考慮するよう指定するとビルドが通ります。
lib_ldf_mode = chain+
Library Dependency Finder (LDF) についての詳細は下記を参照してください。
https://docs.platformio.org/en/latest/librarymanager/ldf.html
その他の設定
その他の設定については下記を参照してください。
https://github.com/maxgerhardt/platform-sonyspresense
投稿者の人気記事
-
lipoyang
さんが
昨日の19:10
に
編集
をしました。
(メッセージ: 初版)
-
lipoyang
さんが
昨日の19:14
に
編集
をしました。
ログインしてコメントを投稿する