我正在使用带有NEO6MV2 GPS模块的NodeMCU。
代码:
#include <SoftwareSerial.h>
#include <TinyGPS.h>
long lati,lon; // create variable for latitude and longitude object
static const int RXPin = 5; // (RX GPS -> D1 MCU)
static const int TXPin = 4; // (TX GPS -> D2 MCU)
SoftwareSerial gpsSerial (RXPin, TXPin);
TinyGPS gps; // create gps object
void setup() {
Serial.begin(9600); // connect serial
gpsSerial.begin(4800); // connect gps sensor
}
int i=0;
void loop() {
Serial.println("\nTest");
Serial.println(i);
delay(500);
while(gpsSerial.available()) {
// check for gps data
if(gps.encode(gpsSerial.read())) {
// encode gps data
gps.get_position(&lati, &lon); // get latitude and longitude
// display position
Serial.print("Position: ");
Serial.print("lat: ");Serial.print(lati);Serial.print(" "); // print latitude
Serial.print("lon: ");Serial.println(lon); // print longitude
}
}
i++;
}
对于那些了解这一点的人,我的GPS模块是否正确连接到我的NodeMCU(TX,RX引脚),即TX(GPS) - &gt; D2(MCU)和RX(GPS) - &gt; D1(MCU)?是否建议使用其他引脚?
假设我的引脚连接正确 - 我知道GPS模块本身工作正常 - 为什么我的串口显示器不打印纬度和经度?
我经历过如此多的教程,图书馆的变体,YouTube视频等。但似乎没有任何东西可以直接将NodeMCU连接到GPS模块,并在串行监视器和任何地方可读代码上打印。
提前致谢!
答案 0 :(得分:0)
有几个问题:
请勿使用延迟。在500ms期间,GPS设备可以发送500个字符。但输入缓冲区只有64个空间,因此大多数字符都会丢失。
大多数GPS设备都以9600运行。
你打印得太多了。这也会导致GPS字符丢失,因为草图必须等待打印完成。在NeoGPS Troubleshooting page上描述了这个以及其他一些问题。
这是草图的NeoGPS版本。
#include <SoftwareSerial.h>
#include <NMEAGPS.h>
static const int RXPin = 5; // (RX GPS -> D1 MCU)
static const int TXPin = 4; // (TX GPS -> D2 MCU)
SoftwareSerial gpsSerial (RXPin, TXPin);
NMEAGPS gps; // create gps object
void setup() {
Serial.begin(9600); // connect serial
gpsSerial.begin(9600); // default for most is 9600
Serial.println("\nTest");
}
uint32_t loopCount = 0;
void loop() {
if (gps.available( gpsSerial )) {
// get the structure that contains all the parsed values
gps_fix fix = gps.read();
Serial.println( loopCount );
// display position
Serial.print("Position: ");
if (fix.valid.location) {
Serial.print("lat: "); Serial.print( fix.latitude(), 6 ); Serial.print(" ");
Serial.print("lon: "); Serial.println( fix.longitude(), 6 );
} else {
Serial.println( '?' );
}
}
loopCount++;
}
仅在新GPS定位完成时打印loopCount
(每秒一次)。这将向您展示处理器与字符比率相比如何快速。
如果您想尝试一下,可以从Arduino Library Manager的菜单 Sketch-&gt;下找到NeoGPS。包括图书馆 - &gt;管理图书馆,或从上面的链接。此外,NeoGPS比所有其他库更小,更快,更可靠,更准确。