ESP32连接GPS模块仅按复位键有串口输出问题求助
解决ESP32连接GPS模块只在重启时输出数据的问题
问题根源
- 你代码里用的
Serial是ESP32和电脑通讯的USB串口,GPS模块不能直接用这个串口通讯,得用ESP32的硬件串口2(GPIO16/GPIO17)。 Serial.read()每次只读1个字节,而且没判断串口有没有数据就读,没数据时会返回-1,直接赋值给String就会输出"-1"。- 按住RST时硬件串口短暂复用,才凑巧读到了GPS数据。
修正步骤
正确接线:
- GPS模块TX → ESP32 GPIO16(RX2)
- GPS模块RX → ESP32 GPIO17(TX2)
- GPS模块VCC接ESP32 3.3V,GND接ESP32 GND(GPS是3.3V设备,别接5V)
修正代码:
用HardwareSerial初始化串口2专门读取GPS数据,默认Serial保留给电脑串口监视器:
// 初始化硬件串口2,RX=GPIO16,TX=GPIO17 HardwareSerial GPSserial(2); void setup() { // 电脑串口监视器波特率9600 Serial.begin(9600); // GPS模块默认波特率一般是9600,根据模块参数调整 GPSserial.begin(9600, SERIAL_8N1, 16, 17); } void loop() { // 检查GPS串口有没有数据 if (GPSserial.available() > 0) { // 读取所有可用数据并输出到电脑串口 while (GPSserial.available() > 0) { char c = GPSserial.read(); Serial.print(c); } } }
注意事项
- 打开串口监视器时,波特率要选9600,和代码里一致。
- 确认GPS模块的波特率,有些模块默认是115200,需要对应修改代码里的
GPSserial.begin()参数。 - 去掉原来的
delay(500),会导致丢GPS数据,GPS每秒会输出1-2次NMEA语句,实时读取才不会漏。
内容的提问来源于stack exchange,提问作者Luke Lloyd LukeSkywalker
相关产品推荐
相关产品推荐

