はじめに (対象読者・この記事でわかること)

本記事は、Arduino IDE を使って Sony の SPRESENSE ボードを開発したことがあるエンジニア、もしくはこれから導入しようと考えている初心者・中級者を対象としています。
具体的には、Sony SPRESENSE Arduino Library におけるボード定義(board ファイル)の切り替え方法が分かり、以下が実現できるようになります。

  • 複数の SPRESENSE バリエーション(例: 標準ボード、低電力モード、拡張ボード)を同一プロジェクト内で切り替える手順
  • boards.txtplatform.txt の関係を理解し、カスタム定義を安全に追加するコツ
  • IDE のビルド設定とスケッチ側のコードを同期させるベストプラクティス

開発効率が向上し、ハードウェア構成の違いに応じたビルドエラーを未然に防げるようになることが期待できます。

前提知識

この記事を読み進める上で、以下の知識があるとスムーズです。
- Arduino IDE の基本的な操作(スケッチの作成、ライブラリのインストール)
- Sony SPRESENSE のハードウェア概要と、公式 Arduino Library のインストール方法
- 基本的な C/C++ の構文と、#define#ifdef などのプリプロセッサ指令

ボード定義の概要と背景

Sony SPRESENSE 用 Arduino Library は、hardware/spresense ディレクトリ内に複数のボード定義ファイル(board.txt 系)が格納され、boards.txt でそれぞれのボード名と設定が紐付けられています。
標準的には SPRESENSE という名前で一つのボードが提供されますが、実際の開発現場では次のようなケースが頻出します。

  1. 低消費電力モード: SPRESENSE_LOWPOWER のように電源設定やクロック周波数を変更したい
  2. 外部拡張ボード: カメラモジュールや GPS モジュールを搭載した独自ハードウェア向けにピン配置やシリアルポート数を変える
  3. デバッグ用ボード: JTAG や UART デバッグポートを有効にしたい

このような要件に合わせてボード定義を切り替えなければ、IDE が自動的に適用する設定が合わず、コンパイルエラーや動作不具合が発生します。したがって、ボード定義をプロジェクト単位で切り替える仕組みを作ることは、安定した開発フローを構築する上で必須です。

ボード定義切替実装手順

以下では、公式 SPRESENSE Arduino Library をベースに、カスタムボード「SPRESENSE_LOWPOWER」を追加し、Arduino IDE のメニューから簡単に切り替える手順を解説します。

ステップ 1:ライブラリのローカルコピーを取得

  1. Arduino IDE の「ツール」→「ボード」→「ボードマネージャ」を開き、SPRESENSE をインストール
  2. インストール先は通常 ~/Arduino15/packages/SPRESENSE/hardware/spresense/<バージョン>/ になるので、ターミナルで次を実行
Bash
cd ~/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 に新しいエントリを追加します。末尾に次のように追記してください。

Ini
spresense_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 ディレクトリ直下のパッケージを自動的に走査しますが、カスタムバージョンを認識させるには「ボードマネージャ」から手動でインストールする必要があります。

  1. パッケージマニフェストの作成
    ~/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"] }
  1. IDE の URL 設定に追加
    「ファイル」→「環境設定」→「追加のボードマネージャ URL」に上記 file:// パスを追加し、IDE を再起動。

  2. ボードマネージャでインストール
    「ツール」→「ボード」→「ボードマネージャ」→「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_flagsplatform.txt に正しく反映されていない platform.txtspresense_lowpower.build.extra_flags 行を確認し、スペースや改行ミスがないか検証
リンカエラー cannot find -lspresense_lowpower lowpower.ld が存在しないかパスが間違っている platform.txtspresense_lowpower.build.ldscript を公式の default.ld に戻すか、正しい場所に lowpower.ld を配置

解決策のポイント

  • パスは絶対で統一:相対パスは IDE の作業ディレクトリによって解釈が変わります。絶対パスで確実に指定するのが安全です。
  • ビルドフラグの継承platform.txt に既存の build.extra_flags がある場合は、+= 演算子で追加するようにすると既存設定が上書きされません。
  • IDE のキャッシュクリア:変更後にボードが認識されない場合は、~/.arduino15 のキャッシュを削除し、IDE を再起動するとリフレッシュできます。

まとめ

本記事では、Sony SPRESENSE Arduino Library のボード定義をカスタム化し、低電力モードなど複数バリエーションを切り替える方法を解説しました。

  • カスタムボードは boards.txtplatform.txt にエントリを追加するだけで実装可能
  • build.extra_flags で独自マクロを定義し、スケッチ側で条件コンパイルを行うとコードの再利用性が向上
  • IDE へローカルパッケージを認識させる手順と、よくあるエラーとその対処法をまとめた

これにより、開発環境とハードウェア構成をシームレスに切り替えられ、プロトタイプ作成や製品化のスピードが格段に向上します。次回は、低電力モードの実測電力プロファイルと、さらに高度な省電力テクニックを取り上げる予定です。

参考資料