Nordic

nRF9160をATコマンドだけで制御してみよう:その2

2024.07.25(2024.07.31 更新)


こんにちは。
加賀デバイスのNordic Teamです。

以前”nRF9160をATコマンドだけで制御してみよう”というコラムを投稿しましたが、今回はNordicが用意しているSerial LTE Modem(以降SLM)のサンプルプロジェクトのみで使用出来るATコマンドについて紹介したいと思います。

SLMにはNordicが作ったATコマンドがいくつか用意されています。これらを使うことによってHTTPやMQTTなどの通信プロファイルが簡単に扱えたり、電力制御やnRF91シリーズの周辺機能をATコマンドから制御出来るようになります。
また、独自でカスタムATコマンドを作ることで自分が欲しい機能を追加する事ができ、外部MCUの処理の負担を減らすことができます。

前回のコラムのおさらいも含めてnRF91シリーズのATコマンドについて説明します。
nRF91シリーズで使用できるATコマンドは大きく分けて3種類あります。

   AT+XXX:標準的なATコマンド
   AT%XXX:Nordic独自のATコマンド
   AT#XXX:SLMのサンプルプロジェクトみで使用可能なATコマンド

AT+XXXやAT%XXXのATコマンドを受信するとModem processor側で処理しますが、SLMのみで使用出来るAT#XXXの ATコマンドはApplicaton processor側で処理します。


SLMで用意しているAT#XXXで実際にどのような処理を行っているかはサンプルプロジェクトのソースコードで確認することができます。

  SLMのソースコード(Github)

また、SLMに独自のカスタムATコマンドを追加する方法も公開されています。

  カスタムATコマンドの作り方

それではSLMで用意されているATコマンドについて見ていきたいと思います。
 ※紹介するATコマンドはnRF Connect SDK v2.6.1のSLMに含まれているものとなります。
  新しいnRF Conenct SDKがリリースされたら対応するATコマンドに変更がある可能性はあります。

◢◤SLMのATコマンド

  SLMでは下記コマンドが準備されています。

  〇汎用コマンド

    Generic AT commands

  〇接続関連

    CMUX AT commands

    Socket AT commands

  〇通信プロトコル

    FTP AT commands

    HTTP client AT commands

    ICMP AT commands

    LwM2M carrier library AT commands

    MQTT client AT commands

    PPP AT commands

    TCP and UDP AT commands

    SMS AT commands

  〇周辺機能制御

    GPIO AT commands

    TWI AT commands

  〇その他制御

    GNSS AT commands

    FOTA AT commands

    nRF Cloud AT commands

SLMのATコマンドの中の一部のコマンド(Generic、TCP/IP、ICMP、FTP、TWI)については、その使い方がドキュメントに示してあります。

  Testing scenarios

上記以外で参考になりそうなATコマンドについて実際に動かしてみたいと思います。

◢◤動作確認

〇General AT command
AT#XSLEEP:スリープモードとアイドルモードへの遷移

スリープモードはアプリケーションMCUをIDLE状態にし、ネットワークとの接続を遮断します。
ネットワークの遮断にはAT+CFUN=0が使用されるため、前回のコラム記事でも書きましたがFlash Memoryへのwirte/erase動作が発生します。
これを回避するには事前にAT+CFUN=4を実行してネットワークの遮断をしてから、AT#XSLEEP=1を実行すればAT+CFUN=0は発行されません。

アイドルモードはアプリケーションMCUのみをIDLE状態にします。また外部MCUとの通信で使用しているUARTの機能も停止します。
IDLE状態を解除するには”CONFIG_SLM_POWER_PIN”で設定したピンを使用します。
この状態が、nRF91シリーズがネットワークに接続しながら電流値が一番低い状態となります。

〇MQTT client AT commands

AWS:IoT Coreに接続してPublishとSubscribeの動作を確認します。 

指定したTopicでデータを送受信出来ているのが確認できます。


AWSのsubscribeの画面で”メッセージを指定された形式で表示できません。”と表示されていますが、これはnRF9160 DKからJSONフォーマットで送信していないからです。
AT#XMQTTPUBではダブルコーテーション(“)が送信出来ないためJSONフォーマットを送信できませんが、DATA MODEという送信方法を使うことでダブルコーテーション(“)を送信する事が可能となります。DATA MODEについては下部で説明いたします。

〇SMS AT commands

携帯のショートメッセージで動作確認します。

nRF9160 DKと携帯のメッセージアプリの間でデータの送受信出来ていることが確認できます。

〇HTTP Client AT commands

HTTPの動作確認のため、弊社HP(www.kgdev.co.jp)の日本語の問い合わせページ(/ja/information/)へアクセスしてみます。

情報量が多いため一部しか表示していませんが、AT#XHTTPCREQのGETで情報が取得出来ています。

◢◤DATA MODE

SLMではATコマンドを一つずつ解析して処理していくATコマンド MODEと、受信したデータをすべて送信するデータとみなすDATA MODEの2種類あります。

 Running in data mode

DATA MODEは各フォーマット(TCP、UDP、MQTTなど)で大量にデータを送信するときなど有効です。
各フォーマットでデータ送信する時に、送信コマンドのデータペイロードの部分に何も入れない状態でコマンドを送信します。
例えばMQTTで送信(publish)する場合は下記となります。

AT#XMQTTPUBの送信データ部分には何も入れずにコマンドを入力してDATA MODEに移行します。
DATA MODEでは、それ以降に入力した文字列(今回は{ “message”:”message form nRF9160 DK”})のすべてが送信データとして扱われます。

DATA MODE送った文字列がAWS:IoT core側で正しく受信出来ていることが確認できます。

DATA MODEを終了するにはCONFIG_SLM_DATAMODE_TERMINATORで指定した終了コマンド(Defaultでは +++)を入力します。

終了コマンドを送信した以降は通常のATコマンドモードとなります。

◢◤最後に

SLMのATコマンドを使用すれば、とても簡単にHTTPやMQTTなどの通信プロトコルを扱うことが可能となります。
ここでご紹介したATコマンド以外にも数多くのATコマンドがありますので一度お試しいただければと思います。

また、メーカが用意しているATコマンド以外で、こういった機能のATコマンドがあれば良かったのに、、、と思われた時でも、nRF91シリーズであれば欲しい機能のATコマンドを独自に作る事が可能です。

今後もNordicの紹介及びコラムにて色々な情報を公開致しますので是非ご確認ください。

また、Facebookでも随時情報を公開しておりますので合わせてご確認ください。

Nordic コラム一覧

nRF54L15 DKの量産が開始されました

関連記事