Wio BG770A でATコマンドを使う — シリアルモニタ経由でLTE-Mの状態を確認する

Wio BG770AでLTE-Mに接続しようとしてうまくいかない時に、SIMの接触不良やAPNの設定誤りを疑い、ATコマンドでデバッグしようとしました。

ところが、PlatformIOのシリアルモニタから直接ATコマンドを打っても何も返ってこず、どうやってATコマンドを発行すればよいか分かりませんでした。調べてみたところ、ATコマンドを打つための専用のスケッチがSeeed公式Wikiに用意されていました。

この記事ではATコマンドが直接打てない原因を解説した後、スケッチを使用してATコマンドを発行する方法を紹介します。

Wio BG770Aのハード構造

前提として、ATコマンドの発行先はLTE-Mチップです。Wio BG770Aだけを触っていると、MCUとLTE-Mチップが一体化しているため別物という感覚が薄くなりがちですが、ここを意識すると分かりやすいです。

Wio BG770AにはQuectel製のLTE-Mチップ(BG77xシリーズ)が搭載されており、MCUとLTE-MチップはUART(シリアル通信)で繋がっています。

USB→MCU→UART→LTE-Mチップの構造図
USB接続はMCUに繋がり、LTE-MチップにはUART経由でアクセスする

PCからUSBで接続すると、繋がるのはMCUです。LTE-Mチップに到達するにはMCUを経由する必要があります。

USB LTEドングルや単体のLTE-Mモジュールであれば、TTYデバイスに直接ATコマンドを打てます。Wio BG770AはMCUが間に入るため、Arduinoプログラム(スケッチ)としてMCUに処理を書く必要があります。

ATコマンドを打つには、transparentスケッチを使う

transparentを動かすとシリアル通信でATコマンドを打つことができます。

transparentスケッチのloop()はこのようになっています。

void loop() {
  int c;
 
  while (true) {
    while ((c = Serial.read()) >= 0) {
      WioCellular.getInterface().write(c);
    }
 
    while ((c = WioCellular.getInterface().read()) >= 0) {
      Serial.write(c);
    }
 
    delay(2);
  }
}

1つ目のwhileがシリアルモニタからの入力をLTE-Mチップに転送、2つ目のwhileがLTE-Mチップからのレスポンスをシリアルモニタに返しています。このスケッチを書き込むことで、シリアルモニタからATコマンドをインタラクティブに打てるようになります。

実際のATコマンド実行ログ

transparentスケッチを書き込み、シリアルモニタからATコマンドを打った実行ログです。

ATI
Quectel
BG770A-GL
Revision: BG770AGLAAR02A05_JP

OK
AT+CIMI
44010*****00054

ATIはモジュールの製品情報を返します。メーカー(Quectel)・モデル(BG770A-GL)・ファームウェアバージョン(BG770AGLAAR02A05_JP)が確認できます。

AT+CIMIはSIMのIMSI(国際移動体加入者識別番号)を返します。15桁の数字で、先頭3桁がMCC(国コード、日本は440)、続く2桁がMNC(キャリアコード)です。なお、ログ内のIMSIは中間部分をマスクしています。

ATコマンドの具体的な使い方(電波品質・オペレーター確認など)は以下の記事にまとめています。

アプリ動作中にATコマンドを打ちたい場合

transparentスケッチはデバッグ専用で、書き込むとアプリスケッチが上書きされます。「SORACOMのLTE-M接続中にRSSIを確認したい」といった場合、毎回スケッチを切り替えるのは手間です。そこで、アプリスケッチにATコマンドの処理を組み込む方法があります。

ログ用途: スケッチのコード内でATコマンドを発行します。起動時の接続確認や定期的なRSSI取得など、決まった情報を自動で記録したい場合に向いています。

デバッグ用途: transparentの2つのwhileをアプリスケッチのloop()に組み込みます。シリアルモニタから対話的にATコマンドを打てるため、問題の切り分けに向いています。while (true)を外せばブロッキングも発生しません。

サンプルコード

この記事で紹介したtransparentスケッチのフルコードはGitHubで公開しています。

wio-bg770a-at-command-passthrough — iotbuilds-samples

Wio BG770A ATコマンドパススルー スケッチ(PlatformIO)

github.com

まとめ

本記事では、Wio BG770AでATコマンドが直接打てない理由と、transparentスケッチの仕組みを紹介しました。

USBシリアルがMCUに繋がっており、LTE-MチップにはMCU経由でしかアクセスできない点は、USB LTEドングルに慣れていると最初に詰まる部分です。transparentスケッチはその橋渡しをするためのものです。

Wio BG770AのようにMCUとLTE-Mチップが一体化したデバイスでは、ATコマンドを打つ前にまずその構造を理解する必要があります。構造が分かれば、ログ用途とデバッグ用途でアプローチを使い分けられるようになります。

関連記事