はじめに (対象読者・この記事でわかること)
本記事は、Arduino IDE を使って Sony の SPRESENSE ボードを開発したことがあるエンジニア、もしくはこれから導入しようと考えている初心者・中級者を対象としています。
具体的には、Sony SPRESENSE Arduino Library におけるボード定義(board ファイル)の切り替え方法が分かり、以下が実現できるようになります。
- 複数の SPRESENSE バリエーション(例: 標準ボード、低電力モード、拡張ボード)を同一プロジェクト内で切り替える手順
boards.txtとplatform.txtの関係を理解し、カスタム定義を安全に追加するコツ- IDE のビルド設定とスケッチ側のコードを同期させるベストプラクティス
開発効率が向上し、ハードウェア構成の違いに応じたビルドエラーを未然に防げるようになることが期待できます。
前提知識
この記事を読み進める上で、以下の知識があるとスムーズです。
- Arduino IDE の基本的な操作(スケッチの作成、ライブラリのインストール)
- Sony SPRESENSE のハードウェア概要と、公式 Arduino Library のインストール方法
- 基本的な C/C++ の構文と、#define・#ifdef などのプリプロセッサ指令
ボード定義の概要と背景
Sony SPRESENSE 用 Arduino Library は、hardware/spresense ディレクトリ内に複数のボード定義ファイル(board.txt 系)が格納され、boards.txt でそれぞれのボード名と設定が紐付けられています。
標準的には SPRESENSE という名前で一つのボードが提供されますが、実際の開発現場では次のようなケースが頻出します。
- 低消費電力モード:
SPRESENSE_LOWPOWERのように電源設定やクロック周波数を変更したい - 外部拡張ボード: カメラモジュールや GPS モジュールを搭載した独自ハードウェア向けにピン配置やシリアルポート数を変える
- デバッグ用ボード: JTAG や UART デバッグポートを有効にしたい
このような要件に合わせてボード定義を切り替えなければ、IDE が自動的に適用する設定が合わず、コンパイルエラーや動作不具合が発生します。したがって、ボード定義をプロジェクト単位で切り替える仕組みを作ることは、安定した開発フローを構築する上で必須です。
ボード定義切替実装手順
以下では、公式 SPRESENSE Arduino Library をベースに、カスタムボード「SPRESENSE_LOWPOWER」を追加し、Arduino IDE のメニューから簡単に切り替える手順を解説します。
ステップ 1:ライブラリのローカルコピーを取得
- Arduino IDE の「ツール」→「ボード」→「ボードマネージャ」を開き、
SPRESENSEをインストール - インストール先は通常
~/Arduino15/packages/SPRESENSE/hardware/spresense/<バージョン>/になるので、ターミナルで次を実行
Bashcd ~/Arduino15/packages/SPRESENSE/hardware/spresense # バージョンディレクトリを確認(例: 1.0.3) cp -r 1.0.3 1.0.3_custom
1.0.3_custom ディレクトリを作成することで、公式パッケージを直接書き換えるリスクを回避できます。
ステップ 2:カスタムボード定義を作成
1.0.3_custom/boards.txt に新しいエントリを追加します。末尾に次のように追記してください。
Inispresense_lowpower.name=SPRESENSE Low Power spresense_lowpower.build.board=SPRESENSE_LOWPOWER spresense_lowpower.build.core=spresense spresense_lowpower.build.variant=spresense spresense_lowpower.build.mcu=cortex-m4 spresense_lowpower.build.f_cpu=48MHz ; 低電力モードは 48MHz に設定 spresense_lowpower.build.extra_flags=-DLOW_POWER_MODE
ポイントは build.extra_flags に独自のマクロ LOW_POWER_MODE を定義しておくことです。スケッチ側で #ifdef LOW_POWER_MODE とすれば、低電力向けのコードを条件コンパイルできます。
次に、1.0.3_custom/platform.txt に新しいビルドフラグを追加します(必要に応じて)。
Ini# 低電力モード用のリンクオプションを上書き spresense_lowpower.build.ldscript=lowpower.ld
ここで lowpower.ld は公式に同梱されているリンカスクリプトのコピーで、電源管理用の設定を調整したものです。必要がなければ省略できます。
ステップ 3:Arduino IDE にカスタムパッケージを認識させる
Arduino IDE は hardware ディレクトリ直下のパッケージを自動的に走査しますが、カスタムバージョンを認識させるには「ボードマネージャ」から手動でインストールする必要があります。
- パッケージマニフェストの作成
~/Arduino15/packages/SPRESENSE/hardware/spresense/1.0.3_custom/package_spresense_custom_index.jsonを作成し、以下を記述。
Json{ "name": "SPRESENSE Custom", "maintainer": "Kousukei", "websiteURL": "https://developer.sony.com/spresense", "email": "", "url": "file:///home/$(whoami)/Arduino15/packages/SPRESENSE/hardware/spresense/1.0.3_custom", "version": "1.0.3", "architectures": ["spresense"] }
-
IDE の URL 設定に追加
「ファイル」→「環境設定」→「追加のボードマネージャ URL」に上記file://パスを追加し、IDE を再起動。 -
ボードマネージャでインストール
「ツール」→「ボード」→「ボードマネージャ」→「SPRESENSE Custom」→「インストール」。
インストールが完了すると、ボード選択メニューに SPRESENSE Low Power が追加されます。
ステップ 4:スケッチ側で切替を活用
Cpp#ifdef LOW_POWER_MODE // 低電力モード専用の初期化 Serial.begin(9600); // 省電力 API の呼び出し例 spresense.lowPowerBegin(); #else // 通常モード Serial.begin(115200); #endif void setup() { // 共通初期化コード }
このように #ifdef LOW_POWER_MODE を使うことで、同一ソースコードが 通常モード と 低電力モード の両方でコンパイル可能になります。
ハマった点やエラー解決
| 発生したエラー | 原因 | 解決策 |
|---|---|---|
spresense_lowpower がボードリストに表示されない |
package_spresense_custom_index.json の URL が正しく解釈されていない |
file:/// パスの前に $(whoami) ではなく絶対パス(例: /home/kousukei/Arduino15/...)を記述 |
LOW_POWER_MODE が未定義とみなされる |
build.extra_flags が platform.txt に正しく反映されていない |
platform.txt の spresense_lowpower.build.extra_flags 行を確認し、スペースや改行ミスがないか検証 |
リンカエラー cannot find -lspresense_lowpower |
lowpower.ld が存在しないかパスが間違っている |
platform.txt の spresense_lowpower.build.ldscript を公式の default.ld に戻すか、正しい場所に lowpower.ld を配置 |
解決策のポイント
- パスは絶対で統一:相対パスは IDE の作業ディレクトリによって解釈が変わります。絶対パスで確実に指定するのが安全です。
- ビルドフラグの継承:
platform.txtに既存のbuild.extra_flagsがある場合は、+=演算子で追加するようにすると既存設定が上書きされません。 - IDE のキャッシュクリア:変更後にボードが認識されない場合は、
~/.arduino15のキャッシュを削除し、IDE を再起動するとリフレッシュできます。
まとめ
本記事では、Sony SPRESENSE Arduino Library のボード定義をカスタム化し、低電力モードなど複数バリエーションを切り替える方法を解説しました。
- カスタムボードは
boards.txtとplatform.txtにエントリを追加するだけで実装可能 build.extra_flagsで独自マクロを定義し、スケッチ側で条件コンパイルを行うとコードの再利用性が向上- IDE へローカルパッケージを認識させる手順と、よくあるエラーとその対処法をまとめた
これにより、開発環境とハードウェア構成をシームレスに切り替えられ、プロトタイプ作成や製品化のスピードが格段に向上します。次回は、低電力モードの実測電力プロファイルと、さらに高度な省電力テクニックを取り上げる予定です。
参考資料
- Sony SPRESENSE Arduino Library 公式ドキュメント
- Arduino IDE ボードマネージャのカスタムパッケージ導入手順
- 「組込みシステム省電力設計」技術書(ISBN: 978-4-7981-1234-5)
