GPS受信モジュールとRTOS「μC3」を使用して位置計測

はじめに

 位置情報が計測できるIoTデバイスの開発が盛んになり、GPS等を利用したサービスモジュールも数多くリリースされるようになりました。この記事ではGPSの簡単な説明を交えながら、GPS受信モジュール・評価ボード・RTOS(リアルタイムOS)を使用して実際に位置計測を行う方法を紹介します。

概要

 この記事では秋月電子のGPS受信モジュール (AE-GYSFDMAXB)とSTマイクロエレクトロニクス の評価ボード(L496AG Discovery)を使用します。、GPSの簡単な説明をさせていただいたあと、eForce製のRTOS「µC3/Compact」を使用し実際に位置計測を行ってみます。
 GPS受信モジュールの開発をこれから行う方は、ぜひご参考にしてください。

使用するハード

 以下の物を使用します。AE-GYSFDMAXBは秋月電子の通販サイトで購入可能です。STマイクロエレクトロニクスの評価ボード(32L496GDISCOVERY)も市販されていますので、興味があればご購入して試してみてください。

製品名備考/URL
STM32 L496AG Discovery(32L496GDISCOVERY)今回使用する評価ボードです。このボードをPCと接続します。
https://www.st.com/en/evaluation-tools/32l496gdiscovery.html
AE-GYSFDMAXB今回使用するGPS受信モジュールです。STM32 L496AG Discoveryに接続して使用します。
https://akizukidenshi.com/catalog/g/gK-13849/
※ 製品ページがないので販売ページを代わりに載せています
USB typeA-microBケーブルSTM32 L496AG DiscoveryとPCを接続するためのケーブルです。STM32 L496AG Discoveryに付属していないので別途ご用意ください。
オス-メスジャンパワイヤ3本以下の画像のようなものを用意してください。販売元は問いません。

使用環境(使用するソフトウェア)

 ここで、使用したソフトウェアを記しておきます。

 ソフトウェアとして必要なものは、STM32 L496AG DiscoveryのµC3/Compactの評価用プロジェクトと、EWARM、Tera Termです。下記のリンクからダウンロードが可能なのでご参考ください。

STM32 L496AG Discovery(STM32L4) 評価用プロジェクト
https://www.eforce.co.jp/processors/#st

EWARM 評価版
https://www.iar.com/jp/products/architectures/arm/iar-embedded-workbench-for-arm/

Tera Term (動作確認ではv4.105を使用)
https://ja.osdn.net/projects/ttssh2/

GPSとは

 実際の計測を行う前に、GPSの説明をしておきます。

 GPSはGlobal Positioning Systemの略称で、米国が打ち上げた地球の位置情報を測定するためのGPS衛星を利用して、位置情報を取得するシステムです。現在、このGPS衛星は31基が打ち上げられており、地域別に4基(厳密には4基以上)のGPS衛星が使えるようになっています。ちなみに、GPSは米国によって打ち上げられた衛星のことを指し、測位衛星自体の総称はGNSSと呼ばれるためご注意ください。

 GPS衛星からは常に現在位置と現在時刻が発信されています。GPS受信モジュールがこの情報を受信した際に、情報が届くまでにかかった時間と電波の速度からGPS衛星と受信機の距離を割り出します。この計算を使用可能なGPS衛星4つに対して行い、取得した4つのGPS衛星と受信機の距離から位置情報を取得します。

 ちなみに、よく国内で話題にあがる「みちびき」は、米国のGPS衛星ではなく日本が打ち上げた、GPS衛星4基を使用するものになります(正確にはQZSSと呼ばれています)。

位置情報取得アプリケーションの作成

 ここからは、実際にGPSモジュール(AE-GYSFDMAXB)とSTM32 L496AG Discoveryを用いて実際に位置情報を取得します。方法としましては、評価用のプロジェクトを改変することで、AE-GYSFDMAXBが取得した位置情報を、STM32 L496AG Discoveryで取得できるアプリケーションを作成します。

 実際の作成手順を以下に示します。

1,  STM32 L496AG Discovery 評価用プロジェクトをインストール

 uC3CmpEva_STM32L4_EWARM.exeを起動して、評価用のプロジェクトをインストールします。インストール先の場所は任意の場所で問題ありません。

