gps - 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 串行端口,但那里什么也没有出现。
所以我在考虑可能的原因:
- 我映射了错误的端口
- 波特率错误(不太可能,因为 ESP32 至少会收到一些垃圾字节)
- ESP32 中的 UART1 死了
- Neo6M 中的 UART 已死
- Neo6M 以某种方式重新配置为不向 UART 发送任何数据
我如何验证发生了什么?是否有可能以某种方式“恢复出厂设置”Neo 6M 芯片?不幸的是,官方的 TTGO 文档几乎没有。
解决方案
我设法使用 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 软件回答如何解决
推荐阅读
- java - 如何将两个数组交错成一个新数组
- azure - 使用 PowerShell 在 Azure 中恢复托管 SQL 实例
- c# - 如何解析或拆分连接的 json 文件
- c++ - 当其他元素出现两次时,找到在数组中出现一次的元素
- ruby-on-rails - Rails 6 - 登录后重定向到 service-worker.js
- python - 从原始电子邮件中读取正文
- python - tensorflow 数据集 from_generator() 超出范围错误
- r - 在 R 中创建矩阵的更快方法
- c# - 通过 JsonProperty 获取类属性的值
- java - 我无法使用 JSON 在我的应用程序中显示可绘制的图像