🐈

マルチキャリア対応SORACOM IoT SIMのキャリアを切り替え (WindowsPC + ONYXドングル編)

2022/12/27に公開

やりたいこと

windowsPCにSORACOM IoT SIMが入ったONYXドングルをさして通信するときに、使用するキャリアを切り替えたい。
これのRaspiではなくWindowsPC版。

準備

ハードウェアの準備

以下ガイドのとおり実施
https://users.soracom.io/ja-jp/guides/usb-dongles/soracom-onyx/hardware/
※SORACOMのマルチキャリアに対応したSIMを挿入してください。

Windowsの設定

以下ガイドの通り実施
https://users.soracom.io/ja-jp/guides/usb-dongles/soracom-onyx/windows/

切り替え方法

概要

モバイルネットワークへの接続・切断の制御はnetshコマンドを利用し、モデム制御(キャリアのマニュアル選択)については、USBドングルのシリアル通信によりATコマンドで制御を行います。

モバイルネットワークの切断(netsh mbnコマンド)

キャリアの選択(ATコマンド by USBシリアル)

モバイルネットワークへの接続(netsh mbnコマンド)

モバイルネットワーク接続制御

netsh mbn コマンドを使います。
今回使うのは以下のコマンドです。

  1. モバイルネットワークからの切断
netsh mbn disconnect interface="携帯電話"
  1. モバイルネットワークへの接続
netsh mbn connect interface="携帯電話" connmode=name name=MyProfileName

MyProfileNameには以下のコマンドの結果を入れます。

netsh mbn show profiles

赤枠部分がMyProfileName

netsh mbn コマンドについての詳細はこちら
https://learn.microsoft.com/en-us/windows-server/networking/technologies/netsh/netsh-mbn

ATコマンド

ONYXドングルが使用しているQuectel社EG25-GのATコマンドマニュアルに従い、通信キャリアをマニュアルで選択します。

利用するのは、AT+COPSです。
以下のような構文となっています。
AT+COPS=<mode>[,<format>[,<oper>[,<Act>]]]
今回は各パラメータには以下を入れます。

<mode> : 1
今回選択する1は、"Manual operator selection." を意味します。

<format> : 2
今回選択する2は、"Short format alphanumeric <oper>" を意味します。

<oper>
選択するキャリアのplmnを入力します。
Docomoの場合 : "44010"
Softbankの場合 : "44020"
KDDIの場合 : "44051"

<Act> : 7
今回選択する7は、"E-UTRAN" を意味します。

メーカーの製品サポートページから、Quectel_EC2x&EG9x&EG2x-G&EM05_Series_AT_Commands_Manual_V2.0
をダウンロードします。
※ダウンロードにはユーザー登録(無料)が必要です。
https://www.quectel.com/product/lte-eg25-g

シリアル通信

こちらのサイトの方法を流用します。

  1. COMポートを開く
    1.1. デバイスマネージャを確認してCOMポートの番号を調べます。

    1.2. Quectel USB AT Port(COM**)を確認します。
    以下の例ではCOM6となっています。

# COMポートのインスタンス生成 (COM6、115200bps、パリティ無し)
$c = New-Object System.IO.Ports.SerialPort "COM6",115200 , ([System.IO.Ports.Parity]::None)

# DTR、RTSを設定
$c.DtrEnable = $true
$c.RtsEnable = $true

# ハンドシェイク無し
$c.Handshake=[System.IO.Ports.Handshake]::None

# 改行文字をCR(0x0D)に設定
$c.NewLine = "`r"

# 文字コードをASCIIに設定
$c.Encoding=[System.Text.Encoding]::GetEncoding("ASCII")

# シリアル受信イベントを登録(受信したらコンソールに出力)
$d = Register-ObjectEvent -InputObject $c -EventName "DataReceived" `
    -Action {param([System.IO.Ports.SerialPort]$sender, [System.EventArgs]$e) `
        Write-Host -NoNewline $sender.ReadExisting()}

# COMポートを開く
$c.Open()
  1. ATコマンド送信部分
    WriteLine()を使います。()の中には先ほど準備したATコマンドが入ります。

Docomoを選択する場合

$c.WriteLine("AT+COPS=1,2,`"44010`",7")

Softbankを選択する場合

$c.WriteLine("AT+COPS=1,2,`"44020`",7")

KDDIを選択する場合

$c.WriteLine("AT+COPS=1,2,`"44051`",7")
  1. COMポートを閉じる
# COMポート閉じる
$c.Close()

# イベント登録解除
Unregister-Event $d.Name

# ジョブ削除
Remove-Job $d.id

https://qiita.com/yapg57kon/items/58d7f47022b3e405b5f3

Discussion