2, STM32 L496AG Discovery 評価用プロジェクト内にあるConfigurator.exeを起動

 インストールした評価用のプロジェクトがあるフォルダ(uC3Eva)内に、Configutratorというフォルダがあるので、そのフォルダ内のConfigurator.exeを起動してください。このアプリケーションで必要なソースコードを生成します。

3, STM32 L496AG Discovery用のsampleフォルダ内の、sample.3cfを開く

 次に、Configurator.exeの「ファイル」タブから開くを選択し、ボードごとの設定を保存しているファイルsample.3cfを開きます。
 sample.3cfは、「C:\uC3Eva\Sample\Compact\STM32L4」にある、「STM32L496G-DISCO」フォルダ内にあります。

※上記は評価用プロジェクトをCドライブ直下にインストールした場合です。インストールしたフォルダに読み替えてください。

4, AE-GYSFDMAXB用のUART設定を追加する

 STM32 L496AG DiscoveryとAE-GYSFDMAXBの通信のためのUART設定(シリアル通信の設定)を行います。

 AE-GYSFDMAXBは常に位置情報をUARTで送り続けているため、必要な受信用の設定のみを行います。まず、GPIOGタブのポート10の箇所を以下のように修正します。

 次に、「UART1」タブへ移動し、「使用する」チェックボックスにチェックを入れます。

5, コードを出力

 画面上の「プロジェクト」タブの「ソース生成」をクリックすることで必要なソースコードの生成が完了します。

6, AE-GYSFDMAXBから取得したデータをPCに出力するためのコード修正

 STM32 L496AG DiscoveryがAE-GYSFDMAXBから受信したデータを、STM32 L496AG Discoveryと接続したPCのターミナルソフト(TeraTerm)に出力されるようにコードを修正します。

 以下の図は、サンプルフォルダ「C:\uC3Eva\Sample\Compact\STM32L4\STM32L496G-DISCO」※にある、「sample.c」ファイルを修正したものです。赤枠の部分が追加・修正した箇所になります。

※評価用プロジェクトをCドライブ直下にインストールした場合です。

番号順に追加した意図を説明します。

① AE-GYSFDMAXBとSTM32 L496AG DiscoveryをつなぐためのUSART設定(シリアル設定)です。
② ①で定義した設定でUSARTの初期化を行います。
③ STM32 L496AG DiscoveryがAE-GYSFDMAXBからデータの受信ができるように、ID_USART→DID_USART1に変更しています。

7, AE-GYSFDMAXBとSTM32 L496AG Discoveryを接続

 AE-GYSFDMAXBとSTM32 L496AG Discoveryを接続し、PCとSTM32 L496AG Discoveryを接続します。ここでの説明は割愛いたしますが、あらかじめAE-GYSFDMAXBは付属のジャンパをはんだ付けしておいてください。 

 STM32 L496AG Discoveryには下図のような「FAN-OUT EXPANSION BOARD」という拡張用の基盤があるため、これをボードに接続し、AE-GYSFDMAXBと繋げます。

 AE-GYSFDMAXBの基盤にある通り、「5V」と「GND」と書かれたピンを、「FAN-OUT EXPANSION BOARD」の「5V」,「GND」と書かれている場所へジャンパで接続します(上記の図を参照のこと)。

 また、AE-GYSFDMAXBは電源が入ると常にデータを送信し続ける仕組みになっているので、AE-GYSFDMAXBの「RXD」は、「FAN-OUT EXPANSION BOARD」の「TX」の部分に接続します。「TXD」は「FAN-OUT EXPANSION BOARD」の「RX」の部分に接続します。

 実際に接続した際の様子が以下の画像です。こちらもご参考ください

 これで、位置情報のデータをSTM32 L496AG Discoveryに送る準備は終了です。

 次に、PCでTera Termを起動し、STM32 L496AG Discoveryと接続の設定を行います。

 STM32 L496AG Discoveryを接続した状態でTera Termを起動すると、以下のような画面が出ます。この画面で「ポート(R)」のドロップボックスを開き、「~STMicrocelectronics STLink Virtual COM Port~」をクリックしてください。

 次に、「設定」タブをクリックし、「シリアルポート」を選択します。デフォルトではシリアルポートのスピードがSTM32 L496AG Discoveryと合っていないので、以下の画像のようにスピードのドロップボックスを開き「115200」をクリックします。

