系列文章:
【从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采样

前言:在LoRaWAN网络中,终端设备直接与网关通讯,设备和设备之间不通讯。设备需要先入网,再上报数据。其中入网分为OTAA(空中激活)和ABP(手动激活)两种方式。

所谓OTAA:就是设备发送一条入网请求数据,服务器校验通过后,再分配短地址和秘钥下发给设备的过程,之后设备用分配的短地址以及秘钥加密数据上报到服务器。
ABP:就比较简单粗暴了,双方直接约定好短地址和秘钥,设备直接上传数据到服务器,没有了入网的过程。

1、入网参数

OTAA参数:DevEui(设备ID,8个字节)、AppEui(应用ID,8个字节)、AppKey(根秘钥,用于产生NwkSKey(网络会话密钥)和AppSKey(应用会话密钥))。

ABP参数:DevAddr(设备在网络中的短地址)、NwkSKey、AppSKey,这三个参数直接存储在设备中,必须和服务器保持一致。

2、入网过程

整个栈中以状态机的方式调度运行,下面以一个流程图展开:
可以看出:OTAA入网需要执行DEVICE_STATE_JOIN这个过程,入网之后上报数据;ABP是没有入网过程的,直接就上报数据了。最终在3个状态之间切换:

3、入网和Class A模式射频收发切换时序

终端的LoRa都是半双工的,即就是发的时候不接收的,接收的时候不发送,其余时间射频是在休眠的。为了终端能准确的接收到网关下发的数据,LoRaWAN里面针对终端设备什么时候接收做了详细的时间规定。

从图中可以看出,发送数据完成后,射频开始休眠,RECEIVE_DELAY1时间后,射频切换到接收状态(RX1),如果RX1还没有收到数据,那么射频再次休眠,等到RECEIVE_DELAY2时间后,射频再次切换到接收状态(RX2)。这就是一次完整的收发切换过程。这里RECEIVE_DELAY1和RECEIVE_DELAY2都是以发送数据完成开始计算的,一般情况下RECEIVE_DELAY2-RECEIVE_DELAY1=1S。

其中在入网阶段RECEIVE_DELAY1等于5s,RECEIVE_DELAY2等于6s。Class A发送数据阶段RECEIVE_DELAY1等于1s,RECEIVE_DELAY2等于2s。

4、Class C模式射频收发切换时序


可以看出,Class C模式下,接收窗口的打开发生了变化,发送完成后,紧接着打开窗口2、再打开窗口1、最后窗口2一直开着。即就是射频除过发送外,一直处于接收状态。从这里也可以看出,Class C要比Class A耗电。不管是ClassA和ClassC入网过程都是一样的。只有在入网后才区别Class A和Class C。

5、信道

LoRaWAN是工作在ISM频段的,各个地区的ISM频段不一样,比如中国470-510MHZ、美国902-908MHZ、欧洲863-870MHZ等,因此为了合理的利用频谱,LoRaWAN也对信道进行了划分。
可以看出在CN470-510频段,上行划分了96个信道,编号依次是0-95,从470.3MHZ开始以200KHZ的步长增长一直到489.3MHZ。下行划分了48个信道,编号依次是0-47,从500.3MHZ开始以200KHZ的步长增加一直到509.7MHZ。

6、代码实现

SDK中已经实现了完整的LoRaWAN协议栈,只需要根据实际情概况配置入网参数、信道等即可。另外发送数据和接收数据,SDK也提供了相应的函数,只需在相应的函数里面填充或者获取数据。

7、配置入网参数

static uint8_t DevEui[] = LORAWAN_DEVICE_EUI;
static uint8_t AppEui[] = LORAWAN_APPLICATION_EUI;
static uint8_t AppKey[] = LORAWAN_APPLICATION_KEY;#if( OVER_THE_AIR_ACTIVATION == 0 )static uint8_t NwkSKey[] = LORAWAN_NWKSKEY;
static uint8_t AppSKey[] = LORAWAN_NWKSKEY;
static uint32_t DevAddr = LORAWAN_DEVICE_ADDRESS;#endif

上面6个参数以及入网方式以宏定义的方式在Commissioning.h中定义,很容易修改。

8、信道、发射功率、速率等配置

这里我们定义了一个函数,在里面统一配置参数。

