SORACOM を使って学ぶ AT コマンド - 1.入門編

この記事は SORACOM Advent Calendar 2017 4日目の記事です。

SORACOM の SIM を使っていると、「AT(エーティー)コマンド」というものを取り扱わないといけない場面にたまに出会いますよね。

私は出会います。

AT+CGDCONT=1,"IP","soracom.io"

とかそんな感じのやつです。

この「AT コマンド」が「モデムを制御したり情報を取得したりするためのもの」というのはなんとなく知っているけれど、基本的にはネット上で見つけたのをあまり意味もわからずコピペして使ってたり、コマンドの意味を調べようと思ってもなかなかまとまった情報が見当たらなかったり、そもそも体系的に勉強しようとしてもどこから手を付けたらいいかわからない、、、というような感じの人が多いのではないでしょうか。

私はそうでした。

日本語で書かれた良い入門記事が Web 上に見当たらなかったので、「ないものは作ってしまえ」メソッドで、ちょっと簡単にまとめてみたいと思います。

ツッコミ大歓迎です。

概要

AT コマンドの起源は 1981 年にヘイズ コミュニケーションズ (Hayes Communications) 社の固定電話回線用のモデムに導入された、電話をかけたり切ったりといった電話回線の制御やモデムの設定変更等に使われたコマンドに端を発するそうです。

