首页 > 解决方案 > TTGO T-Beam V1.0 GPS 不发送数据:编程错误或硬件故障?

问题描述

我有 TTGO T-Beam V1.0。首先,我尝试了 Meshtastic,一切似乎都运行良好,包括 GPS。

后来我刷了 MySondy GO 固件(观察天气探测器数据),它根本不使用 GPS。

现在我再次更改固件,这次是 LoRa APRS 跟踪器(https://github.com/oe3cjb/TTGO-T-Beam-LoRa-APRS)。虽然程序报告“GPS OK!” 当它开始时(我还没有检查它是如何发现的),GPS 永远不会给出修复。

该问题与不为 GPS 供电的已知问题无关,因为程序正确初始化了 AXP192 PMU,并且我用电压表检查了 Neo6M 模块的 Vcc 引脚上的电压为 3.3 伏。此外,当天线暴露一段时间后,Neo 附近的红色 LED 将开始以 1 秒的间隔闪烁,因此 Neo 芯片似乎正在工作(但即使在这种情况下,程序也会报告“零卫星”,可能是因为它没有接收到GPS 数据)。

我在程序的 GPS 读取功能中添加了一个 2 线“探针”,希望我能看到从 GPS 复制到 USB 串行端口的原始数据。

以下是TTGO_T-Beam_LoRa_APRS.ino草图中的相关部分,我在其中添加了一个“探针”以查看来自 GPS 的内容:

// Pins for GPS
#ifdef T_BEAM_V1_0
   static const int RXPin = 12, TXPin = 34;  //  34: Neo6M TxD, 12: Neo6M RxD
#else
   static const int RXPin = 15, TXPin = 12;  
#endif

...

HardwareSerial ss(1);        // TTGO has HW serial
TinyGPSPlus gps;             // The TinyGPS++ object

...

static const uint32_t GPSBaud = 9600; //GPS

...

void setup()
{

...

  Serial.begin(115200);

  ...

    ss.begin(GPSBaud, SERIAL_8N1, TXPin, RXPin);        //Startup HW serial for GPS

  ...
}

static void smartDelay(unsigned long ms)
{
  unsigned long start = millis();
  char c ;
  do
  {
    if (tracker_mode != WX_FIXED) {
      while (ss.available()) {
        c = ss.read();
        gps.encode(c);
        Serial.write(c); // here --> nothing ever seen in serial monitor
      }
    }
  } while (millis() - start < ms);
}

但是,似乎从来没有任何数据来自连接到 GPS 模块的串行端口(引脚 34 和 12)。至少草图应该将任何传入的字符复制到 USB 串行端口,但那里什么也没有出现。

所以我在考虑可能的原因:

我如何验证发生了什么?是否有可能以某种方式“恢复出厂设置”Neo 6M 芯片?不幸的是,官方的 TTGO 文档几乎没有。

标签: gpsesp32

解决方案


我设法使用 u-blox 工作室和一些狡猾的焊接来重置我的 GPS。现在它又恢复了生机。

我已经把这个 Arduino 脚本放在一起,它应该给出相同的结果(未经测试)。

#include "Wire.h"

#define SERIAL1_RX 34
#define SERIAL1_TX 12

void setup(){
  Serial.begin(115200);
  Serial.println("GPS RESET");
  delay(2000);
  Serial1.begin(9600, SERIAL_8N1, SERIAL1_RX, SERIAL1_TX);
  byte reset_message[]={0xB5, 0x62, 0x06, 0x09, 0x0D, 0x00, 0xFF, 0xFF, 
                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 
                        0x00, 0x00, 0x04, 0x1C, 0x9B
                        };
  Serial1.write(reset_message, sizeof(reset_message));
}

void loop() {
  if (Serial1.available()) {
    Serial.write(Serial1.read());
    Serial1.println();
  }
} 

如果有任何问题,请发表评论,我可以使用 u-blox 软件回答如何解决


推荐阅读