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信號接收測試。
沒有留言:
張貼留言