Serial port ESP32系列2无响应(近地天体6M GPS)

Serial port ESP32系列2无响应(近地天体6M GPS),serial-port,gps,arduino-ide,esp32,Serial Port,Gps,Arduino Ide,Esp32,我正在做一个自动驾驶汽车项目,我有一个NEO 6M GPS模块,我使用一个ESp32作为板,该模块与Arduino和Nodemcu配合良好。但ESP32不支持,原因是它不支持串行软件,所以我从 我添加了硬件串行,但仍然没有输出,我提供了下面的代码 #include<HardwareSerial.h>//No extra libray installed #define RXD2 16 #define TXD2 17 HardwareSerial gps_serial(2); vo

我正在做一个自动驾驶汽车项目,我有一个NEO 6M GPS模块,我使用一个ESp32作为板,该模块与Arduino和Nodemcu配合良好。但ESP32不支持,原因是它不支持串行软件,所以我从

我添加了硬件串行,但仍然没有输出,我提供了下面的代码

#include<HardwareSerial.h>//No extra libray installed
#define RXD2 16
#define TXD2 17

HardwareSerial gps_serial(2);

void setup() {
  Serial.begin(115200);
  Serial.printf("LETS START");
 gps_serial.begin(115200, SERIAL_8N1, RXD2, TXD2);
}

void loop() {
  while (gps_serial.available()) {
   Serial.print(char(gps_serial.read()));  // read from gps, write to serial debug port
  Serial.print("I am here");
  }
}
当我运行串行监视器时,我确实会在其上获取IP地址,但当我访问该地址时,字段为空。 因此,据我所知,与GPS模块的串行通信不起作用。我在网上尝试了许多其他的解决方案,但毫无用处


我使用的是ESP32 DevKit V1,30针版本

不知道您确切使用的是哪个ESP32模块,有两个显示停止按钮

NEO-6M GPS模块需要5V,ESP32引脚提供最大3.6V-正常3.3V
一些ESP32模块阻止某些引脚,以便将其用于SD卡、摄像头、lcd或其他板载功能。因此,请查阅esp32板变体的数据表。

如果HWSerial2存在,代码应该正常 如果使用低于1.03的ESP32版本,则必须定义HWSerial,
ESP32 1.04以上版本,不再需要此版本

#define RXD2 16
#define TXD2 17
...
HardwareSerial Serial2(2);

...
Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);
并向GSM模块提供5伏电源

编辑2:感谢hcheung提出最基本的问题
解决方案是OP具有RX到RX和TX到TX,而不是GPS上的RX ESP引脚到RX,反之亦然。
所以问题解决了

我使用的是ESP32 DevKit V1(30针版本),GPS模块在与Nodemcu配合使用时工作正常,这也提供了3.3v输出权利?我还有一些硬件与Nodemcu V1.0,1.1配合使用,但由于3.3v,因此无法与ESP32配合使用。“问题”是,如果不在规范中,它可能会工作,或者它可能不工作。因此,我猜3.3V的方向是正确的,如果最大A足够,或者用于测试usb供电的TTL模块(仅5V和GND)或切断的usb电缆(仅5V和GND)和电源组,则可以使用升压模块(2Eur)。2个提示-循环第1行更改为while(Serial2.available()){并且去掉ESP上的字符串类。这将导致堆碎片和不规则崩溃,重置我将检查5v,我有一个5v来自电机驱动器,我将使用它并很快回复,我不理解ESP上的字符串类???关于字符串类:您转换例如lng_str=String(经度,6);而不是使用已定义的字符数组。使用strcpy和strcat来聚合字符数组部分,而不是使用+=来附加字符串-这将防止由于内存碎片(堆)而导致的崩溃,特别是当您使用默认定义的修复字符数组来操作数据时。}我会尝试一下,我使用Arduino Uno的5V而不是esp32的3.3v,但幸运的是,你的基本草图应该不起作用,只要确保你正确连接到GPS,即esp32引脚16连接到GPS的TX,esp32引脚17连接到GPS的Rx。我做了一些事情,我在每个循环的开头放了一个串行打印(“标志”)(每个标志都有一个数字),我发现程序进入了void循环,但仅此而已,所以我将管脚从16和17更改为2和4,现在它进入while(Serial2.available()>0),但没什么,我能从中干涉什么?@hcheung它起作用了!!!!你是对的,管脚被颠倒了,我直到现在才仔细阅读你的评论,当我读到管脚需要反向连接时,我参考了一些书。现在我得到了坐标。我不得不使用9600作为波特率。非常感谢much@hcheungCA你可以单独发布你的答案,这样我就可以投票并将其标记为解决方案吗?
#define RXD2 16
#define TXD2 17
...
HardwareSerial Serial2(2);

...
Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2);