LTE-Mモジュールのコードを書いて動かしたのに、接続が確立しない。そういうとき、ATコマンドを使えば何が起きているかを1ステップずつ切り分けられます。
この記事では、ATコマンドの形式・応答の読み方を説明した上で、「SIM認識 → ネットワーク登録 → 電波品質 → PDN接続」の診断フローをWio BG770Aで実際に取得したログとともに紹介します。
ATコマンドとは
ATコマンドは、MCU(マイコン)からセルラーモジュールを制御するための命令体系です。
セルラーモジュール向けの標準コマンドは 3GPP TS 27.007 で定義されており、メーカーを問わず共通して使えます。
セルラーモジュールはMCUからATコマンドで制御する構成がほぼ唯一の手段のため、コードやログにコマンドが頻繁に登場します。
ちなみに、「AT」は ATtention の略で、コマンドの先頭に必ず付けるプレフィックスです。 LTE-M通信の世界でもまさに、「ATtention is all you need」ですね。
コマンドの書き方
ATコマンドは目的によって4つの形式を使い分けます。
| 形式 | 目的 | 例 |
|---|---|---|
AT+CMD | 実行(パラメータなし) | ATI |
AT+CMD=値 | 値を設定する、またはパラメータ付きで実行する | AT+COPS=0, AT+CGPADDR=1 |
AT+CMD? | 現在の設定値を読み出す | AT+COPS? |
AT+CMD=? | 設定可能な値の範囲を確認する | AT+CGAUTH=? |
AT+COPS=0 のように = の後に値を続けると設定コマンドになります。ATI のようにパラメータなしで実行するコマンドもあります。AT+COPS? のように ? を付けると現在値の読み出しになります。
設定と読み出しで同じコマンド名を使う点が、最初に覚えておくと混乱しにくいポイントです。
応答の読み方
コマンドを送信すると、モジュールは「実行結果」「データ応答」「URC」の3種類の応答を返します。
実行結果
OK はコマンドが成功したことを表します。
ERROR はコマンドが失敗したことを表します。ただし失敗の理由は分かりません。
+CME ERROR: <n> はMobile Equipment Errorで、具体的なエラーコードが付きます。設定系のコマンドが失敗したときに出ることがあります。
データ応答
設定値や情報を返すコマンドは、OK の前に +コマンド名: というプレフィックスでデータが届きます。
ATI を例にすると次のような応答が返ってきます。
ATI
Quectel
BG770A-GL
Revision: BG770AGLAAR02A05_JP
OK
データ応答が先に来て、その後に OK が来る順序は共通です。
URC(非同期通知)
URC(Unsolicited Result Code)は、ホストからのリクエストなしにモジュールが自発的に送ってくるメッセージです。ネットワーク登録状態の変化(圏外になった・再接続したなど)がURCで通知されます。
アプリ側でのポーリングなしにネットワーク状態を把握できますが、受信タイミングがランダムなため、コマンド応答のパースと分けて処理する必要があります。
標準コマンドとベンダー独自コマンド
ATコマンドには、3GPP TS 27.007で定義された標準コマンドとモジュールメーカーが独自に追加したベンダー独自コマンドの2種類があります。
標準コマンドはメーカーを問わず共通して使えます。AT+COPS(ネットワーク選択)や AT+CGAUTH(PDP認証)がこれに該当します。
ベンダー独自コマンドは標準コマンドでカバーされていない情報を取得したり、メーカー固有の機能を制御したりするために用意されています。
目安として、AT+C で始まるコマンドは標準コマンドであることが多く、ベンダー独自コマンドはメーカーの頭文字を冠したプレフィックスを使うことが多いです。ただし例外もあるため、正確にはモジュールのATコマンドマニュアルで確認するのが確実です。
たとえばQuectelの独自コマンドは AT+Q で始まります。AT+QNWINFO(接続中の周波数帯情報)、AT+QCSQ(電波品質)がその代表例です。
同じ情報でもモジュールメーカーが異なればコマンド名も変わるため、モジュールを切り替える際はマニュアルの確認が必要です。
接続確立の診断フロー
では、実際にATコマンドを叩きながら、LTE-Mの接続のトラブルシューティングをしていきましょう。
LTE-M接続が確立しない場合、問題は以下の4段階のどこかにあります。上から順番に確認すると原因を効率よく切り分けられます。
以下のログはSORACOM plan-D SIMをWio BG770Aで使用して取得したものです。
- 1
SIMは認識されているか?
- 2
ネットワークに登録できているか?
- 3
PDN接続(IP払い出し)できているか?
- 4
電波品質は十分か?
Step 1: SIM認識の確認
まずSIMがモジュールに正しく認識されているかを確認します。SIMが刺さっていない・接触不良・対応していないSIMの場合はここで止まります。
AT+CIMI でSIMのIMSIを取得します。
IMSI(International Mobile Subscriber Identity)は、SIMカードごとに割り当てられるユニークな識別番号であり、モバイル通信の世界では誰が接続に来ているのかを識別するのに使います。
AT+CIMI
正常: IMSIが返ります。
AT+CIMI
44010*****00054
OK
異常: SIMが認識されていない場合、+CME ERROR: 10 が返ります。
AT+CIMI
+CME ERROR: 10
+CME ERROR: 10 は「SIM not inserted」を意味します。SIMが物理的に刺さっていないか、接触不良が疑われます。
Step 2: ネットワーク登録の確認
SIMが認識できたら、次にLTEネットワークへの登録状態を確認します。
AT+CEREG?
応答の2番目の値(<stat>)を見ます。
<stat> | 意味 |
|---|---|
0 | 未登録・検索中でもない |
1 | 登録済み(ホームネットワーク) |
2 | 未登録・キャリア検索中 |
3 | 登録拒否 |
5 | 登録済み(ローミング) |
1 または 5 であればネットワーク登録は完了しています。2 の場合は電波が届いていないか、対応バンドの問題です。3 はSIMが有効でないか、プランが未契約の可能性があります。
正常: stat=1 が返ります。
AT+CEREG?
+CEREG: 0,1
OK
Step 3: PDN接続(IP払い出し)の確認
モバイル通信では、ネットワークへの登録(Attach)とデータ通信の開始は別のステップです。 Attachはネットワークに「存在を認識させる」手続きで、実際にIPパケットを送受信するにはその後にPDN(Packet Data Network)接続を確立してIPアドレスを払い出してもらう必要があります。
ネットワーク登録に問題がなければ、次にPDN接続が確立されIPアドレスが払い出されているかを確認します。
AT+CGDCONT? でPDPコンテキストの設定を確認します。
PDPコンテキストはデータ接続の設定プロファイルで、APNやIPアドレスなどをまとめたものです。CID(コンテキストID)で識別され、複数定義できます。
AT+CGDCONT?
AT+CGDCONT?
+CGDCONT: 1,"IP","soracom.io",10.219.64.27,0,0,0
+CGDCONT: 2,"IPV4V6","docomodev.net","0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0",0,0,0
OK
Context 1(soracom.io): SORACOMのAPNでIPアドレス 10.219.64.27 が払い出されています。これが実際のデータ通信に使われるコンテキストです。
Context 2(docomodev.net): NTTドコモ回線へのAttach時にネットワーク側から自動で割り当てられるコンテキストです。使用したplan-DのSIMはNTTドコモのMVNOですので、NTTドコモにもPDPコンテキストを作成しているようです(詳細はドコモ側の実装依存のため不明)。IPアドレスが 0.0.0.0 のためデータ通信には使用されませんが、接続維持のために保持されています。
IPアドレスが払い出されていればデータ通信の準備が完了しています。ここまで通れば、MQTTやHTTPでのデータ送信に進めます。
Step 4: 電波品質の確認
IPが払い出されてもデータが送信できたりできなかったりと、通信が不安定な場合は電波品質を確認します。
電波品質の基本確認は AT+CSQ で行います(標準コマンド)。
応答フォーマット:+CSQ: <rssi>,<ber>
正常:
AT+CSQ
+CSQ: 23,99
OK
<rssi> はコード値で、-113 + (値 × 2) dBmに換算します(3GPP TS 27.007)。23 = -67 dBm。99は計測不可を意味します。
Quectelモジュールでは AT+QCSQ を使うとRSSIに加えてRSRP・SINR・RSRQもまとめて取得できます。
応答フォーマット:+QCSQ: "eMTC",<rssi>,<rsrp>,<sinr>,<rsrq>
AT+QCSQ
+QCSQ: "eMTC",-67,-92,105,-12
OK
各指標(RSRP・SINR・RSRQなど)の意味と目安については以下の記事で解説しています。
エラー原因の確認:AT+CEER
各Stepで原因が分からない場合、AT+CEER でモジュールが記録している直近のエラー原因を確認できます。
AT+CEER
APNが未設定の場合の応答例:
AT+CEER
+CEER: UNKNOWN_OR_MISSING_APN
+CEER の応答はエラーが発生したタイミングで上書きされるため、問題が起きた直後に実行するのが有効です。
まとめ
ATコマンドを使えば、LTE-M接続が確立しない原因を「SIM認識 → ネットワーク登録 → PDN接続 → 電波品質」の4ステップで切り分けられます。
各ステップで詰まった場合は AT+CEER でエラー原因を確認してみてください。



