デバイスコントロール UDP送信APIを用いてデバイスに制御命令を送信する
本ページでは、クラウド側のシステムよりIIJ IoTサービスの Web API を使用して、SIMが刺さっているデバイスへUDPパケットの制御命令を送る方法をご紹介いたします。
前提
LTE通信チップである EC25-J / BG96 / BG77 (Quectel社製) を使用して、ATコマンドのみでUDPパケットの待ち受け状態にし、クラウドからAPIを使用して通信チップにUDPパケットを送信する動作例を記述しております。
なお、通信チップのファームウェアやバージョンによりATコマンドの仕様が異なる可能性があります。ATコマンド仕様の詳細はQuectel社発行のATコマンドマニュアルをご参照ください。
デバイス(LTE通信チップ)の操作 - LTE回線接続
事前準備
通信チップ(通信ボード)にIIJ IoTサービス用のSIMを挿します。
通信チップにATコマンドを送信できるようにデバイスをセットアップします。詳細は通信チップ(通信ボード)の説明書をご参照ください。
SIMが正しく認識されているか確認します。AT+CIMI を実行してSIMのIMSIが表示されればOKです。
AT+CIMI 440************ OK
APNの設定
APNを設定します。設定するAPNはご利用中のSIMにより異なりますので、詳細は モバイルアクセス をご参照ください。
AT+QICSGP コマンドのパラメータ 3つ目にAPN、4つ目にユーザ、5つ目にパスワード、6つ目に認証方法(3=PAP or CHAP) を設定します。
AT+QICSGP=1,1,"iot.iijmobile.jp","mobile@iot","iot",3 OK
基地局サーチ・回線接続
AT+COPS=? で周辺の基地局をサーチします。
AT+COPS=? +COPS: (1,"JP DOCOMO","DOCOMO","44010",2),(2,"NTT DOCOMO","DOCOMO","44010",7), .....(以下略)..... OK
見つかった基地局に接続します。
AT+COPS=1,2,"44010" OK
接続できていることを確認します。
AT+COPS? +COPS: 0,0,"NTT DOCOMO NTT DOCOMO",7 OK
念のため、IIJ IoTサービスのホストにPINGを打ってみます。応答が返ってくればOKです。
AT+QPING=1,"gw.iot.iij.jp",1,2 OK +QPING: 0,"10.64.2.12",32,60,255 +QPING: 0,"10.64.2.12",32,64,255 +QPING: 0,2,2,0,60,64,62
デバイス(LTE通信チップ)の操作 - UDP待ち受け
PDPコンテキストの有効化
PDPコンテキストをアクティブ化します。
AT+QIACT? を実行し、結果が返ってきた場合はすでにアクティブ状態になっていますので、何も操作する必要はありません。
AT+QIACT? +QIACT: 1,1,1,"10.**.**.**" # これが返ってきた場合はアクティブ状態になっている OK
返ってこない場合は、以下のとおりアクティブ化させます。
AT+QIACT=1 OK AT+QIACT? +QIACT: 1,1,1,"10.**.**.**" OK
UDP待ち受け
AT+QIOPEN でUDP待ち受け状態にします。3つ目のパラメータを "UDP SERVICE" とすることで UDPサーバとして待ち受け状態になります。6つ目のパラメータに待ち受けるポート番号(例では9876番)を指定します。
AT+QIOPEN=1,1,"UDP SERVICE","127.0.0.1",0,9876,0 OK +QIOPEN: 1,0
待ち受け状態になっていることを確認します。
AT+QISTATE=0,1 +QISTATE: 1,"UDP SERVICE","10.**.**.**",0,9876,2,1,1,0,"usbat" OK
クラウドからAPIでUDPパケットを送信
クラウド側のサーバより、Web API を使用してUDPパケットを送信します。APIの使用方法は Web API のページをご参照ください。
なお、Web APIの動作検証をするだけであれば、IIJ IoTサービス Web API のページからAPIを実行することも可能です。今回はこのページを利用した動作確認の手順を記述します。
事前準備
IoTサービスのコントロールパネルより、以下の情報をメモしておきます。
- 「API」画面より アクセスキー・シークレットアクセスキーをメモします。
- 「デバイス」画面より、UDP送信するデバイス(SIM)の Device ID をメモします。
UDP送信APIの実行
IIJ IoTサービス Web API のページを開き、以下のとおり操作します。
- 画面上部の "AccessKeyID" "SecretAccessKey" に、メモしておいた アクセスキー・シークレットアクセスキー を入力します。
- UDP送信API の欄を開き、画面上の "Try it out" ボタンを押します。
"deviceId" の欄に、メモしておいた Device ID を入力します。
"udpRequest" の欄に、送信先デバイスのポート番号と送信するペイロードをJSON形式で入力します。今回は、デバイスに "time 10" という制御命令を 9876 番ポートに 送信します。
{ "port": 9876, "payload": "time 10" }
画面上の "Execute" ボタンを押すと API実行結果が表示されます。 202のレスポンスが返ってくればOKです。
デバイス(LTE通信チップ)の操作 - UDPパケット受信
UDPパケット受信
UDPパケットを受信すると以下のような出力があります。
+QIURC: "recv",1
受信したUDPパケットを表示します。
クラウドから送信したペイロード "time 10" が取得できます。
AT+QIRD=1 +QIRD: 8,"10.**.**.**",***** time 10 OK
"time 10" という制御命令を受け取ったデバイスは「データの送信間隔を10分ごとに変更する」と言った操作を、デバイスのアプリケーション(ファームウェア)で実装します。
デバイス(LTE通信チップ)の操作 - 後片付け
UDP待ち受けが不要になった場合は、クローズします。
AT+QICLOSE=1 OK
ステータスを確認して、待ち受けしていないことを確認します。
AT+QISTATE=0,1 OK
まとめ
このように、通信チップでATコマンドの操作をするだけで、デバイス側で簡単にUDPの制御命令を受信することが可能です。
LTE-Mを使用するような低消費電力のデバイスでは、MQTTの通信やSSL暗号化ですら消費電力が馬鹿にならない場合もあります。そのような場合は、この例のようなUDPでのシンプルなデータ通信を使用することでより消費電力を低減させることが可能となる場合があります。
ぜひご活用ください。