【道生物联TKB-623评估板试用】GPS定位时钟透传
本文介绍了道生物联TKB-623开发板结合 GPS 模块实现卫星定位数据的板间远距离传输,并基于该原理实现桌面GPS 定位时钟的项目设计。
项目介绍
- 硬件连接:包括 GPS 模块直连、单片机解析和转发两种方案;
- 模式设置:设置 TKB-623 的发送端和接收端均为透传模式;
- 透传测试:连接硬件和 TKB-623,实现原始 NMEA 数据的串口透传;
- NMEA解析:使用单片机结合 micropyGPS 库实现 GPS 原始数据解析;
- 户外测试:将 TKB-623 发送端和 GPS 模块置于开阔户外,室内接收端负责接收GPS数据。

透传模式
透传模式是相对于 AT 指令的另一种模式。
- AT 指令模式是一种通信协议,设备之间通过发送 AT 指令来进行通信和控制;
- 透传模式的设备之间可以直接通过数据通道传输数据,无需发送和接收特定格式的 AT 指令。
- 透传模式是通过串口数据接收超时或超过最大包长来判断数据的结束,并开始发送数据。AT 指令模式是通过
\\r\\n 来判断指令的结束。
进入透传模式前需把设备配置成可以通讯的工作模式及射频发射接收的参数。
| 指令 |
响应 |
|---|
| AT+WORKMODE=<工作模式>,<超时时间>,<最大包长> |
AT_OK |
说明:
- <超时时间> 超时时间单位为毫秒,取值范围为 2~1000,默认 3
- <最大包长> 取值范围为 1~2048
硬件连接
这里给出两种方案实现 GPS 定位信息透传。
方案一
| TKB-623 |
GPS module |
Note |
|---|
| UART_TXD |
RXD |
Receive |
| UART_RXD |
TXD |
Transmit |
| 3V3_M |
VCC |
Power |
| GND |
GND |
Ground |
该方案受限于 GPS 模块传输质量,且需要根据信号质量动态调整传输字节数。
方案二
采用外加单片机解析 GPS 数据,TKB-623 将解析结果透传至接收端,接线如下
| TKB-623 |
MCU |
Note |
|---|
| UART_TXD |
RXD |
Receive |
| UART_RXD |
TXD |
Transmit |
| 3V3_M |
VCC |
Power |
| GND |
GND |
Ground |
若 TKB-623 只负责接收,则连接 UART_RXD 即可。
单片机与 GPS 模块相连
| MCU |
GPS module |
Note |
|---|
| TXD |
RXD |
Receive |
| RXD |
TXD |
Transmit |
| VCC |
VCC |
Power |
| GND |
GND |
Ground |
若 MCU 只负责接收,则连接 RXD 即可。
实物图

动态效果见顶部视频。
模式设置
- 固件默认工作模式为
21 ,即异步收发模式;
- 选择
透传模式 作为 TKB-623 转发 GPS 定位信息的工作模式;
根据 AT 指令手册可知,AT+WORKMODE=81/82 可实现开启/关闭透传模式;

透传测试
根据 GPS 模块通信波特率,设置 TKB-623 的相关参数。
波特率设置
根据 GPS 模块数据通信配置,AT 指令设置串口通信波特率为 9600
» AT+BAUDRATE=9600
« AT_OK
将 GPS 模块引脚与发送端相连,接收端即可收到原始 GPS 数据

NMEA 解析
这里介绍 GPS 模块连接单片机,单片机将接收到的 NMEA 数据进行解析,通过 TKB-623 实现 GPS 数据透传。
NMEA 透传
解析数据前,首先通过单片机转发原始 NMEA 数据,确保链路畅通。
代码
运行 Thonny IDE 新建文件并添加如下代码
from machine import Pin, UART
import time
gps_uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
raw_uart1 = UART(1, baudrate=9600, tx=Pin(8), rx=Pin(9))
while True:
if gps_uart.any():
gps_raw = gps_uart.read()
if gps_raw:
raw_uart1.write(gps_raw)
print(gps_raw.decode('utf-8', 'ignore'), end='')
time.sleep(2)
保存代码。
效果
运行程序,接收 GPS 原始 NMEA 数据

NMEA 解析
使用 micropyGPS 包实现 NMEA 数据解析。
详见:inmcm/micropyGPS | GitHub .
代码
将 micropyGPS.py 上传至单片机根目录,新建文件并添加如下代码
from machine import Pin, UART
from micropyGPS import MicropyGPS
import json, time
gps_uart = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))
uart1_json = UART(1, baudrate=9600, tx=Pin(8), rx=Pin(9))
my_gps = MicropyGPS(8)
def update_gps():
""" Read data from GPS module """
while gps_uart.any():
char = gps_uart.read(1)
if char:
my_gps.update(chr(char[0]))
def send_json():
"""把 GPS 关键字段打包成一行 JSON 发到 UART1"""
if not (my_gps.date and my_gps.timestamp):
return
payload = {
"date": "{:02d}-{:02d}-{:02d}".format(my_gps.date[2], my_gps.date[1], my_gps.date[0]),
"time": "{:02d}:{:02d}:{:02d}".format(my_gps.timestamp[0], my_gps.timestamp[1], int(my_gps.timestamp[2])),
"lat" : my_gps.latitude[0] * (1 if my_gps.latitude[1] == 'N' else -1),
"lon" : my_gps.longitude[0] * (1 if my_gps.longitude[1] == 'E' else -1)
}
print("payload:", payload)
uart1_json.write(json.dumps(payload) + '\\r\\n')
while True:
update_gps()
send_json()
time.sleep(2)
效果
- 运行程序,Shell 打印发送的 JSON 格式解析数据;

- 接收端打印解析的 GPS 数据,包括时间、日期、经纬度坐标等;

户外实测
将单片机、GPS模块以及 TKB-623 发送端整体移至户外开阔地带,以便接收GPS信号;
位于室内的 TKB-623 接收端获得 GPS 数据,串口打印如下

将经纬度坐标 "lat": 31.03572, "lon": 121.4544 输入地图即可获取位置信息

动态效果见底部视频。
总结
本文介绍了道生物联TKB-623开发板结合 GPS 模块实现卫星定位数据的板间远距离传输,并基于该原理实现桌面GPS 定位时钟的项目设计,为相关产品的开发设计和快速应用提供了参考。