- 必要なコンポーネント
- GPSモジュール
- STM32F103C8からピンアウト
- 回路図と接続
- GPSモジュールインターフェース用のSTM32F103C8のプログラミング
- GPSとSTM32で緯度と経度を見つける
GPSは全地球測位システムの略で、正確なUTC時間(協定世界時)で地球上の任意の場所の緯度と経度を検出するために使用されます。このデバイスは、衛星から毎秒、時刻と日付の座標を受信します。GPSは優れた精度を提供し、位置座標以外のデータも提供します。
GPSは非常に便利なデバイスであり、携帯電話やその他のポータブルデバイスで位置を追跡するために非常に一般的に使用されていることは誰もが知っています。自宅のタクシーに電話して飛行機の高度を追跡するなど、あらゆる分野で非常に幅広い用途があります。これは、以前に構築した便利なGPS関連プロジェクトです。
- 車両追跡システム
- GPS時計
- 事故検知警報システム
- Raspberry PiGPSモジュールインターフェースチュートリアル
- GPSモジュールとPICマイクロコントローラーのインターフェース
このチュートリアルでは、GPSモジュールをSTM32F103C8マイクロコントローラーとインターフェースして、位置座標を見つけ、16x2LCDディスプレイに表示します。
必要なコンポーネント
- STM32F103C8マイクロコントローラー
- GPSモジュール
- 16x2LCDディスプレイ
- ブレッドボード
- 接続線
GPSモジュール
これはGY-NEO6MV2XM37-1612GPSモジュールです。このGPSモジュールには、+ 5V、GND、TXD、RXDの4つのピンがあります。シリアルピンを使用して通信し、STM32F103C8のシリアルポートと簡単に接続できます。
GPSモジュール はデータをNMEA形式で送信します(下のスクリーンショットを参照)。NMEA形式は複数の文で構成されており、必要な文は1つだけです。この文は$ GPGGAから始まり 、座標、時間、その他の役立つ情報が含まれています。この GPGGA は、全地球測位システム修正データと呼ばれ ます。GPSデータとその文字列の読み取りについて詳しくは、こちらをご覧ください。
以下は、$ GPGGA文字列のサンプルとその説明です。
$ GPGGA、104534.000,7791.0381、N、06727.4434、E、1,08,0.9,510.4、M、43.9、M,, * 47
$ GPGGA、HHMMSS.SSS、latitude、N、longitude、E、FQ、NOS、HDP、altitude、M、height、M,,チェックサムデータ
ただし、このチュートリアルでは、NMEAセンテンスから必要なすべての情報を抽出する TinyGPSPlus GPSライブラリを使用しており、緯度と経度を取得するための簡単なコード行を記述する必要があります。これについては、チュートリアルの後半で説明します。 。
STM32F103C8からピンアウト
STM32F103C8(BLUE PILL)USARTシリアル通信ポートを下のピン配置画像に示します。これらは青色である(PA9-TX1、PA10- RX1、PA2-TX2、PA3- RX2、PB10-TX3、PB11-RX3)。このような通信チャネルは3つあります。
回路図と接続
GPSモジュールとSTM32F103C8間の回路接続
GPSモジュール |
STM32F103C8 |
RXD |
PA9(TX1) |
TXD |
PA10(RX1) |
+ 5V |
+ 5V |
GND |
GND |
16x2LCDとSTM32F103C8間の接続
LCDピン番号 |
LCDピン名 |
STM32ピン名 |
1 |
グラウンド(Gnd) |
地面(G) |
2 |
VCC |
5V |
3 |
VEE |
ポテンショメータの中心からのピン |
4 |
レジスタ選択(RS) |
PB11 |
5 |
読み取り/書き込み(RW) |
地面(G) |
6 |
有効(EN) |
PB10 |
7 |
データビット0(DB0) |
接続なし(NC) |
8 |
データビット1(DB1) |
接続なし(NC) |
9 |
データビット2(DB2) |
接続なし(NC) |
10 |
データビット3(DB3) |
接続なし(NC) |
11 |
データビット4(DB4) |
PB0 |
12 |
データビット5(DB5) |
PB1 |
13 |
データビット6(DB6) |
PC13 |
14 |
データビット7(DB7) |
PC14 |
15 |
LEDポジティブ |
5V |
16 |
LEDネガティブ |
地面(G) |
全体のセットアップは次のようになります。
GPSモジュールインターフェース用のSTM32F103C8のプログラミング
STM32を使用してGPSモジュールを使用して位置を見つけるための完全なプログラムは、このプロジェクトの最後にあります。STM32F103C8は、USBポートを介してPCに接続するだけで、ArduinoIDEを使用してプログラムできます。コードのアップロード中は必ずTXピンとRXピンを取り外し、アップロード後に接続してください。
GPSをSTM32とインターフェースするには、まずGitHubリンクTinyGPSPlusからライブラリをダウンロードする必要があります。ライブラリをダウンロードした後、Sketch- > Include Library-> Add.zipLibraryを使用してArduinoIDEに含めることができます。同じライブラリを使用して、GPSをArduinoとインターフェイスさせることができます。
したがって、最初に必要なライブラリファイルを含め、16x2LCDのピンを定義します。
#include
次に、TinyGPSPlusクラスの gps という名前のオブジェクトを作成します。
TinyGPSPlus gps;
次に、 voidセットアップで 、 Serial1.begin(9600) を使用してGPSモジュールとのシリアル通信を開始し ます 。 Serial1は、STM32F103C8のシリアル1ポート(Pins-PA9、PA10)として使用されます。
Serial1.begin(9600);
次に、しばらくの間ウェルカムメッセージを表示します。
lcd.begin(16,2); lcd.print( "Circuit Digest"); lcd.setCursor(0,1); lcd.print( "STM32 with GPS"); delay(4000); lcd.clear();
次に ボイドループ()で 、GPSから緯度と経度を受信し 、 受信したデータが有効かどうかを確認し、シリアルモニターとLCDに情報を表示します。
利用可能な位置データが有効かどうかを確認する
loc_valid = gps.location.isValid();
緯度データを受信します
lat_val = gps.location.lat();
経度データを受信します
lng_val = gps.location.lng();
無効なデータを受信すると、シリアルモニターに「*****」と表示され、LCDに「待機中」と表示されます。
if(!loc_valid) { lcd.print( "Waiting"); Serial.print( "緯度:"); Serial.println( "*****"); Serial.print( "経度:"); Serial.println( "*****"); delay(4000); lcd.clear(); }
有効なデータを受信すると、緯度と経度がシリアルモニターとLCDディスプレイに表示されます。
lcd.clear(); Serial.println( "GPS READING:"); Serial.print( "緯度:"); Serial.println(lat_val、6); lcd.setCursor(0,0); lcd.print( "LAT:"); lcd.print(lat_val、6); Serial.print( "経度:"); Serial.println(lng_val、6); lcd.setCursor(0,1); lcd.print( "LONG:"); lcd.print(lng_val、6); delay(4000);
次の関数は、データを読み取るための遅延を提供します。シリアルポートでデータを探し続けます。
static void GPSDelay(unsigned long ms) { unsigned long start = mills(); do { while(Serial1.available()) gps.encode(Serial1.read()); } while(millis()-start <ms); }
GPSとSTM32で緯度と経度を見つける
セットアップを構築してコードをアップロードした後、信号を高速に受信できるように、GPSモジュールをオープンエリアに配置してください。信号を受信するのに数分かかる場合がありますので、しばらくお待ちください。GPSモジュールが信号の受信を開始すると、LEDが点滅し始め、位置座標がLCDディスプレイに表示されます。
Googleマップを使用して、場所の緯度と経度を確認できます。GPSをオンにしてGoogleマップに移動し、青い点をクリックするだけです。下の写真に示すように、緯度と経度で住所が表示されます
完全なコードとデモビデオは以下のとおりです。