nRF91シリーズをATコマンドだけで制御してみよう
2026.03.05

こんにちは。
加賀デバイスのNordic Teamです。
nRF Connect SDKで人気があったサンプルプロジェクト:Serial LTE Modemが、nRF Connect SDKから独自リポジトリになりSerial Modemとして生まれ変わりました。
nRF Connect SDKから分離された事により、今まではnRF Connect SDKと同じタイミングでしか更新出来ませんでしたが、これからはSerial Modemとして個別に管理されるようになります。
また、過去にAT commandのコラムを3つほど書いていましたが、これを機にSerial Modemの紹介と併せて1つのコラムとしてまとめて紹介していこうと思います。
nRF9160をATコマンドだけで制御してみよう
nRF9160をATコマンドだけで制御してみよう:その2
nRF9151をATコマンドだけで制御してみよう
◢◤概要
NordicのnRF91シリーズは1つのチップの中に”Application Processor”と”Modem Processor”の2つの機能が統合しています。
それにより1チップでネットワーク接続出来ることが特徴となっていますが、外部からATコマンドを入力して動作するようなモデム構成も実現可能です。
nRF91M1であればSerial Modemが書き込まれた状態で出荷されるので、プログラムのビルドや書き込みなど行わず、モデム構成としてすぐに使用可能となります。

◢◤nRF91シリーズで使えるATコマンド
nRF91シリーズで使用できるATコマンドは大きく分けて3種類あります。
AT+XXX:標準的なATコマンド
AT%XXX:Nordic独自のATコマンド
AT#XXX:Serial Modeのサンプルプロジェクトだけで使用可能なATコマンド

