4. 串口助手与模块通信:让模块开口说话
模块焊好了,线也接上了。接下来要做什么?
你得让它开口说话。说白了,就是通过串口调试助手,跟模块建立最基本的通信链路。这一步要是走不通,后面所有配置都白搭。我见过太多新手卡在这一关,折腾半天发现是波特率设错了,或者串口号选成了蓝牙虚拟端口。
4.1 选对工具:SSCOM vs Putty
市面上的串口工具很多,我个人最常用的是 SSCOM 和 Putty。它们各有侧重,我列个表给你看:
| 特性 | SSCOM | Putty |
|---|---|---|
| 主要用途 | 纯串口调试,AT指令交互 | SSH/Telnet/串口通用终端 |
| AT指令发送 | 支持手动发送 + 自动换行 | 需手动按回车,无自动换行 |
| NMEA数据查看 | 支持ASCII/HEX双模式 | 仅ASCII,长行会折行 |
| 日志保存 | 支持实时保存到文件 | 需开启日志功能 |
| 多实例 | 可开多个窗口 | 每个会话独立 |
4.2 连接前的最后检查
别急着点「打开串口」。先花30秒确认三件事:
- 串口号对不对——去设备管理器里看,别凭记忆选COM3结果插的是COM5。
- 波特率匹配——模块默认波特率通常是9600或115200。我遇到过一块模块默认是38400,查了半天手册才发现。
- 供电是否稳定——USB转串口模块的3.3V输出电流有限,如果模块功耗大,建议外接稳压电源。
4.3 发送第一条AT指令
打开SSCOM,选对串口和波特率,点击「打开串口」。然后输入:
AT
点击发送。如果模块正常,你应该看到:
OK
就两个字符。但就是这两个字符,能说明很多问题:
- 串口通信物理层正常
- 模块主控芯片在运行
- 波特率匹配无误
如果没反应?别慌。先检查接线——TX接RX,RX接TX,这个交叉连接很多人会搞反。我刚开始做项目时就犯过这个错,对着屏幕看了十分钟,心想模块怎么没动静,结果发现线接成了直连。
4.4 读取NMEA原始数据
AT指令测试通过后,下一步就是看定位数据。大部分定位模块上电后会自动输出NMEA语句。你只需要打开串口,就能看到类似这样的数据流:
$GPGGA,092750.000,5321.6802,N,00630.3372,W,1,08,1.0,9.8,M,55.2,M,,*47
$GPGSA,A,3,10,07,05,02,29,04,24,13,01,17,19,15,1.0,0.8,0.6*0A
$GPGSV,3,1,12,10,63,137,17,07,61,098,15,05,59,290,20,08,54,157,30*70
$GPRMC,092750.000,A,5321.6802,N,00630.3372,W,0.02,31.66,280807,,,A*43
这些就是NMEA 0183协议的标准语句。每行以 $ 开头,以 * 加两位校验和结尾。我挑几个最常用的说说:
| 语句 | 含义 | 关键字段 |
|---|---|---|
| $GPGGA | 全球定位系统固定数据 | 时间、纬度、经度、定位质量、卫星数、海拔 |
| $GPRMC | 推荐最小定位信息 | 时间、状态、纬度、经度、速度、航向、日期 |
| $GPGSV | 可见卫星信息 | 卫星编号、仰角、方位角、信噪比 |
| $GPGSA | 精度因子与活跃卫星 | 定位模式、卫星编号、PDOP/HDOP/VDOP |
怎么看懂GGA语句? 举个例子:
$GPGGA,092750.000,5321.6802,N,00630.3372,W,1,08,1.0,9.8,M,55.2,M,,*47
- 092750.000 — UTC时间 09:27:50.000
- 5321.6802,N — 北纬53度21.6802分
- 00630.3372,W — 西经6度30.3372分
- 1 — 定位质量,1表示GPS定位,2表示差分定位
- 08 — 使用中的卫星数量
- 1.0 — 水平精度因子HDOP
- 9.8,M — 海拔高度9.8米
4.5 原始数据能告诉我们什么?
你盯着这些不断滚动的数据,可能会觉得眼花。但这里面藏着很多信息:
- 定位状态——看GGA语句第6个字段,0表示未定位,1表示单点定位,2表示差分定位。如果一直是0,说明模块没收到足够卫星信号。
- 信号质量——GSV语句里每个卫星的信噪比(SNR),数值越高信号越好。低于30的卫星基本是凑数的。
- 精度估计——GSA语句里的PDOP值,小于2表示精度很好,2-4算正常,大于6就别指望高精度了。
嗯,这里要注意:刚上电时模块需要一段时间搜星,数据里可能全是0。别急,拿到室外或者窗边等个一两分钟。我测试时经常把模块放在窗台上,天线朝南,信号会好很多。
4.6 常见问题与排查
我把这些年遇到过的串口通信问题整理了一下:
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 发送AT无响应 | 波特率不匹配 / 接线错误 | 检查设备管理器确认串口,交换TX/RX |
| 收到乱码 | 波特率不一致 / 数据位/停止位设置错误 | 统一设为 8数据位 1停止位 无校验 |
| 数据断断续续 | 供电不足 / USB转串口驱动问题 | 外接3.3V稳压电源,更新驱动 |
| 只有$GPGGA没有$GPRMC | 模块配置问题 / 固件版本差异 | 发送AT指令查询当前输出语句配置 |
| 定位状态始终为0 | 天线未接 / 室内信号太弱 | 检查天线连接,移到室外测试 |
4.7 知识体系:串口通信与数据流
下面这张图梳理了从串口助手到模块数据解析的完整链路:
这张图把整个流程分成了三层:上层是PC端工具和模块之间的物理连接,中间是数据流向,下层是你能做的三件事——看原始数据、发AT指令、配置参数。三者互不冲突,你可以一边观察NMEA数据的变化,一边调整模块的配置参数。
4.8 实操建议
最后给你几个实操建议:
- 先通AT,再看NMEA——AT指令响应快,能快速确认通信链路正常。链路通了再关注定位数据。
- 学会看校验和——NMEA语句末尾的
*47就是校验和。如果数据在传输中出错,校验和会不匹配,模块会丢弃这条语句。SSCOM可以开启校验和显示,方便排查。 - 保存原始日志——调试时把串口数据保存到文件,方便后续分析。我习惯把每次测试的原始数据都存档,出问题时回头翻翻,经常能找到线索。
- 别怕乱码——偶尔出现乱码很正常,可能是上电瞬间电平不稳。如果持续乱码,先检查波特率,再查接线。
串口通信是定位模块调试的基本功。这一步练扎实了,后面配置各种参数、解析定位数据都会顺手很多。拿起你的模块,接上线,打开SSCOM,试试看能不能收到第一条 OK 吧。