コマンドの文字列が、皆さんご存知のように “AT” で始まるので日本語ではよく「AT コマンド」と言うと思いますが、英語では「ヘイズ コマンド セット (Hayes command set)」とも言うようです。(英語版の Wikipedia で「AT commands」と検索すると、https://en.wikipedia.org/wiki/Hayes_command_set に転送されます)

その後、モデムを作っていた各社が Hayes の真似をして独自拡張などを入れながら AT コマンドがモデムの制御のためのデファクトスタンダードとして広まっていったようです。

現在は ITU-T 勧告 (Recommendation) V.250(以下、ITU-T Rec. V.250)にて AT コマンドの標準が定められています。

ITU-T Rec. V.250 では、用語の定義、DTE と DCE の間の物理的な接続方法の取り決め、データレート、AT コマンドのシンタックス、多数の基本的な AT コマンドの仕様などが定められています。

ITU-T Rec. V.250 は ITU のサイトから誰でも無料でダウンロードして読むことができます。 https://www.itu.int/rec/T-REC-V.250-200307-I/en

なお、ITU-T Rec. V.250 では AT コマンドは「AT command set」と呼ばれています。そして AT は attention の先頭の2文字である旨も示されています。

携帯電話回線のためのモデムを制御するための AT コマンドの仕様は、ITU-T Rec. V.250 をベースに、3GPP TS 27.007 および 27.005 で標準が定められています。

27.007 および 27.005 は 3GPP のサイトから誰でも無料でダウンロードして読むことができます。 https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=1515 https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=1514

ITU-T Rec. V.250 は PDF で配布されていますが、3GPP TS 27.007 および 27.005 は Microsoft Word 形式のファイルなので読むために対応ソフトが必要です。

この後、上記 3 つのドキュメントをちょくちょく参照することになると思いますのでダウンロードして手元で見られるようにしておくと良いかもしれません。

AT コマンドのシンタックス

ほとんどの AT コマンドは、AT の 2 文字で始まる文字列です。 AT 以外に、直前のコマンドを繰り返す A/ というコマンドもありますが、それ以外は基本的に AT で始まります。

AT コマンドの文字列を何らかの方法でモデムに送信すると、モデムはそのコマンド文字列を解釈して様々な動作を行います。 どうやってモデムにコマンド文字列を送るかについては、モデムにシリアルポートがある場合はそのシリアルポート経由で送信したり、Unix 系の OS では tty が割り当てられたりしますのでそこに送信する場合もあります。

AT コマンドは通常は大文字の AT で始まる文字列ですが、小文字の at も許されているようです。大文字小文字の混在(aT もしくは At)は ITU-T Rec. V.250 では明示的には許可されていないように見受けられましたが、混在した文字列を送信しても問題なく認識してくれるモデムが多いようです。 とはいえ、AT と大文字で書くのが一般的かと思いますので、この記事でも大文字を使います。

AT の次に、アルファベットもしくは記号が続きます。

たとえば ATD というコマンドは電話をかけるコマンドです。 ATD12345678 という AT コマンドを実行すると、12345678 という番号に電話をかけます。

SORACOM SIM を使ってダイアルアップ接続する際には ATD*99***1# というようなコマンドを実行しますが、これは *99***1# という(ちょっと不思議な)番号に電話をかけているということになります。 電話番号として使える文字は、 0 1 2 3 4 5 6 7 8 9 * # + A B C D のいずれかのようです。

*# は電話機のボタン等でも見たことがありますね。

+ は国際電話をかけるときに先頭につけます。

A B C D は何に使うのかよくわかりません😅

これらの他に , を入れることもできて、, のタイミングでポーズ(一時停止)させることができます。

たとえば ATD123,456 という AT コマンドを実行すると、123 に電話をかけ、しばらく待ってから 456 を入力するようなイメージです。

サポートセンターなどに電話をすると自動音声でメニューが読み上げられて番号を入力させるようなことがあると思いますが、そのような場合に使えるのかもしれません。

, でどのくらいの時間ポーズするかは ATS8 コマンドで設定することができます。

ATD は番号の末尾に ; で区切って電話に応答するための A コマンドをつなげることができます。(例) ATD123456789;A これは、ダイヤルアップしてからコールバックしてくるようなシステムで用いるようです。

だいぶ話がそれてしまいました。

ATDATS8 のように、AT のすぐあとにアルファベットがくるコマンドは「基本コマンド」といって、以下のような種類があります。

コマンド 意味
A かかってきた電話に出る
D 電話をかける
E 実行したコマンドをエコーバックするかどうかの設定
H Hook の制御
I 識別情報のリクエス
L モニタースピーカーの音量設定
M モニタースピーカーのモード設定
O オンラインデータ状態に戻る
P パルスダイヤリングを選択
Q 結果コードの抑制
S0 自動応答の設定
S10 自動切断ディレイ
S3 コマンド行終端文字
S4 レスポンスフォーマッティング文字
S5 コマンド行編集文字の設定
S6 ダイヤルトーン検出が無効の場合にダイヤル開始するまでの待ち時間の設定
S7 接続完了までのタイムアウト設定
S8 ダイヤル時に , でポーズする時間の設定
T トーンダイヤリングを選択
V DCE レスポンスフォーマット
X 結果コード選択およびコール進捗モニタリング制御
Z デフォルトコンフィグレーションへのリセット

他にも、AT のすぐあとに & が来る基本コマンドもいくつかあります。

コマンド 意味
&C Circuit 109 (Received line signal detector) の挙動
&D Circuit 108 (Data terminal ready) の挙動
&F 工場出荷時設定にリセット

AT のあとに + が来るのは拡張コマンドと呼ばれ、+ の次の文字で大まかなコマンドのグループが特定され、さらに続く文字列でコマンドとなります。

拡張コマンドの先頭文字 意味
+A 呼制御関連
+C デジタル携帯電話拡張
+D データ圧縮 (ITU-T Rec. V.42 bis)
+E エラー制御 (ITU-T Rec. V.42)
+F FAX (ITU-T Rec. T.30 など)
+G 一般的なコマンド(identity や capabilities など)
+I DTE-DCE インターフェース関連 (ITU-T Rec.v.24 など)
+M 変調方式 (ITU-T Rec. V.32 bis など)
+P PCM DCE コマンド (ITU-T Rec. V.92)
+S Switched or Simultaneous Data Types
+T テスト関連
+V 音声通話拡張
+W 無線拡張

たとえば AT+CGDCONT=1,"IP","soracom.io"+C なので携帯電話回線用の拡張コマンドで、PDP Context と呼ばれるものを定義するためのものです。詳しくは続編で解説することになると思います。

このあと AT コマンドを実際に実行したりして学んでいきたいと思いますが、その前に AT コマンドを実行してみることができる環境を準備することが必要です。

次の記事では、AT コマンド実行環境の準備をしていきます。