カテゴリ: C# 更新日: 2026/08/10

C#でGPSモジュールから位置情報を取得する方法!初心者向けIoTプログラミング入門

C#でGPSモジュールを使って位置情報を取得する方法
C#でGPSモジュールを使って位置情報を取得する方法

先生と生徒の会話形式で理解しよう

生徒

「C#を使って、GPSモジュールから自分のいる場所の情報を取得してみたいのですが、どうすればいいですか?」

先生

「素晴らしい挑戦ですね!C#はWindowsだけでなく、IoTなどのハードウェア制御にも広く使われています。まずはGPSがどうやって場所を教えてくれるのか、基本から見ていきましょう。」

生徒

「具体的に、プログラムでどうやってデータを取り出すんですか?」

先生

「GPSモジュールはシリアル通信という方法で文字データを送ってきます。これを読み取るコードから一緒に学んでいきましょう!」

1. GPSモジュールとシリアル通信の基礎

1. GPSモジュールとシリアル通信の基礎
1. GPSモジュールとシリアル通信の基礎

GPSモジュールとは、人工衛星からの電波を受け取り、緯度や経度といった位置情報を計算して出力してくれる電子部品のことです。このモジュールをパソコンやマイコンとつなぐために使われるのがシリアル通信です。

シリアル通信とは、データを一本の線を通して順番に送り出す、いわば一文字ずつ手紙を送るような仕組みです。C#では、この通信を扱うための便利な機能が用意されています。まずは、パソコンに接続された機器(ポート)を開く準備が必要です。

プログラミング未経験の方にとって、ポートとはパソコンにある「窓口」のようなものだと考えてください。プログラムはこの窓口を通じて、GPSモジュールと会話をします。

2. SerialPortクラスを使って通信を準備する

2. SerialPortクラスを使って通信を準備する
2. SerialPortクラスを使って通信を準備する

C#でシリアル通信を行うには、System.IO.Ports名前空間にあるSerialPortというクラスを使います。クラスとは、関連する機能やデータをひとまとめにした「道具箱」のようなものです。

まずは、どのポートにGPSモジュールが接続されているかを確認し、通信速度を指定して接続を確立します。以下は、通信を開始するための最も基本的なコードです。


using System.IO.Ports;

// シリアルポートの作成(COM3はモジュールに合わせて変更してください)
SerialPort gpsPort = new SerialPort("COM3", 9600);

// 通信を開始する
gpsPort.Open();
Console.WriteLine("GPSとの通信を開始しました。");

ここで出てきた9600という数字は、通信の速さ(ボーレート)を表しています。相手(GPSモジュール)とこちらの数字が一致していないと、正しく会話ができないので注意が必要です。これは、二人が同じ言語で話すような約束事です。

3. GPSからの生データを受信する

3. GPSからの生データを受信する
3. GPSからの生データを受信する

GPSモジュールがつながると、絶えず文字の羅列が送られてきます。これを受信といいます。GPSモジュールが送ってくるデータは「NMEAフォーマット」という国際的な標準形式に従っています。

例えば、$GPRMCといった文字列の後に、時間や位置情報がコンマで区切られて並んでいます。これをプログラムで一行ずつ読み取ってみましょう。


// 行単位でデータを読み取る
string data = gpsPort.ReadLine();

// 受信したデータを画面に表示
Console.WriteLine("受信データ: " + data);

ReadLineは「改行コード(一行の終わり)」が来るまで一気に文字を読み込む命令です。最初は複雑な文字列に驚くかもしれませんが、まずはこのデータを受け取ることが、IoT開発の第一歩となります。

4. 読み取ったデータから必要な情報だけを取り出す

4. 読み取ったデータから必要な情報だけを取り出す
4. 読み取ったデータから必要な情報だけを取り出す

受信したデータには、今の時刻や速度、緯度など多くの情報が含まれています。プログラムで活用するためには、必要な情報だけを切り出すパース(解析)という作業が必要です。