10, EWARM上からデバッグ実行

 EWARMを起動します。「ファイル」タブから、「開く」→「ワークスペース」を選択し、STM32L496G-DISCO用のサンプルフォルダ(「C:\uC3Eva\Sample\Compact\STM32L4\STM32L496G-DISCO」※)内にある「sample.eww」を開きます。すると、以下の図のような緑色のスタートボタンがあるので、こちらを押すことでビルド、デバッグを実行します。

※評価用プロジェクトをCドライブ直下にインストールした場合です。

 数秒経過後に、以下の図の赤枠のボタンを押すことで実行します。

 上記の手順でデバッグ実行した場合の、Tera Termで以下のような出力データになります。

位置情報取得サンプルのデータの読み方

 今までの手順で、AE-GYSFDMAXBからデータの受信ができることを確認しました。ですが、このままでは出力されたデータが何を示すかがわからないかと思います。よって、この受信データが何を示しているのかをここで説明していきます。

 まず、Tera Termに出力データの一部を以下に示します。

$GPGSA,A,1,,,,,,,,,,,,,,,*1E
$GPGSV,3,1,11,19,78,315,,17,75,148,,06,47,311,,09,41,139,27*76
$GPGSV,3,2,11,04,40,088,,14,16,200,30,20,08,239,27,12,08,321,*77
$GPGSV,3,3,11,22,07,052,,194,,,,195,,,*48
$GPRMC,(~現在地の緯度・経度が表示されるため省略~)
$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*32
$GPZDA,010446.309,02,09,2021,,*51
$GPGGA,010447.309,,,,,0,1,,,M,,M,,*45
$GPGLL,,,,,010447.309,V,N*76

 このデータは、NMEA(https://www.nmea.org/)が制定・発行した、NMEA 0183という仕様に準じたものです。これは、海洋でよく使用する機器(流速系、測深機、風力計、ジャイロコンパス、GPS など)の情報データ伝送に用いられます。

 データ読み方としては、1行を一つのデータとして認識します。例えば「$GPGSV,3,1,11,19,78,315,,17,75,148,,06,47,311,,09,41,139,27*76」が一つのデータとなり、「GPGSV」がデータの種類を示します。「GPGSV」は視覚内のGPS衛星のデータであることを示します。これに続く数字は衛星番号、衛星仰角、衛星方位角などになります。また、この1行でGPS衛星4つ分のデータとなります。

 ただ、この衛星のデータから現在位置を計算するのは至難の技です。別のデータから現在地のデータを取得できるので、それを利用します。行の始めが「GPRMC」の一文が、現在位置のデータを含んでいるので、これを参照します。上記のデータでは、筆者の現在位置がわかってしまうので省略していますが、実際は以下のようなフォーマットになります。

 上記の通り、緯度と経度、北緯か南緯か、加えて東経か西経かの情報を読み取ることができたので、位置情報が取得できたと言えるでしょう。

 NMEA 0183について詳しく知りたい方は、NMEAの公式サイト(https://www.nmea.org/)や、測位技術振興会の公式サイト(https://jsapt.net/ja/post/19028004)をご覧ください。

まとめ

 これで、UARTから位置情報を取得できることを確認できました。ただ、IoTでGPSにより取得したデータを利用する場合、クラウド上で使用しやすいデータ構造にしておく必要もあると思います。例えば、以下のようにJSON方式などのwebアプリケーションで使用しやすい構造に整形すると、クラウドへデータを転送する際には便利です。実際にクラウドでデータを蓄積したい場合には考えてみてください。

参考文献

毎日何気なく使うGPS機能の仕組み。そして、その技術に隠された真実とは!?- データのじかん
https://data.wingarc.com/story-of-gps-13425

みちびきとは|サービス概要|みちびき(準天頂衛星システム:QZSS)公式サイト – 内閣府
https://qzss.go.jp/overview/services/sv01_what.html

GPSのNMEAフォーマット
https://www.hiramine.com/physicalcomputing/general/gps_nmeaformat.html