static void DeviceParamConfig( void )
{MibRequestConfirm_t mibReq;uint16_t channelsMaskTemp[6];channelsMaskTemp[0] = 0x0001;channelsMaskTemp[1] = 0x0000;channelsMaskTemp[2] = 0x0000;channelsMaskTemp[3] = 0x0000;channelsMaskTemp[4] = 0x0000;channelsMaskTemp[5] = 0x0000;//信道这里实际上是修改信道掩码,96个信道对应96个bit,配置相应的bit为1,则就使能对应的信道、mibReq.Type = MIB_CHANNELS_DEFAULT_MASK;mibReq.Param.ChannelsDefaultMask = channelsMaskTemp;LoRaMacMibSetRequestConfirm(&mibReq);mibReq.Type = MIB_CHANNELS_MASK;mibReq.Param.ChannelsMask = channelsMaskTemp;LoRaMacMibSetRequestConfirm(&mibReq);mibReq.Type =MIB_CHANNELS_DEFAULT_DATARATE;mibReq.Param.ChannelsDefaultDatarate = DR_2;//DR_2实际上是索引,实际对应的是SF10LoRaMacMibSetRequestConfirm(&mibReq);mibReq.Type =MIB_CHANNELS_DATARATE;mibReq.Param.ChannelsDatarate = DR_2;LoRaMacMibSetRequestConfirm(&mibReq);mibReq.Type =MIB_CHANNELS_TX_POWER;mibReq.Param.ChannelsTxPower=TX_POWER_1;//TX_POWER_1也是索引,对应的是最大功率减去4,最大功率在RegionCN470.h文件中也是以宏定义的方式定义LoRaMacMibSetRequestConfirm(&mibReq);
}

这里一定要注意,信道要和网关保持一致。SX130x系列网关一般是8个信道,单通道网关一般是1个信道,后面也会介绍一个单通道网关。

9、发送数据

这里也提供了一个函数,在里面赋值我们要发送的数据即可:

static void PrepareTxFrame( uint8_t port )
{AppDataSize = 4;AppData[0] = 0x00;AppData[1] = 0x01;AppData[2] = 0x02;AppData[3] = 0x03;//AppDataSize是要发送的数据长度,AppData是要发送的数据
}

10、接收数据

这里也提供了一个函数,在里面获取接收到的数据即可:

