見出し画像

ZETAとSPRESENSE™でGPS付き無線センサを作ってみた(後編)

こんにちは。凸版印刷DXデザイン事業部のZETA・IoTソリューションチーム ”Team ZETA” です。
TOPPANは、メッシュ型次世代LPWA・ZETAを活用し、センサーデバイスからアプリケーションに至るZETAソリューションを展開しています。
今回は、TOPPANが提供する次世代型ZETA無線通信モジュールを搭載したAdd-onボード『ZETA R3 for SPRESENSE(TZS9002P)』を用いたGPS付き無線センサーの作成の後編を紹介します。
前編はこちらをご覧ください。

はじめに


前編ではSPRESENSEのスケッチ(Arduinoのプログラムの事)でZETA R3 for SPRESENSEを制御して、count値をZETAサーバーに送信するソフトウェアについて解説しました。後編ではSPRESENSEに搭載されているGPS機能を使って測位した緯度経度をZETAサーバーに送信(アップリンク)するソフトウェアを解説します。

GPSに必要なハードウェア

写真1はGPS-ZETA端末に必要なハードウェアです。前編で使ったハードウェアと同じです。

写真1:GPSZETA端末に必要なハードウェア

GPSソフトウェアのサンプルを動かしてみる

SPRESENSEでGPSを受信するのに必要なソフトウェアは、「スケッチ例」として公開されています。
「ツール」「ボード」「ボードマネージャ」からSPRESENSEを選びます(図1)。

図1:SPRESENSEボードを選択する

次に「ファイル」「スケッチ例」「GNSS」「gnss」を選びます。

図2:スケッチ例からgnssを選択する

gnssのスケッチが表示されたら、「ツール」「シリアルポート」からSPRESENSEがつながっているCOMを選んだあと、左上の➡(マイコンボードに書き込む)をクリックします。
下段に「ボードへの書き込みが完了しました」と表示されたら準備完了です。

図3:スケッチをコンパイルしてSPRESENSEに書き込む

書き込みが完了したら、右上の「虫眼鏡」をクリックするとシリアルモニタがポップアップ表示されてgnssが起動します。
GPS時刻を獲得するまでは1980/1/6 0:00から始まる時刻を表示します。これは「GPS時」と呼ばれる独自の時刻体系の起点時刻(UTC:協定世界時)です。GPS衛星を4基以上受信すると現在時刻が計算できるので、2023/8/8 0:40になりました。この時刻UTC:協定世界時)は日本時間より9時間遅れています。

図4:gnssの起動

時刻が定まってから数分以内に位置情報が定まります。
今回は4分かかっています。この時のSPRESENSEの場所は南向きのベランダの窓の内側です。上空が開けた場所なら準天頂衛星「みちびき」の電波を受信できるので1分程度で定まることが期待できます。

図5:位置情報の捕捉

GPSデータをZETAで送信する

gnss.zipはgnssのスケッチにZETAへの送信機能を追加したサンプルです。

以下の初期設定を追加しています。

GPSの位置情報が定まったら、浮動小数点のデータを整数部+小数点+小数部(6桁)の文字列に変換してからZETAで送信するcodeも追加しています。

Zeta.send(SEND_VARIABLE_LENGTH_DATA, latitude_pointer , 9); // 35.123456
がZETAモジュールへの送信コマンドです。3つの引数(parameter)の役割は以下の通りです。
①SEND_VARIABLE_LENGTH_DATA:コマンドの種類
②latitude_pointer:送信する文字列のポインタ
③9:送信する文字列の長さ

gnnsのスケッチを実行した結果図6のようにZETA R3に接続されたUARTからZETAへのアップリンクコマンド(FA F5 0C 02 33 36 2E 36 30 39 34 30 34 BD 23)が出力されます。
FA F5 0D 02はヘッダで、33 36 2E 36 30 39 34 30 34がGPSの緯度データ、
77 2BはCRCです。33 36 2E 36 30 39 34 30 34はASCIIコードで文字列に変換すると36.609404になります。「DD.dddd度表記」と呼ばれる表記で「度、分、秒」を全て「度」で表す表記です。google mapで使われている表記なので、緯度経度を文字列に変換してgoogle mapに入力すれば地図上に位置を
表示できます。

図6:ZETAへのアップリンクデータ

ZETAで位置情報を表示する

図7はZETAで提供している移動体管理システムの表示画面例です。

図7:ZETA移動体管理システムの表示

移動体管理システムで位置情報を表示させるためには、以下の16byteの書式でZETADRIVEにデータをアップリンクする必要があります。

packet[0]は東経/西経、北緯/南緯を示します。日本だけで使う場合はGPSデータを代入せず0固定でも問題ありません。

upload_longitude(経度)とupload_latitude(緯度)は、米国海洋電子機器協会(National Marine Electronics Association)が定めた規格NMEA-0183に準拠して「DD.mmmm度表記」とし、度と分(1秒は1/60分)で位置を表します。NMEA規格ではASCII表示ですが、byteがもったいないので整数で送信します。NMEA規格を採用した理由は、すでに存在するZETAのGPSロケータ(SZG100)と互換性を保つためです。
g_date_yyは西暦の下2桁、g_date_mmは「月」、g_date_ddは「日」、g_time_hhは「時」、g_time_mmは「分」g_time_ssはSPRESENSEの出力が無いので0固定。
pNavData->numSatellitesは、位置情報が定まったときに受信できていた衛星の数です。

ZETA_GPS完成版

ZETA_GPSスケッチの完成版はここからダウンロードできます。

gnssサンプルに追加した機能はおよそ以下の通りです。

①移動体管理システムのフォーマットに合わせたZETA送信機能
②ZETAのダウンリンク機能で送信間隔を変更できる機能
 ⇒ACKダウンリンク対応。リアルタイムダウンリンクモードでは機能しません。
③測位が確定し送信が完了したら、送信間隔で決まる時間分Cold_Sleepする機能
④準天頂衛星(みちびき)を使う設定に変更

⑤確定測位の11回~15回目のデータを使って位置情報を平均化する機能

なお、ZETA-Pを電池で使う場合は必ずACKダウンリンクモードにしてください。リアルタイムダウンリンクモードでは2500mAh(3V)の電池が2週間でなくなります。

まとめ

前編と後編でZETAとSPRESENSEでGPS付き無線センサを作ってみました。
次回以降は、以下のような記事を公開していきたいと思います。
1)ダウンリンクしたデータをOLEDパネルに表示するサイネージを作ってみた。
2)水道菅パイプで"ZETATube"を作ってみた。
3)Raspberry Pi Pico W (BLE機能付き低価格マイコンボード)+ZETA R3
 でBLE-ZETAゲートウェイを作ってみた。


----------------------------------------------------------------------------------
※ SPRESENSEおよびロゴは、ソニーグループ(株)またはその関連会社の登録商標または商標です。