はじめに
SIMComの通信モジュールを評価するときは、シリアルターミナルからATコマンドを一つずつ送る方法が基本です。疎通確認だけならそれでも十分ですが、SIMの状態、基地局への登録、APN、SMS、GNSSと確認範囲が広がるにつれて手作業が増えていきます。
さらに、SIMComモジュールは2Gから5Gまで系列が幅広く、同じ機能でも使用するATコマンドが異なる場合があります。「この機種でGNSSを起動するコマンドはどれだっけ」とマニュアルを行き来するのもなかなか大変です。
そこで、SIMComモジュールの接続確認からデータ通信のテストまでをWindows上でまとめて実行できる「SIMCom AT Command Tester」を作りました。WPFのGUIとメニュ式CLIの両方を用意しています。
この記事はSIMCom AT Command Testerバージョン 0.1.0を対象にしています。
どんなツールなの?
通常のシリアルターミナルと同じように任意のATコマンドを送れるだけでなく、評価時によく使う操作を画面やメニュから実行できるようにしたツールです。
| 機能 | できること |
|---|---|
| 接続 | COMポートの検出、ボーレートの選択、シリアル接続 |
| 機種判定 | メーカー名、型番、ファームウェアを取得して系列別プロファイルを選択 |
| 基本診断 | 製品情報、SIM状態、電波強度、ネットワーク登録状態などを一括確認 |
| APN / PDP | CID、PDPタイプ、APN、PAP / CHAP認証、PSアタッチを設定 |
| SMS | GSM / ASCIIと日本語を含むUCS2のテキストSMSを送信 |
| GNSS | 機種に合わせて電源ON / OFFと測位情報取得を実行 |
| HTTP | モジュールのATコマンドによるGET / POSTと応答取得 |
| MQTT | ブローカーへの接続、publish、切断 |
| ログ | 送受信のタイムスタンプ表示、タイムアウトと成否の判定 |
対応プロファイルはSIM800 / SIM900系、SIM7000系、SIM7020 / SIM7022系、SIM7070 / SIM7080 / SIM7090系、SIM7100系、SIM7500 / SIM7600 / SIM7800系、A76xx系、SIM73xx系、SIM82xx / SIM83xx系などです。SIM7100Jx、SIM7600JC-H、SIM7312G-M.2、SIM8262E-M2なども型番から対応する系列を判定します。
未知のSIMCom型番は「汎用SIMCom」として扱い、基本ATコマンドやSIM、ネットワーク、PDPの操作を利用できます。機種判定できない場合でも、すぐに使えなくならないようにしました。
ツールの構成
GUIとCLIの内側では、同じコアライブラリを使っています。
シリアル送受信、ATコマンドの応答判定、機種差分、各機能のワークフローはすべてSimComAt.Coreに集約しています。フロントエンドごとにATコマンドの組み立てを重複実装しないため、GUIとCLIで同じ動作になります。
使ってみよう
ダウンロード
GitHub Releasesから、使用するPCのCPUに合わせてGUIまたはCLIのZIPをダウンロードします。
| 用途 | x64 | Arm64 |
|---|---|---|
| GUI | SIMComAt-GUI-v0.1.0-win-x64.zip |
SIMComAt-GUI-v0.1.0-win-arm64.zip |
| CLI | SIMComAt-CLI-v0.1.0-win-x64.zip |
SIMComAt-CLI-v0.1.0-win-arm64.zip |
Release版は自己完結型でビルドしているため、.NET Runtimeの別途インストールは不要です。ZIPを展開して実行ファイルを起動します。
モジュールへの接続
利用にはWindows 10またはWindows 11、対象モジュールのUSBドライバー、ATコマンド用COMポートが必要です。
- SIMComモジュールをPCへ接続します。
- デバイスマネージャーでATコマンド用COMポートを確認します。
- ツールでモデル、COMポート、ボーレートを選択します。
- 「接続」を押し、「機種判定」または
ATコマンドで応答を確認します。
標準的な接続設定は115200 bps / 8-N-1 / フロー制御なしです。ただし、モジュールやファームウェア側の設定が異なる場合は、実機に合わせて変更します。
USB接続時に複数のCOMポートが表示されるモジュールがあります。診断、NMEA、モデムなどの別ポートを選ぶとATコマンドに応答しません。デバイスマネージャーでポート名を確認してください。
GUIの使い方
GUIの左側には、選択中の機種で利用できる定義済みATコマンドが一覧表示されます。コマンドをダブルクリックするとそのまま実行できます。一覧にないコマンドは、上部の入力欄から任意に送信できます。
専用タブは「APN / PDP」「SMS」「GNSS」「HTTP」「MQTT」の5つです。例えばAPN設定では、ATコマンドの引数順序やクォートを意識せず、入力欄を埋めて実行できます。日本語SMSは「UCS2 / 日本語」を選ぶと、送信先と本文をUCS2の16進表現へ変換して送信します。
右側の通信ログには、モジュールへ送った内容と受け取った応答がタイムスタンプ付きで表示されます。通信がうまくいかない場合は、このログでERROR、+CME ERROR、+CMS ERROR、タイムアウトなどを確認できます。
CLIの使い方
GUIを使えない環境や、キーボードだけで素早く確認したい場合はCLIを使います。起動後にモデルとCOMポートを選ぶと、番号メニュから定義済みコマンド、任意コマンド、一括診断、APN設定、SMS、GNSS、HTTP、MQTTを利用できます。
パスワードの入力中は画面に文字を表示しません。リモートサポート中など、画面共有している場面でも資格情報が見えにくいようにしています。
実装で工夫したところ
機種差分をプロファイルにまとめる
機種ごとの分岐をGUIのイベント処理へ書くと、対応機種が増えるたびに見通しが悪くなります。このツールでは、各系列を次の情報を持つプロファイルとして定義しました。
- 型番のプレフィックス
- デフォルトのボーレート
- GSM、LTE、5Gなどの通信方式
- SMS、パケット通信、GNSS、HTTP、MQTTなどの機能フラグ
- その系列で表示する定義済みATコマンド
機種判定で取得した型番とプレフィックスを照合し、対応する機能とコマンドだけをGUIとCLIへ渡します。GNSSのように系列でコマンド名が異なる機能も、この層で吸収しています。
ATコマンドを一列に実行する
ATコマンドは、送信後に複数行の応答や非同期通知(URC)を受け取ることがあります。複数の操作が同時にポートを使うと、どのコマンドの応答か分からなくなります。
そこでATコマンドクライアントはセマフォで送受信を排他し、1度に1コマンドだけを実行します。OKやCONNECTを成功、ERRORやNO CARRIER、+CME ERROR、+CMS ERRORなどを失敗として判定し、一定時間応答がなければタイムアウトとして返します。
SMSやMQTTのように、プロンプトが表示された後にペイロードを送るコマンドも別の実行メソッドで扱っています。
ログから機密情報を隠す
通信トラブルを調査するときはログが必要です。一方で、ATコマンドにはAPN認証のユーザー名とパスワード、MQTTの資格情報、HTTPのURLやペイロードなどが含まれる場合があります。
これらは送信前と応答取得後にマスクします。SMS本文とHTTP / MQTTのペイロードは内容そのものをログへ出さず、「SMS本文」「ペイロード」といった代替文字列を記録します。不具合調査でログを共有するときに、認証情報や通信内容をそのまま残しにくくしました。
ツールがマスクする情報以外にも、モジュールの応答には電話番号、IMEI、IMSI、ICCID、APNなどが含まれることがあります。Issueや社外へログを共有する前に、必ず人の目でも内容を確認してください。
実機がなくても確認できるようにする
シリアル通信だけに実装が密結合すると、モジュールの実機がなければテストできません。そこで、送受信をIAtTransportで抽象化し、テストでは疑似通信層を差し込んでいます。
正常応答とエラー応答、タイムアウト、機種判定、APN設定、UCS2 SMS、GNSSの系列差、HTTP応答、MQTTのURCなどを自動テストしています。タグを付けるとGitHub ActionsがReleaseビルドとテストを行い、Windows x64 / Arm64向けのGUIとCLI、SHA-256チェックサムを生成します。
注意点と制限
ATコマンドの実装はモジュールとファームウェアによって異なります。本ツールのプロファイルは主要系列の差分を吸収しますが、全系列の全コマンドの動作を保証するものではありません。必ず対象機種の最新版ATコマンドマニュアルも確認してください。
現在の主な制限は次のとおりです。
- TCP / UDPソケット、FTP、ファイルシステムの専用画面とメニュは未対応です。
- SMSの連結メッセージ、PDUモード、受信管理、配信レポートは未対応です。
- HTTP / MQTTはSIMComの
HTTP*、CMQTT*コマンド群を対象にしています。ファームウェアによって未搭載または構文が異なる場合があります。 - 設定、回線接続、工場設定の読み込み、電源OFFなどのATコマンドは、モジュールの状態を変更します。実行前にコマンドの内容を確認してください。
まとめ
SIMComモジュールの評価時に繰り返していた操作を、GUIとCLIから素早く試せるATコマンドテスターにまとめました。
- 2G、LPWA、LTE、5Gの主要なSIMCom系列をプロファイルで切り替えられます。
- 基本診断に加えて、APN / PDP、SMS、GNSS、HTTP、MQTTを一つのツールで確認できます。
- GUIとCLIは共通コアを使い、機種差分とATコマンドの応答判定を同じ方法で処理します。
- 資格情報やペイロードをログに残しにくくし、疑似通信層を使った自動テストも用意しています。
まずはGitHub ReleasesからGUI版をダウンロードし、お手元のモジュールでATと基本診断を試してみてください。対応してほしい機種やコマンドがあれば、GitHub Issuesへのフィードバックもお待ちしています。