GPSモジュールが届いたのだけれど、、、

2020年5月26日Arduino/ESP32ESP32,GPS,NEO-7M,u-blox,受信できない

だいぶ前に注文しておいたGPSモジュールが届きました。

これを使ってあれやこれや、、ムフフ

というわけで、取得したデータをどうするかは先送りにするとして、とりあえずはデータを取得できる様にしてみます。

えぇ、どんなものかもよく判らずポチりましたとも。

GPSモジュール u-blox NEO-7M

スイスのメーカー u-blox の NEO-7M という製品らしいです。

本物かどうかは判りませんが、、、

■u-blox NEO-7M

ざっくりとスペックをまとめると、、

うん全然わかるません

完全に勉強不足ですorz

データシートを見て勉強汁

■NEO-7 u-blox 7 GNSS modules Data Sheet

とりあえず見た目的に、ピンは、VCC,GND,TXD,RXD,PPSの5本

足が最初から付いているので手間が無くて良いですね。

TXD,RXDという事は、シリアル通信で情報が取得できる模様。

チップ自体の定格は3.6Vまでの様ですが、ボードにUSBポートも付いており、3.3V,5V,USB給電の3種類の給電が選べるみたいです。

デフォルトのボードレートは9600bpsとの事。

外部アンテナを接続する端子も付属していますが、とりあえず裏面に巨大なアンテナらしきものが接続されていそうですのでそのまま使用してみようと思います。

尚、NEO-7MはGPSモジュールの設定値が内臓Flashに記録される様で、この辺りの仕組みはよく判りません。

写真で見るとボタン電池の様なものが付いているので、これでバックアップしているのかしらん、、、

とりあえずはNMEAフォーマットかUBXフォーマットで出力されるらしいのでこれを何とかするのと、どうやら みちびき(準天頂衛星システム)も利用出来るんだとか。

なんだか凄そうな感じしますが、、、実際のところ全然わかりませぬ

とりあえず見た目的に、シリアルで繋いで何かしらシリアルで送ると何か帰って来るに違いない、と。

いうわけで繋いでみます。

GPSモジュール u-box NEO-7M をESP32に接続してみる

ESP32に搭載されている3つのUARTチャンネル(UART 0~2)の内、空いてそうな3つ目めのUART2を利用してみます。

デフォルトではGPIO 16=RX,17=TXらしいので、特に工夫もせずそのままRXをTXに、TXをRXに接続。

シリアルはクロスして繋ぐのがデフォです。(らしいです)

3.3VとGNDの接続も忘れずに。

PPSはよく判らないので、とりあえず未接続にしておきます。

さて、、問題のスケッチですが、、、

とりあえずUARTで接続して

#include <Arduino.h>

void setup()
{
	// シリアルポート開始
	Serial.begin(115200);
	// Arduino core for ESP32でデフォルトでSerial2に設定されているらしいのでそのまま開始
	Serial2.begin(9600); // NEO-7M デフォルト
}

void loop()
{
	// Serial2で拾った信号をそのままprint
	if (Serial2.available())
	{
		int gpsRead = Serial2.read();
		Serial.print(gpsRead);
	}
}

さて、何か送られて来る代物らしいので、readで取り出してプリントしてみます。

なんか化けてるのか何なのか

これがいわゆるNMEAフォーマットとかいうやつですかn

ちょっと何言ってるか判りませんので、ライブラリを使います。

■Arduiniana TinyGPS++

ここからライブラリを落としてきて、解凍してincludeディレクトリに設置、、

してみたのですが、なんかコンパイルエラーが。

見つからない系なので、何かしらライブラリのリンクが足りないのでしょう。

ちょっと一旦退避して、PlatformIOからインストールしてみます。

Librariesタブを開き、TinyGPSで検索すると、同じものが出てきましたのでポチっと。

うん、ちゃんと読み込まれた模様。

サンプルを参考にデコードしてみますたが、、、

#include <Arduino.h>

// TinyGPS++ ライブラリ
#include <TinyGPS++.h>

// The TinyGPS++ object
TinyGPSPlus gps;

void setup()
{
	// シリアルポート開始
	Serial.begin(115200);
	//	SERIAL_1.begin(9600); // NEO-7M デフォルト
	// Arduino core for ESP32でデフォルトでSerial2に設定されているらしいのでそのまま開始
	Serial2.begin(9600); // NEO-7M デフォルト
}

void loop()
{
	while (Serial2.available() > 0)
	{
		char c = Serial2.read();
		// Serial.print(c);
		gps.encode(c);
		if (gps.location.isUpdated())
		{
			Serial.print("LAT=");
			Serial.println(gps.location.lat(), 6);
			Serial.print("LONG=");
			Serial.println(gps.location.lng(), 6);
			Serial.print("ALT=");
			Serial.println(gps.altitude.meters());
		}
	}
}

なんにも出力されないンゴ・・・

アルェ

  アルェ・・・

前のソースのシリアル出力をよく見たら、なんか99,99,99,みたいな感じでGPSが受信出来てないっぽいですぬ

ちゃんとした座標情報ではないからライブラリも isUpdated と見做さないという事でしょうか

部屋の中だからGPSを受信できないのかと思い、ベランダで試してみてもダメ

u-bloxのユーティリティ u-centerを試してみるも、モジュールとの通信は出来るけれど衛星は全く補足せず

なんだろうアンテナの接触が悪いのかしら、、、

アンテナを引っぺがして確認しようにも、どうやって張り付いているのか謎

コールドスタート時は、測位までにやたら時間がかかるという投稿を見つけたので、小一時間ほどベランダに干してみるも効果なし。

通信が出来る様になるとモジュール上のチップLEDが点滅し始めるらしいのですが、、、

全く点滅する気配もなく点きっぱなし。

色々情報収集してみましたが、特にコレといったものは見つからず

うぅん、、、

とりあえず

だいぶ調べても判らないので、もうちょっと干してみます