想让小车知道自己走到哪、给野外设备加个位置上报,GPS是标准答案。u-blox的NEO-6M是最常见的入门级GPS模块:接收卫星信号、输出经纬度和时间,精度约2.5米。这篇文章把接线和解析数据讲清楚。
先认清四个引脚:VCC、RX、TX、GND
NEO-6M模块引出四个引脚:VCC接电源、GND接地、TxD是模块向外发数据的串口输出、RxD是模块接收指令的串口输入。模块板载稳压器,所以VCC可以直接接到Arduino的5V上,芯片内部自己转成3.3V工作。
要特别说明的是:基础定位只需要一根TX数据线就够了。GPS模块不停地通过TxD往外吐NMEA格式的定位语句,Arduino只要听就行了;RxD这根是给“要重新配置模块”时才用的,平时可以不接,这样接线也更简单。

接线核心:UART交叉,用软串口
GPS模块是用串口(UART)通信的,接线时记住交叉原则:模块的TX接Arduino的RX,模块的RX接Arduino的TX。如果TX接TX、两个发送端口对着喊,是不会有数据的,这是最隐蔽的一个坑。
因为Arduino Uno只有一个硬件串口还要留给USB调试,通常用Softwarariant库在数字脚上再虚拟一个串口:把NEO-6M的TX接到Arduino的D4(软串口RX)、RX可以接到D3(软串口TX,可选项)。波特率设9600,这是模块默认值。接好天线(陶瓷贴片天线)后就能通电了。
具体接线表:VCC→5V、GND→GND、TX→D4、RX→D3(可选)。

解析数据:TinyGPSPlus库一行行读
模块吐出来的是$GPRMC、$GPGGA这类NMEA语句,一堆逗号分隔的字段,人眼很难直接看。业界标准做法是用TinyGPSPlus库(作者Mikal Hart,Arduino库管理器就能装),它把这些语句解析成可读的纬度、经度、海拔、速度、时间、卫星数。程序里建一个TinyGPSPlus对象,把软串口收到的每个字符喂给它(gps.encode()),再定期读取gps.location.lat()、gps.location.lng()就行。
拿到坐标就能定位了。更进一步,还能把经纬度通过WiFi/4G模块转发到服务器,做一个能看位置的小车或野外数据采集装置。
定不了位?多半不是坏了,是环境
新手最容易慌的是“模块上电了、红绿指示灯也亮了,但就是没有坐标”。这里要讲清楚:GPS必须在能看见天空的户外才能定位,室内、窗边、楼缝里都定不了位,这是物理限制不是故障。冷启动首次定位通常要1到5分钟,耐心等,别急着断言坏了。
排查顺序:确认TX/RX有没有交叉接反;确认波特率是不是9600;确认天线接牢、朝向天空;然后把它拿到窗边或室外空旷处等几分钟。还不行就打开串口监视器看原始NMEA,只要能看到一串串字母开头的数据就在工作,只是还没锁星。
NEO-6M是给机器人加“位置感知”最简单低门槛的一块件。四根线、一交叉理解、一个TinyGPSPlus,就能让Arduino读出自己在哪里,做定位小车、轨迹记录都很好用。







再配合4G模块做位置上报,野外采集的小车很需要
TinyGPSPlus解析NMEA确实省事,省得自己抠字符串
软串口放4脚跟硬串口错开,烧程序看调试都不打架
TX接RX交叉这个原则,以后接所有串口设备都通用
室内定不了位真不是坏了,拿到窗边等几分钟就有了