AT+XXXやAT%XXXのATコマンドはModem Processor側で処理され、Serial Modemのみで使用出来るAT#XXXのATコマンドはApplication Processor側で処理されます。
AT+XXXやAT%XXXのドキュメント
AT#XXXのドキュメント
Seirla ModemのATコマンド(AT#XXX)のソースコードはGitHubで確認することができます。
GitHub – nrfconnect/ncs-serial-modem
また、Serial Modemに独自のカスタムATコマンドを追加する方法も公開されています。
◢◤準備
〇Firmware
Serial Modemの入手前に、先ずはnRF Connect SDKの導入方法についてご確認ください。
nRF Connect SDK:Installation
弊社コラムやDevAcademyなどでnRF Connect SDKの使い方を説明していますのでご参照下さい。
コラム:nRF Connect SDK 環境構築方法(V3.0.0編)
DevAcademy:nRF Connect SDK Introduction
Serial Modemの入手については下記URLに記載されています。
Modem Firmwareは下記URLの”nRF91x1 SiP LTE Firmware”から入手可能です。
Modem Firmware:Downloads
ダウンロードしたModem FirmwareはnRF Connect for DesktopのProgrammerやnrfutilなどを使用して書き込みが出来ます。
Programmer:Programming nRF91 Series DK firmware
nrfutil:Programming a device with a SEGGER J-Link OB Debugger
〇通信設定
Serial Modemの制御はUARTを使用します。
nRF9151 DKなどの評価ボードとパソコンを接続して試す場合、ターミナル通信ソフトはどのようなものでも構いません。
今回はNordicが提供しているnRF connect for Desktopの”serial terminal”を使用して試したいと思います。
ターミナル通信ソフトを起動させて、評価ボードのリセットボタンを押した時に”Ready”が表示されれば接続成功です。
”Ready”が表示されない場合は違うCOMポートを選択して試してみて下さい。
◢◤ATコマンドを使用する上での注意事項
ATコマンドのドキュメントで、いくつかのATコマンドには下記のような注意書きがあります。
The command configuration is stored to NVM approximately every 48 hours and when the modem is powered off with the +CFUN=0 command.
この文章が記載されているATコマンドは、ネットワークの設定内容が48時間ごと、もしくはAT+CFUN=0を実行するたびにFlashメモリに保存されます。
設定値が保存されるため毎回そのATコマンドを実行する必要がなくなりとても便利な機能ですが、その設定値が保存されるたびにFlash MemoryのWrite/Eraseの動作が発生します。
nRF9151ではFlash MemoryのWrite/Eraseの耐性はMAX:10,000回と決まっていますので、頻繁にAT+CFUN=0を実行するようなプログラムにならないようにご注意いただければと思います。
nRF9151のFlash MemoryのWrite/Erase耐性
上記のようにいくつかのATコマンドでは設定値がFlash Memory保存されますが、その設定値を出荷時の状態に戻せるATコマンドもあります。
以前まではうまく接続出来ていたけど、いろいろなATコマンドを試している中で急に接続が出来なくなってしまった、、、といったような時は一度お試しいただいてもよいかもしれません。
また、使用するのを注意して頂きたいATコマンドがあります。
このコマンドを実行するとMFWのダウングレードが出来なくなります。
量産移行してMFWのダウングレードを防止したいときなどには有効ですが、開発中に様々なMFWのバージョンを試したい場合にはご注意ください。
では早速いくつかのATコマンドを紹介していきたいと思います。
※紹介するATコマンドは現時点で最新の情報となっていますが、新しいバージョンがリリースされたら変更が入る可能性があります。
◢◤情報確認コマンド
チップやSIMなどの情報が確認できるATコマンドがいくつかあります。
| AT%HWVERSION | チップのハードウェアバージョン確認 | ![]() |
| AT+CGMR | MFWのバージョン確認 | ![]() |
| AT+CGSN | チップのIMEIの確認 | ![]() |
| AT+CIMI | SIMのIMSIの確認 | ![]() |
| AT%XICCID | SIMのICCIDの確認 | ![]() |
| AT%DEVICEUUID | デバイス固有のUUIDの読み取り | ![]() |
| AT#XSMVER | Serial Modemのバージョン確認 | ![]() |
◢◤ネットワーク接続設定
nRF91シリーズを使用してネットワーク接続に参考となりそうなATコマンドについて紹介します。
〇SIM設定
使用するSIMに合わせて下記コマンドで設定を行います。
AT+CGDCONT:PDPやAPNの設定
AT+CGAUTH:ユーザー名やパスワードの設定
AT+CGACT:PDN接続の有効/無効の設定
弊社が所有しているSIMで試した例を示します。
実際にご使用される場合は各社サイトでご確認頂ければと思います。
| 株式会社インターネットイニシアティブ | ![]() |
| さくらインターネット株式会社 | ![]() |
| 1NCE株式会社 | ![]() |
| 株式会社SORACOM | ![]() |
| ミーク株式会社 | ![]() |
〇キャリアとBANDの指定
あらかじめキャリアやBANDを指定しておくことで不要なサーチ時間をなくし、接続までの時間を短縮出来る可能性があります。
AT+COPS:キャリア設定
AT%XBANDLOCK:BANDの指定
日本であればDocomo:44010、KDDI:44051、SoftBank:44020などの接続先を指定します。
〇PSMやeDRXの設定
PSMやeDRXについては別のコラムやNordicのDevAcademyで詳しく説明していますのでご参照いただければと思います。
コラム:nRF91シリーズのPSMとeDRXについて
DevAcademy:Power saving techniques
PSMのTAUやActive time、およびeDRXのeDRX CycleやPaging time windowsをATコマンドで指定します。
AT+CPSMS:PSMのTAUとActive timerの時間を設定
AT+CEDRXS:eDRX Cycleの時間を設定
AT+PTW:Paging time windowの時間を設定
ただし、使用するSIMやキャリアによってPSMやeDRXで設定出来る範囲が決まっているため、上記コマンドで設定したからといってその値が実際に設定出来ているとはかぎりません。
上記ATコマンドを入力して”OK”が返ってきたとしても、それはあくまでもモデム側がコマンドを受け付けただけであって、基地局とのやりとりで実際に設定出来ているかは別となります。
そのため、実際に設定が反映されているかAT%XMONITORなどで確認が必要となります。
AT%XMONITOR:モデムと基地局との接続状況の確認
〇消費電力の最適化
PSMやeDRXの設定以外にも低消費電力化に役立つコマンドがいくつかあります。
SIMのシャットダウンに関わるコマンドや、PLMNや基地局のサーチに関わるコマンドなどがあります。
AT%XDATAPRFL:ネットワークのサーチ時間やSIMのシャットダウン動作などの設定が可能
AT%REDMOB:LTE idle mode時のセルの入れ替えなどを制限
AT%POWERCLASS:デバイスの送信電力クラスの設定と読み出し *nRF9151のみ
AT%UICCPOWERSAVE:電力を節約するためのUICC 非アクティブ化の設定 *nRF9151のみ
AT%FEACONF:モデムで設定可能な機能。独自のPSMやPLMの選択に関数機能。
実際にnRF9151 DKで測定した結果を別のコラムにしていますのでぜひご覧ください。
コラム:nRF9151の消費電流
〇接続設定
AT%SYSTEMMODEでLTE-M/NB-IoT/GNSSの使用有無と優先順位を設定します。
AT%XSYSTEMMODE:システムモード選択
最後にAT+CFUN=1を実行することでネットワークへの接続を開始します。
AT+CFUN:モデムの機能選択
接続を遮断する場合もAT+CFUNコマンドを使用しますが、コラム冒頭にも書きましたとおり、CFUN=0を実行するとFlash MemoryへのWrite/Eraseの動作が発生するため注意が必要です。
ネットワークを遮断する場合はAT+CFUN=4であればFlash MemoryへのWrite/Eraseの動作は発生しません。
◢◤ネットワークにうまく接続出来ない時に参考となるATコマンド
ネットワークにうまく接続出来ない時にネットワーク側で何が起こっているのかある程度通知してくれるATコマンドも準備されています。
基地局とうまく接続出来ないときや、基地局までは接続出来ているが、その先に接続出来ない時などは下記のATコマンドを試してみてください。
AT+CESQ:現在の電波強度
AT%CESQ:電波強度が変化したとき通知
AT+CEREG:ネットワークのステータス通知
AT+CNEC:ネットワークからのエラーコードの通知
AT+CMEE:ネットワークの切断理由の通知
AT+CGEREP:パケットドメインのイベント通知
AT%MDMEV:モデムのイベント通知
上記ATコマンドを使用しても何が起きているか分からない場合は、モデム側の通信ログを見ることが出来るModem Traceの機能を使って実際に何が起きているのか確認する事も可能です。
具体的な使用方法は別のコラムで説明していますので、ご参考にして頂ければと思います。
コラム:Nordic nRF91シリーズ LTE通信ログの取得方法
◢◤RFテストコマンド
nRF9151では通常のModem Firmwareとは別に、製品テスト用のModem Firmwareを用意しています。
nRF91x1 Production Test AT Commands
このModem FirmwareにはRFテスト用のATコマンドが準備されています。
AT%XRFTEST(データ受信):データの受信評価

AT%XRFTEST(データ送信):データの送信評価

◢◤Serial Modemの機能
〇Serial ModemのATコマンド
Serial Modemでは独自に下記のATコマンドを用意しています。
Generic AT commands
CMUX AT commands
DFU AT commands
FOTA AT commands
GNSS AT commands
ICMP AT commands
LwM2M carrier library AT commands
MQTT client AT commands
nRF Cloud AT commands
PPP AT commands
SMS AT commands
Socket AT commands
LwM2MやMQTTなどのプロトコルにも対応したATコマンドがあり、Socket AT commandsではTCP/UDP通信などが使えるため、簡単にネットワークに接続する事が可能です。
〇Data Mode
Serial ModemではATコマンドを一つずつ解析して処理していくATコマンド MODEと、受信したデータをすべて送信するデータとみなすDATA MODEの2種類あります。
DATA MODEは各フォーマット(TCP、UDP、MQTTなど)で大量にデータを送信するときに有効です。
ATコマンド MODEからDATA MODEに移行する方法は、各フォーマットで送信コマンドのデータペイロードの部分に何も入れない状態でコマンドを送信します。
例えばMQTTで送信(publish)する場合は下記となります。

AT#XMQTTPUBの送信データ部分には何も入れずにコマンドを入力してDATA MODEに移行します。
DATA MODEでは、それ以降に入力した文字列(今回は{ “message”:”message form nRF9151 DK”})のすべてが送信データとして扱われます。
DATA MODEを終了するにはCONFIG_SM_DATAMODE_TERMINATORで指定した終了コマンド(Defaultでは +++)を入力します。
終了コマンドを送信した以降は通常のATコマンドモードとなります。
DATA MODEで送った文字列がAWS:IoT core側で正しく受信出来ていることが確認出来ます。

〇PPP通信
Serial Modem はUARTを通したPPP通信機能を備えており、Linuxホストとダイヤルアップ形式で接続することが可能です。
Cellular PPP modem
またCMUX に対応しているため、1つのUART上で AT コマンドと PPP 通信を同時に使用することが出来ます。
実際に試した結果が下記となります。
サンプルプロジェクトの中にある、CMUXを使ったPPP通信の接続のスクリプト(sm_start_ppp.sh)を実行した結果が下記となります。

ログを確認するとPPP通信の接続が確認出来ます。

AT コマンドと PPP 通信の両方使える事も確認出来ました。


◢◤最後に
いつくかのATコマンドを紹介してきましたが、これ以外にも数多くのATコマンドが用意されていますので、冒頭で紹介したドキュメント(AT+XXXやAT%XXXのドキュメント、AT#XXXのドキュメント)をお時間のある時にでもご確認いただければと思います。
今後もNordicの紹介及びコラムにて色々な情報を公開致しますので是非ご確認ください。
また、Facebookでも随時情報を公開しておりますので合わせてご確認ください。
※GitHubは、GitHub,Inc.の米国およびその他の国における商標または登録商標です。
※VS Code および Visual Studio Code は、Microsoft Corporation(マイクロソフト)の米国およびその他の国における登録商標または商標です。
Nordic コラム一覧
Memfaultの紹介
関連記事











