📡

Wio BG770A + 1NCEで接続先キャリアをPLMN指定する方法

に公開

Wio BG770A + 1NCE SIMでLTE-M接続する記事で、1NCEはSoftBankとKDDI両方の基地局に接続できることを見てきました。
通常は自動選択で問題ありませんが、設置場所の事前電波確認をするとき等、キャリアを指定したいケースもあります。

この記事では、Wio BG770AでAT+COPSコマンドを使ってSoftBank・KDDIを指定して接続する手順を紹介します。

PLMNコードとは?

PLMNとは、MCC(Mobile Country Code, 3桁) + MNC(Mobile Network Code, 2桁)で構成されるキャリアの識別番号です。
日本のMCCは440固定で、キャリアによってMNCが変わります。

1NCEで接続できる日本のキャリアと対応するPLMNコードは以下の通りです。
これらは総務省の電気通信番号として公表されています。

キャリア PLMN MCC MNC
SoftBank 44020 440 20
KDDI 44051 440 51

PLMNは通信キャリア1社でも複数持っています。そのため、上記はあくまでこの記事を書いている時点のPLMNです。
キャリア側のコア設備の収容変更によって、将来的には1NCEの接続先PLMNが変わる可能性があります。
うまく繋がらないときは、一度自動選択で接続してから試してみてください。

AT+COPSコマンドとは?

AT+COPS3GPP TS 27.007 (7.3 PLMN selection +COPS)で定義された、ネットワーク選択モードを制御する標準ATコマンドです。
AT+COPS=0の場合は自動選択。
AT+COPS=1,2,"PLMN",AcTでキャリアを手動指定します。

AT+COPS=1,2,"PLMN",AcTの引数の意味は以下の通りです。

引数 意味
1 手動選択(自動は0)
2 PLMN形式で指定(MCC+MNCの数字列)
"44051" 接続先のPLMNコード
7 AcT(Access Technology)。7 = eMTC(LTE-M)

コマンド文字列はLTE-M/NB-IoTモジュール全般で共通して使えます。

Wio BG770Aでの実装

接続するキャリアは OPERATOR_PLMN 定数1行を変えるだけで切り替えられます。"" にすると自動選択になります。

static constexpr const char* KDDI_PLMN     = "44051";
static constexpr const char* SOFTBANK_PLMN = "44020";

// "" のときは自動選択。例: KDDI_PLMN / SOFTBANK_PLMN
static constexpr const char* OPERATOR_PLMN = KDDI_PLMN;
static constexpr int OPERATOR_ACT = 7;  // eMTC(LTE-M)のAcT値

ConfigureOperatorSelection() がATコマンドを送る関数です。
OPERATOR_PLMN が空なら AT+COPS=0(自動選択)、値があれば AT+COPS=1,2,"PLMN",7(手動選択)を発行します。

static WioCellularResult ConfigureOperatorSelection() {
  // oper表示形式をMCC+MNC数字列に設定
  WioCellular.executeCommand("AT+COPS=3,2", COPS_TIMEOUT_MS);

  const auto plmn = GetConfiguredOperatorPlmn();
  if (plmn.empty()) {
    return WioCellular.executeCommand("AT+COPS=0", COPS_AUTO_SELECT_TIMEOUT_MS);  // 自動選択
  }

  const std::string command = "AT+COPS=1,2,\"" + plmn + "\"," + std::to_string(OPERATOR_ACT);
  return WioCellular.executeCommand(command, COPS_MANUAL_SELECT_TIMEOUT_MS);  // 手動選択
}

設置前の電波確認に使う

PLMNを指定する実用的な使いどころは、設置場所でSoftBankとKDDIどちらが良いか事前に確認する場面です。
手順はシンプルで、それぞれのキャリアに固定接続してRSRP・SINRを記録し、比較します。

  1. SoftBankに固定して計測するAT+COPS=1,2,"44020" を実行し、接続後に AT+QCSQ でRSRP・SINRを記録します。
  2. KDDIに固定して計測するAT+COPS=1,2,"44051" を実行し、同様に記録します。
  3. 確認後は自動選択に戻す — RSRP・SINRを比較したうえで AT+COPS=0 に戻します。

電波品質の読み方(RSRP・SINRの目安)については以下の記事を参照してください。

https://zenn.dev/oscar_it/articles/wio-bg770a-1nce

サンプルコード

この記事で紹介したPLMN指定を含む接続コードのフルコードはGitHubで公開しています。

https://github.com/oskar-iot/iotbuilds-samples/tree/main/wio-bg770a-1nce-connect

まとめ

この記事では、Wio BG770AにAT+COPSコマンドを使ってSoftBank(44020)またはKDDI(44051)に固定接続する手順を紹介しました。
PLMNを指定することで接続先キャリアを固定するのは、設置場所の電波環境を比較するときに役立ちます。
ただし、せっかくの冗長性が失われてしまうので、本番運用では自動選択(AT+COPS=0)に戻すようにしましょう。

BloomBlockテックブログ

Discussion