GNSSモジュールを使って、緯度経度データを取得してみよう！・ターミナルモニタ編

STマイクロエレクトロニクスの汎用32bitマイコン開発ボード[「NUCLEO-L476RG」](https://www.st.com/content/st_com/ja/products/evaluation-tools/product-evaluation-tools/mcu-mpu-eval-tools/stm32-mcu-mpu-eval-tools/stm32-nucleo-boards/nucleo-l476rg.html)と、GNSS*測位ICを搭載した機能拡張ボード「X-NUCLEO-GNSS1A1」を使って、自分の緯度・経度位置をモニタしてみます（*Global Navigation Satellite System : 全地球航法衛星システム）。拡張ボードに搭載されている車載用GNSS測位IC は「Teseo III」と呼ばれ、STのGNSSモジュール[「Teseo-LIV3F」](https://www.st.com/content/st_com/en/products/positioning/gnss-modules/teseo-liv3f.html#overview) として実装されています。今回は、ターミナルツール経由でGNSSデータを見てみます。

[（GUI編はこちら）](https://qiita.com/Yuji_Kawano/private/9b193c9f6ce1c4ae61e9)
#1. まずは、ハードウェアを準備
NUCLEO-L476RG とX-NUCLEO-GNSS1A1を接続。ほかのSTM32 Nucleoボードも選択できますが、ここでは基本的な位置座標取得アプリケーション（GetPos_XX）が既に用意されているL476を選択します。
X-NUCLEO-GNSS1A1付属のアンテナは動作確認時に接続します（ここでは未接続のままでOK）。
[NUCLEO-L476RG](https://www.st.com/content/st_com/ja/products/evaluation-tools/product-evaluation-tools/mcu-mpu-eval-tools/stm32-mcu-mpu-eval-tools/stm32-nucleo-boards/nucleo-l476rg.html)
[X-NUCLEO-GNSS1A1](https://www.st.com/en/ecosystems/x-nucleo-gnss1a1.html#resource)
![boardSetup.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/397f4317-faac-ef1a-811d-379d416f750c.jpeg)



#2.次にソフトウェアを準備
##STM32CubeProgrammerのインストール
（既にインストール済みであればスキップしてください）
初めてパソコンでSTM32NUCLEOボードを使用する場合、STM32CubeProgrammer（旧ツール：ST Link Utility）をインストールしてCOMポート･ドライバなどを入れます（この記事ではSTM32CubeProgrammerは使用しませんが、ドライバなどが必要になります）。

このツールはSTM32のボード上にファームウェア・プログラムを書き込む際に必要です。ダウンロード･ファイルを解凍した後は、実行ファイルを起動して案内にしたがってインストールしてください。すでにSTM32CubeProgrammerをインストール済みの場合はこの作業は不要です。
[STM32CubeProgrammer](https://www.st.com/en/development-tools/stm32cubeprog.html)
![stm32cubeprogrammer.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/4fb2a35d-4671-54bd-8739-2bce534cedfc.jpeg)



##動作用ソフトウェアの入手
STマイクロエレクトロニクスのウェブサイトから以下のソフトウェア･ファイルをダウンロードします。
[X-CUBE-GNSS1](https://www.st.com/content/st_com/en/products/embedded-software/mcu-mpu-embedded-software/stm32-embedded-software/stm32cube-expansion-packages/x-cube-gnss1.html)
![xcube-gnss1_download.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/79658675-9bd4-d862-21ce-243dcfc5e67e.jpeg)

ダウンロードしたファイルを解凍すると、そのまま統合開発環境用の作業フォルダができあがります。以下のフォルダに今回使用するデモ･プログラム･ファイル（バイナリファイル）が用意されているので、これをSTM32 Nucleoボードに書き込みます。
Drive:\...\STM32CubeExpansion_GNSS1_VX.X.X\Projects\STM32L476RG-Nucleo\Applications\GetPos_I2C\Binary
パソコンにSTM32 NucleoボードをUSB接続すると、ドライバが正常であれば「NODE_XXXX」といったデバイスが認識されるはずです。書き込みたいファイル（バイナリ。*.bin）を対象のSTM32 Nucleoボードへドラッグ & ドロップします。ここではGetPos_I2C.binというプログラム･ファイルをNODE_L46RGへコピーします（これだけでSTM32マイコンへのファームウェア書き込みは完了です）。
![fileProgram.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/9c4ee009-d16c-2bb2-4887-ba4068c3297e.jpeg)



#3.動作確認
##セットアップ
STM32 NucleボードとX-NUCLEO-GNSS1A1ボードをArduinoコネクタ経由で接続します。X-NUCLEO-GNSS1A1ボード上のアンテナ･コネクタに付属しているアンテナを接続します。準備が出来たらパソコンにUSB接続してください。
アンテナ本体は屋外または空が見える窓側に設置してください。

##ターミナル・ツールを起動
パソコンで動作確認するためにシリアル･ポートを利用します。TeraTermなどのターミナル･エミュレータ･ツールを事前にパソコンへインストールしてください。
「シリアルポート」を選択し、STM32 Nucleoに該当するCOMポートを選択します。その後、OKをクリック。

選択Port：「COM x: STMicroelectronics STLink Virtual COM Port」
![teraterm_open.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/dd4caab0-3f7b-6a76-a2c8-cf4300c51a22.jpeg)

シリアル・ポートを以下のように設定します。
Baud rate＝115200, Date=8bit, Parity=None, Stop bit=1
![teraterm_serialsettings.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/1bfa08f0-94e5-79a5-294c-0478291c0c49.jpeg)

STM32 Nucleoボードのリセットボタン（黒スイッチ）を押すと以下のコマンドリストが表示されます。
（補足）最後に「Save configuration (y/n)」と表示されますが無視してください。
![teraterm_menu.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/22b860e2-1fc3-0b90-d033-6e9fed845abb.jpeg)

有用なコマンドをいくつか以下に説明します。
`1) GETPOS:`
$GPGGA NMEA メッセージを取得＆デコードして位置情報を出力します。
` 4) HELP:`
コマンドメニューを出力します。
` 8) GETFWVER:`
STの独自コマンド$PSTMGETSWVER を発行して、Teseoモジュール内ファームウェアのバージョンを出力します。
`11) GETGPRMC:`
$GPRMC メッセージを取得＆デコードします。Recommended Minimum Specific GPS/Transit data.
`12) GETGSAMSG:`
$--GSA メッセージを取得＆デコードし、精度低下率（GNSS DOP）およびアクティブな衛星の情報を出力します。
`13) GETGSVMSG:`
$--GSV メッセージを取得＆デコードし、見えている衛星の情報を出力します。出力は衛星測位システム毎になります。
##GNSSメッセージ確認
コマンド番号を入力することで欲しいデータを表示できます。代表的なメッセージについて、いくつか表示例を紹介します。
###＞1-getpos：$GPGGA (essential fix data. Provide 3D location and accuracy data)
（ターミナルより、”1”入力）
NMEA $GPGGAメッセージに相当します。基本的3D位置情報を出力します。
UTC：協定世界時刻（日本時刻=UTC+9時間）
Latitude：緯度
Longitude：経度
Altitude：高度
![teraterm_command1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/cc4452c1-1b4a-55f5-a92e-2f84b73ae374.jpeg)

###＞11-getgprmc : $GPRMC (essential gps pvt (position, velocity, time) data. Recommended Minimum)
（ターミナルより、”11”入力）
NMEA $GPRMCメッセージに相当します。基本的な位置情報（座標、時刻、速度）を出力します。「緯度経度座標のみ知りたい」という場合このメッセージが有効です。日付情報も取得できます。
![teraterm_command11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/ed0ad0e5-d175-83bf-da42-f161dc2edd96.jpeg)

###＞12-getgsamsg : $GPGSA (GPS DOP and active satellites)
（ターミナルより、”12”入力）
NMEA $GPGSAメッセージに相当します。アクティブな衛星の情報を出力します。精度低下率情報（DOP）も含まれます。
![teraterm_command12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/360475/70128912-d3b9-82e9-c867-4a00e6ad1cc9.jpeg)

いかがでしたが？GUI編では、GUIツールを使って、より簡単に操作する方法を紹介しています。マップ上でトラッキングすることも可能です。
[（GUI編はこちら）](https://qiita.com/Yuji_Kawano/private/9b193c9f6ce1c4ae61e9)