携帯電話のモデムを扱う必要がある開発者は、「AT コマンド」と呼ばれるものをいつかは使用しなければなりません。 AT コマンドは、基本的にモデム命令です。 もともとは、モデム メーカーの Hayes 社がダイヤルアップ固定電話製品を操作する手段として開発したものですが、AT コマンド (「AT」は「come to ATtention」の略) は、現在、あらゆる種類のすべてのモデムで使用されています。 これは、アプリケーションのデバッグや、モデムが正しいネットワークに接続されているか、正しい携帯電話技術を使用しているか、ローミングが有効になっているかなど、正しく動作しているかどうかを確認するのに非常に便利です。 まもなく、このようなタスクに役立つコマンドをいくつか紹介します。
ATコマンドの送信方法
ATコマンドは、受信(RX)と送信(TX)用の2つのワイヤからなるシリアル(UART)接続、またはUSBを介してプレーンテキストとしてモデムに送信されます。 現場では、セルラー対応のIoTデバイスはATコマンドを送信することでモデムを管理しますが、アプリケーションの開発やデバッグ時には、モデムの接続をタップすることも珍しくありません。
ATコマンドのフォーマット方法
送信するコマンドは、次の基本構文に従わなければなりません:
AT<COMMAND><SUFFIX><DATA>
これは「コマンドライン」と呼ばれています。 見てのとおり、これは AT
で始まり、コマンド、コマンドモードまたは「タイプ」を示すサフィックス、そして最後にいくつかのデータが続きますが、すべてのコマンドがこのフィールドを含む必要があるわけではありません。
AT<COMMAND><SUFFIX><DATA>;<COMMAND><SUFFIX><DATA>;<COMMAND><SUFFIX><DATA>
すべての行は、それがいくつのコマンドを含んでいても、最初に AT
を 1 つだけ持っています。 1行に2回以上AT
を含めるとエラーになります。 マルチコマンド行のコマンドは、順次処理される。
AT command line fields
<COMMAND>
フィールドはモデムに何をさせたいかを示します。 古い「基本」コマンドは1文字の名前を持ち、後に追加された「拡張」コマンドは、AT+COPS
(ネットワークのスキャン)やAT+CGMI
(モデムメーカーの取得)など、+
記号を先頭に持つコマンドセットと呼ばれるものである。 また、モデムの設定をリセットするAT&F
など、&を先頭に持つコマンドもあります。 すべてのセルラーコマンドは拡張コマンドです。 ATコマンドの仕様では、コマンドは大文字で構成されなければなりませんが、多くのモデムでは小文字で送信することも可能です。 ここでは、標準的なものを使用することにします。
<DATA>
と<SUFFIX>
フィールドの値は、コマンドの種類によって異なり、4種類あります。
Type | Suffix | Role |
---|---|---|
Read | ? |
モデム構成設定の取得 |
設定 | = |
Set modem configuration setting |
実行 | なし | モデム操作を起動する |
テスト | =? |
モデムが指定したコマンドに対応するか確認 – しかしAT+COPS=? は少し違う動作をするので注意すること。 |
これらのタイプがATコマンドの使用にどう影響するかは後述しますが、まずモデムがコマンドにどう応答するかを見てみましょう。
AT command response
ATコマンドが発行されると、送られたコマンドによって、モデムはデータを返すかどうか、つまり、「情報応答」と呼ばれるものを行います。 いずれにせよ、コマンド操作は常にモデムが「結果コード」を返すことで終了します。
たとえば、次のコマンドを使用してモデムのメーカー名を問い合わせるとします。
AT+CGMI
これは u-blox モデムで呼び出されると、次の応答を生成します。
u-bloxOK
応答の各ユニット(情報(上の行)と結果コード(下の行))は、キャリッジ リターンとライン フィード文字(それぞれアスキー コード 0x0D
と 0x0A
)で括られるため、OK
の前に空行があります。
OK
は一方のリターンコードで、もう一方は ERROR
で、これは間違いです。 送信したATコマンドにモデムが応答しないか、タイプミスをしたのでしょう。 データ値やコマンドパラメータが少なすぎるか、多すぎるのでしょう。 デフォルトでは、モデムはあまり説明をしてくれないかもしれません。 幸い、拡張エラー情報を返すように設定できるものもあります。この場合も、この設定を適用するには、ATコマンドを送信する必要があります。 AT+CMEE=2
.
完全に有効なATコマンドからERROR
を受信することもあることを理解することが重要です。 この場合、モデムがコマンドと互換性のない状態にあることを示しています。 例えば、モデムがアクティブな状態でアクセスポイント名(APN)を変更しようとすると、通常ERROR
が返されます。
AT command types and testing
Test command suffix (=?
) を使用することにより、一見正しいコマンドがエラーを起こす問題を緩和することができます。 もしサポートしていなければ、ERROR
のリターンコードが返ってくるので、このコマンドを発行してはいけないということがわかる。 モデムがコマンドをサポートしている場合、コマンドのパラメータを示す情報応答が得られ、その後に OK
.
が続きます。
AT+CGMI=?
このコマンドをサポートしているかどうかをモデムに問い合わせると、このコマンドをサポートしているので、OKが返されます。 しかし、モデムのメーカーが固定されているため、変更しようとすると必ずERROR
となります。 どのように値を変更しようとしたのでしょうか? setコマンドのサフィックス(=
)を使った場合:
AT+CGMI="Fintlewoodlewix"ERROR
文字列データがダブルクォート内に配置されていることに注意してください – これもATコマンドの要求事項です
。