首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >北斗短报文使用方式

北斗短报文使用方式

原创
作者头像
武状元
发布于 2026-10-18 14:23:58
发布于 2026-10-18 14:23:58
830
举报

​

前言

之前实习的时候做过一个项目接触到了北斗短报文的开发,项目是要监测高原地区的工人们的身体情况,保证工人们如果出现高原病现象可以第一时间得到救治。这里需要使用lora网关收到工人手表发送的数据,然后使用北斗短报文发送到插了北斗卡的北斗终端。开发北斗让我学会了具体项目中接收与发送数据的全流程。

一 开发准备

开发时需要准备好硬件

  • 北斗三号短报文模块或一体机:这是核心设备,内部集成了射频、基带和主控,对外通过串口通信。常见型号包括金维集电DM229、博纳雨田T8650、容辉物联GM10等。一体机(如华力创通HBD6100)内置天线,开箱即用;模块则需要自己设计外围电路-1。
  • 北斗短报文卡:类似SIM卡,插入模块的北斗卡槽,每张卡有唯一的用户地址码,用于标识你的终端身份-1。
  • 主控设备:树莓派、RK3568工控板或任意带UART的Linux主机。如果只是开发调试,用USB转串口线连接电脑即可。
  • 天线:北斗天线需朝向南方(我国境内),且顶部无明显遮挡-5。
  • 电源:北斗模块发射瞬间电流可达1.5A~2A,必须使用能提供足够功率的电源,建议12V/1A以上-10。

这里我使用的是开发好的一体机,可以使用RS232或者RS385接口来连接我的主机,只需要给连接的串口发送命令就可以实现通信。我使用的是RS232连接,使用的主机有DB9连接扣,把线插入就可以使用了。串口参数通常为115200波特率、8位数据位、无校验、1位停止位(8N1)。

二 指令发送

北斗使用的是标准NMEA风格指令,格式为 $指令内容*校验和\r\n,通过串口直接发送。校验和是 $ 和 * 之间所有字符的异或值。

指令

功能

典型响应

CCICR / CCICA

读取北斗卡号

$BDICP / $BDICI-

CCRMO,PWI

查询信号波束

$BDPWI(含波束数和信号强度)-17

CCTCQ

发送短报文(点对点)

$BDFKI(发送回执)-

CCTBQ

发送短报文(通播)

无特定回执-

CCMSG

通信申请(扩展协议)

$BDMXX(通信信息)

其中 CCTCQ 是发送核心,格式为:

CCTCQ,接收卡号,频点,是否需回执,编码方式,内容,上报周期

例如 CCTCQ,15950041,2,1,3,A4B2E2CAD4,0。编码方式 3 为混编模式,内容需以 A4 开头并跟 GB2312 编码的 HEX 字符串。

使用python发送数据如下

代码语言:javascript
复制
import serial, time

def nmea(body):
    cs = 0
    for c in body: cs ^= ord(c)
    return f"${body}*{cs:02X}\r\n".encode()

ser = serial.Serial("/dev/ttyS0", 115200, timeout=0.4)

# 1. 读卡
ser.write(nmea("CCICR,0,00")); time.sleep(2); ser.read_all()

# 2. 查信号
ser.write(nmea("CCRMO,PWI,2,0")); time.sleep(3); ser.read_all()

# 3. 发送(内容 "你好" → A4C4E3BAC3)
content = "A4" + "你好".encode("gb2312").hex().upper()
ser.write(nmea(f"CCTCQ,15950041,2,1,3,{content},0"))
time.sleep(6)
print(ser.read_all().decode("ascii", errors="ignore"))

三 实际发送流程

北斗短报文发送的需要三个步骤:

步骤

指令

作用

返回

第一步

CCICR,0,00

读卡,确认卡在线

$BDICP

第二步

CCRMO,PWI,2,0

测试信号(波束数量+强度)

$BDPWI

第三步

CCTCQ,...

发送短报文

$BDFKI

首先是读卡,需要这张卡是可用的才可以使用,然后是检测波束状态,需要可见波束数 ≥ 3,即至少能同时看到 3 颗北斗卫星的波束,同时最强信号 ≥ 45,这样才可以使用,在测试过程中需要把北斗放到室外开阔的地方,这样信号会好一点。

接收部分是插了北斗卡的终端,北斗发送数据的时候会指定接受的卡号,输入后北斗就会给这个卡号发送信息,这个特定的卡号就可以接收到数据。

四 开发情况

北斗有自己的软件可以使用,使用软件发送数据比较轻松,就像使用串口助手一样,只需要点击就可以发送数据,读取卡号,测试信号。想要获取到发送的数据可以登录北斗的网站,输入卡号,就可以获取到发送的数据,不过这里的数据一般都是经过加密的,需要解密后才可以获取到实际的数据。

实际开发中硬件调试和软件调试部分花了比较多的时间,北斗的RS232和RS485接口不是都将而已使用的,同一时间只能用一个接口,所以如果在使用485后想要使用232,就要发送指令修改,如果没有修改成功这两个都不能用了,这边研究了很久才发现这个问题,一开始以为是软件发送数据的问题,结果连硬件都没弄好。最后寄回去让厂家帮我们直接改成了最后要使用的232接口才能使用。

软件主要是之前没有使用过lora网关和NMEA风格的指令,摸索了比较久,好在最后借助AI成功完成项目。

五 总结

北斗短报文实际使用需要有三步:读卡 → 测信号 → 发送,每一步都有它的意义。跳过读卡,卡不在线发送必失败;跳过测信号,信号差时发送成功率极低,还浪费宝贵的卫星信道资源。

北斗短报文对遮挡非常敏感,实际部署时一定要把天线放在室外开阔处。

总的来说,北斗短报文的开发门槛不算高,协议清晰,指令简洁。真正的难点在于硬件调试和信号环境。只要把这两块搞定,剩下的就是按流程写代码的事了

​

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 前言
  • 一 开发准备
  • 二 指令发送
  • 三 实际发送流程
  • 四 开发情况
  • 五 总结
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档