やさしさあふれるATコマンド入門


SORACOM Advent Calendar 201919日目の記事です。
今日は、ソラコムのSIMをUSBモデムに挿して通信する時に使うAT(エーティー)コマンドがどのようなものかについて、お話ししたいと思います。

きっかけ

ソラコム認定デバイスのUSBモデムを使って通信する時、各種デバイスで SORACOM Air を使用するにあるsetup_air.shというスクリプトを実行すると、それだけで簡単にインターネットに繋がるのですが、その中身がずっと気になっていました。どうやらATコマンドというものを叩いているようなのですが、私には謎の文字列の羅列にしか見えず、なかなか興味を持てないまま月日が経ちました。
そんな中、技術書典というイベントでATコマンドカルタというものが販売されていたので、これを買って眺めているとATコマンドに興味が湧いてきて、その勢いで書いたのがこのブログになります。

これを見て、「ふむふむ、コマンドごとに何か意味があるのね。これってWindowsやLinuxのコマンドみたい。こうして見ると分かりやすいかも。」と思いました。

ATコマンドって何?

コマンドとは機械に何かを実行させる命令のことで、やって欲しいことを伝えると機械がそれを実行し、必要に応じて結果を返すものです。例えば身近な例ですと、「OKグーグル 明日の天気教えて」とか「アレクサ 何か音楽かけて」と伝えることがコマンドに相当します。
同じように、USBモデムに対して「ショートメッセージ(SMS)送って」とか「USBモデムのメーカーを教えて」などの命令を伝えるためのコマンドがATコマンドなのです。下の図で言うと、Raspberry PiからUSBモデムに対してATコマンドで命令するイメージです。SIMを挿したUSBモデムをRaspberry Piに挿しただけでは通信ができず、通信するためにはATコマンドが必要なのです。

具体的なATコマンドの例として、ATIというコマンドを見てみましょう。

ATコマンドは全てATから始まるのですが、このATはATtention、つまり「注目!」のような意味なので、これはまさに先ほどの「OKグーグル」や「アレクサ」に相当します。そしてATの後のIが命令に相当し、今回のケースだと「モデムの製造情報を教えて」という要求になります。

どんなコマンドがあるの?

USBモデムに挿さっているSIMのIMSIを教えて!

AT+CIMI
295050910xxxxxx

コマンドの結果で返されるIMSIは、SORACOMのユーザコンソールで見れるコレです。

USBモデムのメーカーやモデル名を教えて!

ATI
Manufacturer: huawei
Model: MS2372h-607
Revision: 21.328.02.01.00
IMEI: 8670230301xxxxx
+GCAP: +CGSM,+DS,+ES

実際に使っていたモデムはこれです。

電波状況を教えて

AT+CSQ
+CSQ: 25,99

数字が電波状況を表しているそうです。

他にもモデムとやり取りするためのコマンドはたくさんあります(カルタが出来るくらいなので)。また、標準規格で定義されているATコマンドの他に、モデムの種類ごとに独自のATコマンドが用意されているようなケースもあります。

で、結局どうやって繋げてるの?

setup_air.shスクリプトにあるATコマンドだけ取り出すと、こんな感じです。

AT+CFUN=1
ATZ
AT+CGDCONT=1,"IP","$1"
ATD *99***1#

カルタで見るとこんな感じ。

これをざっくり一言で言うと、「無線通信が可能な状態にして、設定を初期化した後、接続のための設定をしてから指定した番号にダイヤル接続する」という感じの命令をUSBモデムにしていることになります。この命令をすることで、SORACOMに接続できているのですね!

次のステップ

今回は、ATコマンドに興味を持って頂くことにフォーカスして、詳細や手順は一切省きました。このブログを見て頂き、実際に自分でもコマンドを叩いてみたい!数字が電波状況を表しているそうって、、もっと正確に!と思われた方は、ぜひこちらのブログをご覧ください!

それでは、「ATコマンドのこと知りたいなら、まずはやさしさあふれるこのブログを見るといいよ」と言われる日が来ることを願って投稿!