例えば、文字列をコンマで分割すれば、それぞれの項目を別々のデータとして扱うことができます。以下の例では、文字列を分割する方法を紹介します。


// カンマで文字列を分割する
string[] items = data.Split(',');

// アイテムの2番目に緯度データがあると仮定して表示
if (items.Length > 2)
{
    Console.WriteLine("緯度データ: " + items[2]);
}

ここで使ったSplitメソッドは、指定した記号(今回はコンマ)で文字列を切り分けて、リストにしてくれる便利な機能です。データ処理の基本なので、ぜひ覚えておきましょう。

5. ハードウェア制御における注意点とトラブルシューティング

5. ハードウェア制御における注意点とトラブルシューティング
5. ハードウェア制御における注意点とトラブルシューティング

GPSを使ったIoT開発では、物理的なトラブルがつきものです。パソコンを触ったことがない方でも分かるよう、よくある失敗例を挙げます。

  • ポート番号の確認: パソコンの「デバイスマネージャー」を確認し、モジュールがどのポートを使っているか見ましょう。
  • 接続の安定性: ケーブルが抜けていたり、接触不良を起こしているとデータが読めません。
  • GPSの測位: GPSモジュールは、空が見える場所に置かないと衛星を捕捉できません。室内だとデータが空っぽのままのことがあります。

特に「衛星を捕捉できない」という問題は非常に多いです。窓際に移動させるだけで解決することが多いため、プログラムだけでなく物理環境も意識することがIoTエンジニアの第一歩です。

6. 安定してデータを読み続けるループ処理

6. 安定してデータを読み続けるループ処理
6. 安定してデータを読み続けるループ処理

最後に、一度読み取るだけでなく、プログラムが動いている間ずっとGPSの情報を取得し続ける方法を紹介します。これにはwhile文を使います。


while (true)
{
    if (gpsPort.BytesToRead > 0)
    {
        string rawData = gpsPort.ReadLine();
        // ここに解析処理を記述します
        Console.WriteLine(rawData);
    }
}

while(true)は、「終わりのない繰り返し」を作る命令です。IoTの仕組みにおいて、センサーのデータを常に監視し続けることは非常に重要です。このように、C#を使えば、ハードウェアから届く生データを読み込み、変換し、活用する一連の流れを自分で作ることができるのです。

カテゴリの一覧へ
新着記事
New1
C#
C#とは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
New2
C#
C#のメソッドを引数に渡す方法!高階関数の基本を学ぼう
New3
Azure
Azure Front Door Analytics活用|リアルタイム監視とレポートで通信を分析
New4
COBOL
COBOLで数値比較とALPHABETIC・NUMERIC条件をやさしく解説!初心者でも安心ガイド
人気記事
No.1
Java&Spring記事人気No1
C#
C#のWPFとは?XAMLでGUI開発を基礎から完全解説!初心者向けの入門ガイド
No.2
Java&Spring記事人気No2
COBOL
COBOL教育における教材とリソース完全ガイド!初心者でもわかるプログラミング学習の選び方
No.3
Java&Spring記事人気No3
Azure
Azure SQL Database購入モデル比較!vCoreとDTUの違いと選び方を初心者向けに解説
No.4
Java&Spring記事人気No4
C#
C#のLINQでWhere句を使いこなす!初心者でもわかるデータ抽出とフィルタリング
No.5
Java&Spring記事人気No5
COBOL
COBOLのCOPY句の使い方を完全ガイド!初心者でもわかる共通部品の再利用方法
No.6
Java&Spring記事人気No6
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.7
Java&Spring記事人気No7
C#
C#のLINQでFirstとFirstOrDefaultの違いと使い方を完全解説!初心者向けガイド
No.8
Java&Spring記事人気No8
C#
C#のforeachループを完全ガイド!初心者でもわかるコレクション操作の基本