【问题标题】:Why isn't my Arduino code printing latitude and longitude to the serial monitor?为什么我的 Arduino 代码没有将纬度和经度打印到串行监视器上?
【发布时间】:2018-04-10 22:36:13
【问题描述】:

我正在使用带有 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) -> D2(MCU) 和 RX(GPS) -> D1(MCU)?是否建议使用其他引脚?

假设我的引脚连接正确 - 而且我知道 GPS 模块本身工作正常 - 为什么我的串行监视器不打印纬度和经度?

我已经阅读了很多教程、各种库、YouTube 视频等,但似乎没有任何东西可以将 NodeMCU 直接连接到 GPS 模块并在串行监视器上打印以及任何地方的可读代码。

提前致谢!

【问题讨论】:

    标签: arduino gps


    【解决方案1】:

    有几个问题:

    • 不要使用延迟。在这 500 毫秒内,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(每秒一次)。这向您展示了与字符速率相比处理器的

    如果你想尝试一下,NeoGPS 可以从 Arduino Library Manager 中获得,在菜单 Sketch-> Include Library-> Manage Libraries 下,或者从上面的链接。此外,NeoGPS 比所有其他库更小、更快、更可靠、更准确。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-29
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      相关资源
      最近更新 更多