系列文章:
【从0到1搭建LoRa物联网】1、LoRa物联网的架构
【从0到1搭建LoRa物联网】2、终端设备开发方式
【从0到1搭建LoRa物联网】3、国产LoRa终端ASR6505软硬件
【从0到1搭建LoRa物联网】4、国产LoRa终端ASR6505普通GPIO
【从0到1搭建LoRa物联网】5、国产LoRa终端ASR6505驱动DHT11
【从0到1搭建LoRa物联网】6、国产LoRa终端ASR6505 I2C接口
【从0到1搭建LoRa物联网】7、国产LoRa终端ASR6505驱动段式LCD例程
【从0到1搭建LoRa物联网】8、国产LoRa终端ASR6505 PingPong通信
【从0到1搭建LoRa物联网】9、国产LoRa终端ASR6505 PingPong通信OLED显示
【从0到1搭建LoRa物联网】10、LoRa终端ASR6505 ADC采样
【从0到1搭建LoRa物联网】11、ASR6505 LoRaWAN通信
1、GWMP(LoRa Gateway Message Protocol)协议
同一个网关能连接到不同的Network Server、不同厂家的网关可以连接到同一个Network Server,这就要求网关和Network Server之间有统一的通讯协议。这个协议是由semtech制定并维护的,网关和网络服务器之间的通讯协议简称GWMP协议,也叫包转发协议。
2、GWMP消息类型
| GWMP消息类型 | 传输方向 | 网关源端口号 | 网络服务器UDP端口号 | 网关UDP目标端口号 |
|---|---|---|---|---|
| PUSH_DATA | 发给服务器 | 任意 | 1700 | |
| PUSH_ACK | 发给网关 | 1700 | PUSH_DATA消息的ACK | |
| PULL_DATA | 发给服务器 | 任意 | 1700 | |
| PULL_ACK | 发给网关 | 1700 | PULL_DATA的ACK | |
| PULL_RESP | 发给网关 | 1700 | 服务器下发给网关,需要发送RF数据 | |
| TX_ACK | 发给服务器 | 1700 | PULL_RESP的ACK,包含RF发送任务返回状态 |
3、时序图
3.1、上行时序图
+---------+ +---------+
| Gateway | | Server |
+---------+ +---------+
| -----------------------------------\ |
|-| When 1-N RF packets are received | |
| ------------------------------------ |
| |
| PUSH_DATA (token X, GW MAC, JSON payload) |
|------------------------------------------------------------->|
| |
| PUSH_ACK (token X) |
|<-------------------------------------------------------------|
| ------------------------------\ |
| | process packets *after* ack |-|
| ------------------------------- |
| |
PUSH_DATA <–> PUSH_ACK:网关向网络服务器提交上行RF数据包。
3.2、下行时序图
+---------+ +---------+
| Gateway | | Server |
+---------+ +---------+
| -----------------------------------\ |
|-| Every N seconds (keepalive time) | |
| ------------------------------------ |
| |
| PULL_DATA (token Y, MAC@) |
|------------------------------------------------------------->|
| |
| PULL_ACK (token Y) |
|<-------------------------------------------------------------|
| |
PULL_DATA <–> PULL_ACK:GW向NS发送“心跳”。
+---------+ +---------+
| Gateway | | Server |
+---------+ +---------+
| ------------------------------------------------------\ |
| | Anytime after first PULL_DATA for each packet to TX |-|
| ------------------------------------------------------- |
| |
| PULL_RESP (token Z, JSON payload) |
|<-------------------------------------------------------------|
| |
| TX_ACK (token Z, JSON payload) |
|------------------------------------------------------------->|
PULL_RESP <–> TX_ACK:NS向GW提交下行RF数据包。
4、 数据格式
4.1、PUSH_DATA帧格式
| 字节 | 功能 |
|---|---|
| 0 | 协议版本 = 2 |
| 1-2 | 随机值 |
| 3 | PUSH_DATA 标识码 0x00 |
| 4-11 | 网关ID |
| 12-结束 | JSON对象 |
4.2、PUSH_ACK帧格式
| 字节 | 功能 |
|---|---|
| 0 | 协议版本= 2 |
| 1-2 | PUSH_DATA的随机值,用来识别ACK |
| 3 | PUSH_ACK标识码0x01 |
4.3、PULL_DATA帧格式
| 字节 | 功能 |
|---|---|
| 0 | 协议版本 = 2 |
| 1-2 | 随机值 |
| 3 | PULL_DATA 的标识码 0x02 |
| 4-11 | 网关ID |
4.4、PULL_ACK 帧格式
| 字节 | 功能 |
|---|---|
| 0 | 协议版本= 2 |
| 1-2 | PULL_DATA的随机值,用来识别ACK |
| 3 | PULL_ACK 的标识码 0x04 |
4.5、PULL_RESP 帧格式
| 字节 | 功能 |
|---|---|
| 0 | 协议版本=2 |
| 1-2 | 随机值 |
| 3 | PULL_RESP的标识码 0x03 |
| 4-结束 | JSON对象 |
4.6、TX_ACK 帧格式
| 字节 | 功能 |
|---|---|
| 0 | 协议版本= 2 |
| 1-2 | PULL_RESP 的随机值,用来识别ACK |
| 3 | TX_ACK 的标识码 0x05 |
| 4-11 | G网关ID |
| 12-end | 可选JSON 对象 |
5、JSON协议
5.1、网关向服务器提交接收到的RF数据包
{"rxpk":[
{
"time":"2013-03-31T16:21:17.528002Z", //收到LoRa帧的UTC时间
"tmst":3512348611, //收到RF信号的SX1301内部时间
"chan":0, //信道
"rfch":1 //射频前端,一般130x会有两个射频前端
"freq":470.3, //频率
"stat":1, //接收收RF数据的CRC状态。1代表正确,-1代表CRC校验不过,0代表没有CRC校验
"modu":"LORA", //射频调制方式
"datr":"SF7BW125", //速率
"codr":"4/6", //编码率
"rssi":-35, //接收灵敏度
"lsnr":5.1, //信噪比
"size":32, //数据长度
"data":"-DS4CGaDCdG+48eJNM3Vai-zDpsR71Pn9CPA9uCON84" //base64编码数据
}
]}
5.2、服务器向网关下发RF数据包
{"txpk":{
"imme":true, //是否立刻发送
"freq":500.3, //频率
"rfch":0, //射频前端
"powe":14, //发射功率
"modu":"LORA", //射频调制方式
"datr":"SF11BW125", //速率
"codr":"4/6", //编码率
"ipol":false, //I/Q信号反转
"size":32, //数据长度
"data":"H3P3N2i9qc4yt7rK7ldqoeCVJGBybzPY5h1Dd7P7p8v" //base64编码数据
}}
5.3、网关状态
{"stat":{
"time":"2014-01-12 08:59:28 GMT", //网关的UTC时间
"lati":46.24000, //纬度
"long":3.25230, //经度
"alti":145, //高度
"rxnb":2, //收到的无线数据包数
"rxok":2, //正确的无线数据包数
"rxfw":2, //转发的无线数据包数
"ackr":100.0, //网关收到PUSH_ACK的百分比
"dwnb":2, //网关收到服务器下发RF数据包数量
"txnb":2 //网关RF发出的数据包数
}}
欢迎关注微信公众号【物联网思考】,回复关键字“ ASR6505”获取资料,《从0到1搭建LoRa物联网》系列的所有软硬件资料将会分享在公众号。
版权声明:本文为freemote原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
