SpresenseマイコンでELTRES通信を試す 2023.10.11 通信
ELTRES通信の評価・PoCなどにご利用いただける送信モジュールボードに、高機能・低消費電力を特徴とするマイコンボードSpresenseと組み合わせる製品が用意されています。これらのボードとSpresense SDK(開発キット)とを使用することで簡単にELTRESの通信を試すことができますのでその手順をご紹介いたします。
Spresense対応ELTRES 評価用モジュールボードのご紹介
2023年8月現在、Spresenseに対応したELTRES評価用モジュールボードとして以下の二機種が商品化されています。
ELTRES SPEXEL for Spresense
株式会社ライズナー 製 ( https://device.risner.jp/products/detail/37 )
Spresenseと同サイズの基板で、Spresenseの裏面Board-to-Board拡張コネクタに装着します。マイクロSDカードコネクタや操作用スイッチも実装されており、容易にELTRES送信端末を構成することができます。ELTRES送信モジュールとしてCXM1501AGRを搭載しています。
ELTRESアドオンIoT開発キット
株式会社クレスコ 製( https://wakuwaku.cresco.co.jp/solution/eltres )
Spresenseの表面I/Oソケットに装着します。ELTRES送信モジュールと周辺回路のみのシンプルな構成となっており、Spresense以外のマイコンへの応用も考えられます。ELTRES送信モジュールとしてCXM1501GRまたはCXM1501AGRを搭載しています。Spresense拡張ボード(CXD5602PWBEXT1)を併用してマイクロSDカード等を使用することができます。
上記のモジュールボードは、各々のボードメーカーが提供するライブラリで使用することもできますが、本記事においてはソニーセミコンダクタソリューションズで開発した共通のプログラムでの動作例をご紹介いたします。
Spresenseについて
ソニーセミコンダクタソリューションズ株式会社 製
( https://www.sony-semicon.com/ja/products/spresense/index.html )
6コアのARM Cortex M4F CPUを搭載した、コンパクトで強力かつ低消費電力のマイコンボードです。カメラを利用した組み込みAIなどにも十分に対応できる能力を持っていますので、ELTRESモジュールボードと組み合わせることで高度なIoT Edge端末への応用も考えられます。
Spresense SDK
Spresenseには、C/C++言語で本格的な開発を行うSpresense SDKと、Arduino IDEを用いた簡便な開発環境とが用意されています。そのほかにもCircuit Python環境なども利用できますが、今回は、Spresense SDKを使用した開発をご紹介します。開発のフロントエンドとしてMicrosoft社のVisual Studio Code(以下VS Codeと表記)を使用します。
Spresense SDKを使用するには、WebサイトSpresense SDKスタートガイド(IDE 版) に沿ってSpresense SDKおよびVS Codeのセットアップを行ってください。2023年8月時点でSDKのバージョンは3.1.0です。
以降の説明は、上記サイトで説明されている環境のうちWindows 11 + WSL2(Ubuntu)環境を前提とします。
利用する環境が異なる場合は上記サイトに沿って適宜項目を読み替えてご利用ください。
ELTRES サンプルについて
Spresense SDKには3種類のELTRES用サンプルアプリケーションが含まれています。
全てC言語で記述されています。
SDKに含まれるELTRESサンプルアプリケーション
ELTRES LPWA sample application
ELTRESによる基本的な通信を行うサンプルアプリケーションです。Spresense側でデータを収集、ペイロードデータを生成して送信モジュールに設定し、そのデータを送信モジュールが受信局に向けて送信します。
ELTRES standalone sample application
ELTRES送信モジュールの2世代目 CXM1501AGRでは、ELTRES送信モジュール単独、あるいは外部にホストマイコンを使用する場合も簡単な制御で端末を構成できるように、ELTRES通信を自律的に制御するStandalone機能が追加されました。eltres_standaloneはこの機能を使用するサンプルアプリケーションです。ELTRES送信モジュールは、GNSSからの位置情報などを自律的に収集し、ペイロードデータを生成してSpresenseに通知します。Spresense側では、得られたデータを一部編集して送信モジュールに書き戻し、モジュールはそのデータを送信します。このサンプルの実行にはELTRES送信モジュールがCXM1501AGRであることが必要です。
ELTRES EEPROM read/write sample application
ELTRES送信モジュールの各種設定用のEEPROMに書き込み、読み出しを行うためのサンプルアプリケーションです。
注: サンプルアプリケーションで設定するペイロードのフォーマットは、クラウドサービスなどで決められているデータフォーマットとは異なる場合があります。必要に応じてペイロードのフォーマットを変更・編集してご利用ください。
サンプルのビルド、書き込み、起動
サンプルアプリケーションのビルド、Spresenseへの書き込み、起動を行う手順をご紹介いたします。
ワークスペースの作成
Spresense SDK スタートガイド (IDE 版)3.1. ワークスペースの作成 を参照して、ワークスペースセットアップウィザードを起動します。ワークスペースおよびプロジェクトフォルダーを作成して、保存してください。以降、myprojectプロジェクトフォルダーを作成したものとして説明いたします。
コンフィグレーション
コンフィグレーションによってSpresenseで使用するアプリケーションの構成を決定します。
ELTRESのサンプルアプリケーションをビルド、実行するにはそれぞれのアプリケーションに対して以下の定義済みコンフィグレーションを使用します。
[ELTRES LPWA sample application]
[ELTRES standalone sample application]
[ELTRES EEPROM read/write sample application]
定義済みコンフィグレーションの使用は、以下の手順によります。
(参考:以下の説明においてSDKコンフィグのメニュー項目を設定する際、SDKコンフィグタブの検索機能(虫眼鏡アイコン)を使用して項目名を入力すると素早く各メニュー項目へ移動することができます)
・以前に行われたビルドを削除するために、Spresenseプロジェクトメニュー(以下プロジェクトメニューと表記します)より[Spresense: アプリケーションのクリーン]を行ってください。(プロジェクトメニューは、VS Codeのエクスプローラペインでプロジェクトのファイルやフォルダを右クリックして出るコンテキストメニューに含まれています。Spresense SDK スタートガイド (IDE 版)3.3 プロジェクトメニューについて を参照してください)
・プロジェクトメニューから[Spresense: SDKコンフィグ]を選択します。SDKコンフィグのタブが開くまで多少時間がかかることがあります。
・SDKコンフィグのタブが開いたら、タブ内の[新規作成]をクリックして、表示される[New Configuration]ダイアログの内容を変更せずに[OK]を押して、コンフィグレーションの初期化を行います。
・使用するボードがSPEXELの場合、SDKコンフィグの項目表示の[> System Type]の’>’をクリックして下位メニューを表示し、[> CXD56xx Package Configuration] – [> Peripheral Support] – [UART0]を[Y]に、[CXD56 UART0 BAUD]を[115200]に、[CXD56 UART0 flow control]を[Y]に設定します。
・全てのボードにおいて、SDKコンフィグの[> Application Configuration] – [> Spresense SDK] – [> Externals] – [> ELTRES SDK library]を[Y]に設定して展開し、[ELTRES board selection]で使用するボードを選択します(このとき、先にUART0の設定がされていないとSPEXELは選択できません)。
・[> Application Configuration] – [> Spresense SDK] – [>Examples]以下の
[ELTRES EEPROM read/write sample application]
[ELTRES LPWA sample application]
[ELTRES standalone sample application]から組み込むものを[Y]にします。
・以上を設定したら、SDKコンフィグの[保存]をクリックしてから、SDKコンフィグ タブを閉じます。
ビルド、フラッシュ書き込み
Spresense SDK スタートガイド (IDE 版)4.5 Spresenseボードへの書き込みと動作確認 に従って、シリアルポートの設定、ビルド、書き込みを行ってください。
プログラムの実行
ELTRESボードを装着し、プログラムを書き込んだSpresenseとPCとをUSBで接続した状態で、ターミナルプログラムでポートを開きます。VS Codeでプロジェクトメニューから[Spresense: ビルドと書き込み]を使用して書き込んだ場合は自動的にVS Code組み込みのシリアルターミナルが起動します。nuttx (SpresenseのOS)のシェル上でhelpと入力すると使えるコマンド一覧が表示されます。helpコマンドに対する応答例を以下に示します。
上記例はコンフィグレーションで[ELTRES EEPROM read/write sample application]および[ELTRES LPWA sample application]を組み込んだ場合です。アプリケーションコマンド(Builtin Apps)としてeltres_eepromとeltres_lpwaが組み込まれていることがわかります。これらのコマンド名をシェルのプロンプトに入力するとプログラムが起動します。
なお、送信動作を行うプログラムの実行前に、後述のELTRES送信モジュールの設定の項を参照してELTRES送信モジュールの設定を行ってください。
プロジェクトの派生
サンプルアプリケーションのソースコードは、それぞれサンプルに対応するディレクトリに格納されています。
[ELTRES LPWA sample application] ~/spresense/examples/eltres_lpwa
[ELTRES standalone sample application] ~/spresense/examples/eltres_standalone
[ELTRES EEPROM read/write sample application] ~/spresense/examples/eltres_eeprom
それぞれの場所にあるソースコードを直接編集することもできますが、変更や機能追加を行う場合はこれらを複製して独立したプロジェクトとしたほうが管理しやすいでしょう。
以下、例としてELTRES LPWA sample applicationから派生プロジェクトを作る方法を説明します。
以下のようなディレクトリ構成になることを想定しています。
spresense
|– sdk
|– examples
|– eltres_lpwa (もとのサンプルが置かれたディレクトリ)
|– eltres_mod
|– eltres_lpwa (このディレクトリにソースをコピーし、変更して開発する)
・VS Codeのエクスプローラペインのコンテキストメニュー[新しいフォルダ…]等を使用して、~/spresense/eltres_modディレクトリを作成します。
・ワークスペースセットアップウィザードを起動します。表示されたダイアログで、Spresense SDKパスにはSpresense SDKの存在するパスを、作成した~/spresense/eltres_modをプロジェクトフォルダーパスに指定して、[作成]をクリックします。
・ワークスペースを作成したら、VS Codeの[ファイル]メニューから[名前をつけてワークスペースを保存…]でワークスペースを保存します。保存名称、保存場所は任意です。
・VS Codeの[新規ファイル…]などを使用して、プロジェクトディレクトリ~/spresense/eltres_mod直下に .sdksubdir ファイルを作成します。.sdksubdirファイルは空の(内容が無い)ファイルです。
・プロジェクトフォルダー直下の~/spresense/eltres_mod/Makefileファイルを編集します。ファイル中の
MENUDESC = “User application”
の行を、2行前つまり
ifeq ($(SDK_VERSION_MAJ),1)
の前の行にコピー/ペーストし、保存します。
・プロジェクトメニューから[Spresense: アプリケーションのクリーン]を実行します。
・プロジェクトフォルダ~spresense/eltres_mod/以下に~/spresense/examples/eltres_lpwa フォルダをコピーします。
・コピーした~spresense/eltres_mod/eltres_lpwaディレクトリ以下のファイルのうち、Makefile, Make.defs, Kconfig中の以下のシンボルを変更し、保存します。
EXAMPLES_ELTRES_xxx ⇒ EXAMPLES_ELTRES_xxx_MOD
CONFIG_EXAMPLES_ELTRES_xxx ⇒ CONFIG_EXAMPLES_ELTRES_xxx_MOD
(2023年8月のgitリポジトリでは、Makefile中4箇所、 Make.defs中1箇所, Kconfig中5箇所が変更になります)。
・プロジェクトメニューから[Spresense: SDKコンフィグ]を選択します。SDKコンフィグのタブが開くまで多少時間がかかることがあります。
・SDKコンフィグのタブが開いたら、タブ内の[新規作成]をクリックして、表示される[New Configuration]ダイアログの内容を変更せずに[OK]を押して、コンフィグレーションの初期化を行います。
・サンプルのコンフィグレーションの際と同様に[> System Type] – [> CXD56xx Package Configuration] – [> Peripheral Support] – [UART0] (SPEXELを使用する場合)、[> Application Configuration] – [> Spresense SDK] – [> Externals] – [> ELTRES SDK library]および[ELTRES board selection]の設定を行います。
・[> Application Configuration] – [> Spresense SDK] – [> User application] – [ELTRES LPWA sample application]をOnにして、SDKコンフィグを保存してください。
以降、プログラムのビルド、Spresenseボードへの書き込み、プログラムの実行についてはサンプルプログラムの場合と同様です。
ELTRES送信モジュールの設定
ELTRES送信モジュールの各種設定は、モジュール内蔵のEEPROMにデータを書き込むことによって行います。書き込みはeltres_eepromアプリケーションによって行います。eltres_eepromアプリケーションの使用法は、アプリケーションをパラメータ無しで起動すると表示されます。
送信間隔
ELTRESの通信は、予め設定された間隔で行われます。受信局が送信を期待していないタイミングで送信が行われてもその送信は受信されません。このため、送信端末の通信間隔設定(BurstInterval)は原則として受信局と同一に設定(回線契約で指定されている値)でご使用ください。
ネットワーク設定
CXM150x Configuration Manualにおいて、ネットワーク依存とされている項目についてはネットワークプロバイダ(回線契約者)の指定した値であることが必要です。設定が異なる場合、通信ができないことがあります。回線契約した設定値にてご使用ください。
standalone設定 (CXM1501AGRのみ)
CXM1501AGRでは、GNSSから得られた位置や速度情報、温度や内蔵のADコンバータへの入力電圧などを送信前に自動的に取得してペイロードに設定することができます(AutoPayload機能)。これらはユーザーが設定を変更することが可能です。eltres_standaloneサンプルアプリケーションでは、AutoPayload機能によってペイロード設定を行います。デフォルトのペイロード設定での送信を行う場合、出荷時設定は変更せず、AUTOPLD_COLLECT(0x07A4)に0以外の値を書き込みます。使用したい状況にもよりますが、ここでは5を設定するものとします。
また、eltres_lpwaサンプルアプリケーションで使用するときには、AutoPayload機能が有効になっているとアプリケーションが設定するペイロードと競合して期待したペイロードが送出されないことがありますので、AUTOPLD_COLLECTに0を書き込んでAutoPayload機能は無効にしてください。
standaloneモードでは、送信間隔が一定以上空く場合、自動的に電力消費を極限まで抑えたDeepSleepモードに入ることもできます。
これらの機能の詳細についてはCXM150x Configuration ManualおよびApplication Note AN009を参照してください。
その他、サンプルアプリケーションで使用する機能の設定
ELTRES LPWA sample application動作に関係するEEPROM設定は以下のものです。
EEPROM 設定 | 説明 |
---|---|
POW_ENABLE_REMAIN_OFFSET | 次回電源Onまでの残時間計算のためのオフセット値 CXM150xの電源をオンにするまでの時間計算に使われます |
p1Enabled | Periodic1プロファイルの有効/無効 p1Enableかp2Enableの一方または両方を有効にしてください。 |
p2Enabled | Periodic2プロファイルの有効/無効 p1Enableかp2Enableの一方または両方を有効にしてください。 |
evEnabled | Event プロファイルの有効/無効 イベント送信モードを使用する場合は1に設定してください。 |
INT_OUT1 p1INT_OUT1 p2INT_OUT1 evINT_OUT1 |
LPWA送信データの更新期限の前、指定時間にINT_OUT1端子による通知を行います。INT_OUT1端子は送信が完了するとLになります。設定の詳細はCXM150x Configuration Manualを参照してください。 ELTRES LPWA sample applicationにおいては、使用するプロファイルにおいてINT_OUT1による通知機能が有効になっている必要があります。5秒以上の設定時間を推奨します。 |
AUTO_PERIODIC_SELECT | Periodic1/Periodic2プロファイルをそれぞれのStartTime/EndTimeに応じて自動的に切り替えます。 1(自動切り替え)に設定してください。 |
ELTRES standalone sample application動作に関係するEEPROM設定は、INT_OUT1設定以外のeltres_lpwaのものに加えて以下のものです。
EEPROM 設定 | 説明 |
---|---|
INT_OUT2 | CXM150xがUARTでの送信開始する指定時間(ミリ秒単位)だけ前に通知する信号を発生します。INT_OUT2端子は一行のデータ送信が完了するとLになります。 ELTRES standalone sample applicationの動作にはINT_OUT2が0以外に設定されている必要があります。 設定値10を推奨します。 |
SM_TOUT | CXM150xが起動後自動的に通常動作モードに遷移するまでの時間を指定します。 外部にマイコンを接続する場合は0(自動遷移無効)に設定してください。 |
AUTOPLD_COLLECT | オートペイロードのデータを取得する際のデータ収集開始時間を、データ送信の何秒前に開始するかで設定します。 ELTRES Standalone sample application を使用する場合は0以外に設定されている必要があります。 設定値5を推奨します。 ELTRES LPWA sample applicationを使用する場合は0に設定してください。 |
WAKEUP_CTRL | UART インタフェース回路の自動電源オフの有無を設定します 外部にマイコンを接続する場合は0(自動オフしない)に設定してください。 |
AUTO_PERIODIC_SELECT PROFILE_SELECT MIN_DSLP_TIME DSLP_BUP |
送信プロファイルにあわせて設定してください。 設定についてはCXM150x Configuration Manual CXM150x Application Note AN009を参照してください。 |
AUTOPLD_SRC_SELECT AUTOPLD_LAT_BASE AUTOPLD_LON_BASE AUTOPLD_LAT_RANGE AUTOPLD_LON_RANGE AUTOPLD_LAT_RES AUTOPLD_LON_RES AUTOPLD_HEIGHT_OFFSET AUTOPLD_SRC1_BIT_POS AUTOPLD_SRC2_BIT_POS AUTOPLD_SRC3_BIT_POS AUTOPLD_SRC4_BIT_POS AUTOPLD_SRC5_BIT_WIDTH AUTOPLD_SRC5_BIT_POS AUTOPLD_SRC6_BIT_WIDTH AUTOPLD_SRC6_BIT_POS AUTOPLD_SRC7_BIT_WIDTH AUTOPLD_SRC7_BIT_POS AUTOPLD_SRC8_BIT_POS AUTOPLD_SRC9_BIT_WIDTH AUTOPLD_SRC9_BIT_POS |
ペイロードに設定するデータに合わせて設定してください。 設定についてはCXM150x Configuration Manual, CXM150x Application Note AN009を参照してください。 |
便利な追加機能
Spresense SDKにはELTRESサンプルアプリケーション以外にも便利な機能が含まれているのでいくつかご紹介します。機能を追加するには、サンプルやアプリケーションの設定にさらにコンフィグレーションを加えます。
自動起動
通常、プログラムの起動にはSpresenseにターミナルを接続し、nuttxのプロンプトからアプリケーション名を入力します。しかし、これではプログラムの起動のためには端末の接続が必要になってしまいます。自動起動を使用すると、端末を接続しなくても設定によりSpresenseの起動後自動的にコマンドを実行することが可能です。
この手順については、Spresense SDK チュートリアル内のアプリケーションの自動起動方法に記載があります。
・プロジェクトメニューから[Spresense: SDKコンフィグ]を起動し、SDKコンフィグで[> Application Configuration] – [> Spresense SDK] – [> System tools] – [ Spresense Startup Script]を[Y]にします。
・自動起動のファイルはromfs上に配置するので、romfs(spifs)を設定します。SDKコンフィグで[> Application Configuration] – [> NSH Library] – [> Scripting support] – [Custom ROMFS header file path]に ../../system/startup_script/nsh_romfsimg.h を設定します。
・このとき、SDKコンフィグの[> Application Configuration] – [> System Libraries and NSH Add Ons] – [VI Work-Alike Text Editor]を[Y]に設定すると、unix等でポピュラーなviエディタ)に似たテキストエディタをnuttx上で使用することができます。
・SDKコンフィグの保存を行ったら、アプリケーションの作成の場合と同様にビルド、書き込みを行います。
・Spresenseの/mnt/spif/以下に自動実行されるスクリプトファイルinit.rcを配置します。例えば、起動後eltres_lpwaを起動する場合は、nuttxシェルに以下のコマンドをあたえることでスクリプトファイルが作成できます。”nsh> “はnuttxシェルのプロンプトです(前述のvi相当のエディタを組み込んでいるならそれを使用してもファイルを作成できます)。
nsh> echo eltres_lpwa > /mnt/spif/init.rc
以上の設定によって、システム起動時にeltres_lpwaアプリケーションが起動するようになります。
なお、なんらかの原因で/mnt/spifが存在しない場合はSpresense SDK チュートリアルページのSmartFSフォーマット手順 を参照の上spifデバイスを再構築してください。先行してFlash消去 が必要になる場合もあります。
マイクロSDカードの利用
SPEXELやSpresense拡張ボード上のマイクロSDカードソケットに挿入したマイクロSDカードを使用することができます。
・SDKコンフィグの[> System Type] – [> CXD56xx Package Configuration] – [> Storage Options] – [SDIO SD Card]を[Y]にします。
・SPEXEL上のマイクロSDカードソケットを使用する場合は、SDKコンフィグで[> Application Configuration] – [> Spresense SDK] – [> System tools] – [PMIC Command]も[Y]にしてください。
・SDKコンフィグを保存してアプリケーションをビルド、書込みしてSpresenseを起動します。拡張ボードにマイクロSDカードを挿入している場合はSDカードを認識しています。
SPEXELのカードソケットを使用する場合はnuttxシェルに以下のコマンドを入力後にSDカードを挿入します。
pmic -e GPO5
以上で、/mnt/sd0/にSDカードがマウントされ、プログラムからのアクセスが可能になります。
なお、プログラムからSDカードへの書き込みを行った場合、ファイルのクローズ処理を行わない状態でカードの抜き取り、プログラムの強制終了、システムのリセットや電源の切断が行われると書き込んだデータやファイルが失われる場合がありますのでご注意ください。
まとめ
Spresense SDKによるELTRESモジュールボードのサンプルアプリケーションについて説明いたしました。簡単な操作でサンプルアプリケーションを生成できますので、お客様のELTRES端末開発に役立てていただければと思います。
参考資料
ELTRES送信モジュール CXM1501AGR ドキュメント類取得について
CXM1501AGRのデータシート他各種ドキュメントはソニーセミコンダクタソリューションズ(株)のELTRES資料ダウンロードページ よりご請求ください。
本ドキュメントでは、
CXM150x Configuration Manual
Application Note AN009
を参照しています。
この記事の全文をPDFでダウンロードいただけます。
最後に
ELTRESは安定通信・長距離伝送・低消費電力・高速移動体対応・GNSS標準搭載の特長を生かして様々な業界でご活用いただいております。
【活用例】
- 物流:移動車輛の監視
- 環境モニタリング:溜池の水位監視
- インフラ監視:街路灯の電力監視と設置位置管理
- 農業・畜産:放牧牛のトラッキング
- 人の安全みまもり:CO2センサで「3密」を検知
- スポーツトラッキング:アドベンチャーレースでのトラッキング
- IoTプラットフォーム:温湿度、不快指数、安全管理、物流管理、獣害被害対策、見守り等
「興味がある」から「実際に活用方法を検討している」までどの段階でも構いません、お客様のご希望に合わせてお話しさせていただきます。
まずはお問い合わせください。
ELTRES お問い合わせフォーム