ESP32 與 GY-NEO6MV2 接腳設定
1. 電源接線:
【ESP32】3.3V →【NEO-6M】VCC
【ESP32】GND →【NEO-6MD】GND
2. 信號接線:對應 ESP32 的 UART2 序列接腳
【ESP32】16→【NEO-6M】RX
【ESP32】17→【NEO-6M】TX
為了解析GPS模組的MNEA訊息,本實作使用 Mikal Hart 所開發的 TinyGPS PLUS :
#include <TinyGPS++.h> //引入GPS程式庫
#define GPS_BAUD 9600 // GPS的序列通訊速率
#include <U8g2lib.h> //引入OLED程式庫
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);
TinyGPSPlus gps; // 宣告gps物件
void parseGPS()
{
if (gps.location.isValid())
{
float lat = gps.location.lat(); // 緯度
float lng = gps.location.lng(); // 經度
Serial.printf("座標:%.6f, %.6f\n", lat, lng);
}
else
{
Serial.printf("座標資料錯誤\n");
}
if (gps.date.isValid() && gps.time.isValid())
{
uint16_t y = gps.date.year(); // 年
uint8_t m = gps.date.month(); // 月
uint8_t d = gps.date.day(); // 日
uint8_t hr = gps.time.hour(); // 時
uint8_t mn = gps.time.minute(); // 分
uint8_t sec = gps.time.second(); // 秒
float lat = gps.location.lat(); // 緯度
float lng = gps.location.lng(); // 經度
u8g2.firstPage();
do {
u8g2.setCursor(5, 20);
u8g2.printf("%d/%d/%d", y, m, d); //列印日期
u8g2.setCursor(5, 40);
u8g2.printf("%d:%d:%d", hr, mn, sec); //列印時間
u8g2.setCursor(5, 60);
u8g2.printf("%.2f,%.2f", lat, lng); //列印座標
} while ( u8g2.nextPage() );
}
else
{
Serial.println("時間資料錯誤");
}
}
void setup()
{
Serial.begin(9600);
Serial2.begin(GPS_BAUD);
u8g2.begin(); //初始顯示器物件
u8g2.setFont(u8g2_font_t0_18b_te); //指定字型
}
void loop()
{
while (Serial2.available() > 0) //是否有資料傳入
{
if (gps.encode(Serial2.read())) //讀取GPS資訊
{
parseGPS();
}
}
}
將實驗模組移到戶外或可接收到衛星訊號的場所進行GPS信號接收測試。
