LoginSignup
4
1

More than 3 years have passed since last update.

SPRESENSE + LTE + Arduino Library で eDRX を設定する

Last updated at Posted at 2020-04-14

この記事について

SPRESENSE + LTEボード を Arduino Library を使用して実装するときに、eDRX の設定を行う方法をまとめてみます。

eDRX とは?

簡単に言うと、LTE-M / NB-IoT での省電力の手法です。
詳細はドコモの この辺の資料 を参照してみてください。

SPRESENSE + Arduino Library での eDRX 設定方法

SPRESENSEの Arduino Libraryのリファレンス を見てみても、eDRX の設定を行うための関数などは用意されていません(2020/04現在・ver.1.5.1)。
しかし、より低層のライブラリである Spresense SDK の関数を使用することにより、eDRXの設定が可能となるようです。

実装内容

ざっと説明していきます。

include

SPRESENSE SDK の LTEライブラリである lte/lte_api.h を include しておきます。

spresense_edrx_test.ino
#include <LTE.h>          // SPRESENSE Arduino Lib LTEライブラリ
#include <lte/lte_api.h>  // SPRESENSE SDK LTEライブラリ  ←これを include しておく

setup()

eDRXの設定は、モデムの初期化後から回線を接続するまでの間に設定する必要があります。つまり LTE.begin()LTE.attach() の間です。

eDRX の設定は、lte_edrx_setting構造体の各メンバに設定値を代入し、lte_set_edrx_sync()関数にそれを渡します。 lte_edrx_setting構造体で設定する値は こちらのページ をご参照ください。

spresense_edrx_test.ino

// APN data
#define LTE_APN       "your.apn.info.here"
#define LTE_USER_NAME "username"
#define LTE_PASSWORD  "password"

// initialize the library instance
LTE lteAccess;

void setup() {
  while (true) {
    if (lteAccess.begin() == LTE_SEARCHING) {
      setup_edrx();    // この部分でeDRXの設定を行う。この関数の内容はこの後に記載。
      if (lteAccess.attach(LTE_APN, LTE_USER_NAME, LTE_PASSWORD) == LTE_READY) {
        Serial.println("attach succeeded.");
        break;
      }
      Serial.println("An error occurred, shutdown and try again.");
      lteAccess.shutdown();
      sleep(1);
    }
  }
}

int setup_edrx() {
  //eDRXの設定を記述する
  //設定値は https://developer.sony.com/develop/spresense/developer-tools/api-reference/api-references-spresense-sdk/structlte__edrx__setting.html を参照。
  lte_edrx_setting edrx;
  edrx.enable = LTE_ENABLE;              // eDRXを有効にする
  edrx.act_type = LTE_EDRX_ACTTYPE_WBS1; // LTE-Mを使用する場合は LTE_EDRX_ACTTYPE_WBS1 を設定しておく
  edrx.edrx_cycle = LTE_EDRX_CYC_16384;  // eDRXサイクルを 163.84sec に設定する
  edrx.ptw_val = LTE_EDRX_PTW_512;       // PTWを 5.12sec に設定する

  int ret = lte_set_edrx_sync(&edrx);    // eDRX を設定する
  Serial.print("lte_set_edrx_sync result=");  Serial.println(ret);
  return ret;
}

PSMについて

同様に、lte_set_psm_sync()関数や lte_psm_setting構造体が用意されていますので、こちらでPSMの設定をすることも可能のようです(試していない)。
詳細は このへんこのへん をご参照ください。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1