static void McpsIndication( McpsIndication_t *mcpsIndication )
{if( mcpsIndication->Status != LORAMAC_EVENT_INFO_STATUS_OK ){return;}printf( "receive data: rssi = %d, snr = %d, datarate = %d\r\n", mcpsIndication->Rssi, (int)mcpsIndication->Snr,(int)mcpsIndication->RxDatarate);switch( mcpsIndication->McpsIndication ){case MCPS_UNCONFIRMED:{break;}case MCPS_CONFIRMED:{break;}case MCPS_PROPRIETARY:{break;}case MCPS_MULTICAST:{break;}default:break;}if( mcpsIndication->FramePending == true ){OnTxNextPacketTimerEvent( );}if( mcpsIndication->RxData == true ){}if(mcpsIndication->BufferSize) {//把接收到的数据通过串口打印出来。printf("Received: ");for(i=0; i<mcpsIndication->BufferSize; i++) {printf("%x ", (void *)mcpsIndication->Buffer[i]);}printf("\r\n");}
}

把接收到的数据通过串口打印出来。

11、实验现象

需要提前在服务器上加入节点,并且配置节点的频点需和网关一致。

欢迎关注微信公众号【物联网思考】,回复关键字“ ASR6505”获取资料,《从0到1搭建LoRa物联网》系列的所有软硬件资料将会分享在公众号。

【从0到1搭建LoRa物联网】11、ASR6505 LoRaWAN通信相关推荐

  1. 【从0到1搭建LoRa物联网】15、LoRa连接到The Things Network

    系列文章: [从0到1搭建LoRa物联网]1.LoRa物联网的架构 [从0到1搭建LoRa物联网]2.终端设备开发方式 [从0到1搭建LoRa物联网]3.国产LoRa终端ASR6505软硬件 [从0到 ...

  2. 【从0到1搭建LoRa物联网】13、低成本单通道网关(一)

    系列文章: [从0到1搭建LoRa物联网]1.LoRa物联网的架构 [从0到1搭建LoRa物联网]2.终端设备开发方式 [从0到1搭建LoRa物联网]3.国产LoRa终端ASR6505软硬件 [从0到 ...

  3. 【从0到1搭建LoRa物联网】16、LoRa连接到腾讯云物联网平台

    系列文章: [从0到1搭建LoRa物联网]1.LoRa物联网的架构 [从0到1搭建LoRa物联网]2.终端设备开发方式 [从0到1搭建LoRa物联网]3.国产LoRa终端ASR6505软硬件 [从0到 ...

  4. 【从0到1搭建LoRa物联网】17、LoRa连接到chirpstack

    系列文章: [从0到1搭建LoRa物联网]1.LoRa物联网的架构 [从0到1搭建LoRa物联网]2.终端设备开发方式 [从0到1搭建LoRa物联网]3.国产LoRa终端ASR6505软硬件 [从0到 ...

  5. 【从0到1搭建LoRa物联网】18、LoRa应用服务器Application Server

    系列文章: [从0到1搭建LoRa物联网]1.LoRa物联网的架构 [从0到1搭建LoRa物联网]2.终端设备开发方式 [从0到1搭建LoRa物联网]3.国产LoRa终端ASR6505软硬件 [从0到 ...

  6. 【从0到1搭建LoRa物联网】20、LoRaWAN扩展

    系列文章: [从0到1搭建LoRa物联网]1.LoRa物联网的架构 [从0到1搭建LoRa物联网]2.终端设备开发方式 [从0到1搭建LoRa物联网]3.国产LoRa终端ASR6505软硬件 [从0到 ...

  7. 【从0到1搭建LoRa物联网】14、低成本单通道网关(二)

    系列文章: [从0到1搭建LoRa物联网]1.LoRa物联网的架构 [从0到1搭建LoRa物联网]2.终端设备开发方式 [从0到1搭建LoRa物联网]3.国产LoRa终端ASR6505软硬件 [从0到 ...

  8. 【从0到1搭建LoRa物联网】19、LoRa串口透传例程(补充)

    系列文章: [从0到1搭建LoRa物联网]1.LoRa物联网的架构 [从0到1搭建LoRa物联网]2.终端设备开发方式 [从0到1搭建LoRa物联网]3.国产LoRa终端ASR6505软硬件 [从0到 ...

  9. 【从0到1搭建LoRa物联网】1、LoRa物联网的架构

    什么是LoRa? LoRa是Lang Range的简称,属于LPWAN(low-power Wide-Area Network,低功耗广域网)通信技术的一种,由美国Semtech(升特)公司2013年 ...

最新文章

  1. java中table是什么标签_[Java教程]javascript格式化table标签内容
  2. 实验一:JDK下载与安装、Eclipse下载与使用总结心得
  3. 微信小程序开发实战(三)自定义UI样式---增加减少按钮
  4. TP返回原生SQL语句:fetchSql
  5. 人工神经网络——笔记摘抄1
  6. 在Unity编辑器中开发遇到问题BUG如何调试解决?
  7. 内存映射处理大文件[转载]
  8. 上班快1个月,老板也不签合同,也没交社保,该怎么办?
  9. 【java学习之路】(java SE篇)005.面向对象基础入门part2
  10. windows使用Charles手机抓包
  11. 韩顺平java30天Utils包下的工具类
  12. PR剪辑视频工作流程 大剪辑师分享的高级视频编辑技巧
  13. 计算机常用的采样频率,采样频率
  14. jspSmartUpload上传的路径问题
  15. vue路由守卫和重定向
  16. labelme批量json转png数据集教程
  17. ecshop模板修改大全
  18. poi中excel锁定行列问题
  19. 一个多线程Ping 类
  20. Linux 安装图形化界面

热门文章

  1. 【WIN10】如何关闭右下角输入法的“拼”字
  2. 99的测试人还不会用nose进行自动化测试
  3. aso优化师是什么_连这些名词都不懂,还好意思说你是ASO优化师?
  4. [嵌入式框架][nrf51822][SDK12.3] BLE分层设计 NUS 透传数据队列发送,提升带宽利用率
  5. supervisord如何优雅的新加服务
  6. mysql批量构造模拟数据
  7. 刘强东:大学打过好几份工 最赚钱的是编程
  8. 安装VMware的VM Tools
  9. 什么是IO多路复用,理解IO多路复用
  10. android自定义键盘遮挡,android中键盘遮挡了dialog里的内容怎么处理