LoRaWAN介绍1 概貌
1 LoRaWAN是什么LoRaWAN是基于LoRa的低功耗广域网,它主要包括2个部分:通信协议和体系结构。它能提供一个:低功耗、可扩展、高服务质量、安全的长距离无线网络。2 LoRaWAN体系结构借助于LoRa长距离的优势,LoRaWAN采用星型无线拓扑,有效延长电池寿命、降低网络复杂度和后续轻易扩展容量。它将网络实体分成4类:End Nodes(终端节点)、Gateway(网关)、LoraWA...了解详情LoRa学习笔记_汇总
LoRa在今年(2016年)应该是最火的物联网技术,Semtech不停攻城略地,七大洲,哦,除了南极洲,所有地区都宣布要建立国家级的LoRa网络。虽然,我大中国的运营商要做NB-IoT,但是不乏中兴、富士康、鹏博士等企业野心勃勃,要在NB-IoT正式商用之前就部署出一个类运营商的LoRa网络。在市场为低功耗广域网开始造势时,我们技术人员就要开始跟上了。IoT小能手在ZigBee、蓝牙、WiFi之后...了解详情关于LoRa智能水表你所不知道的那些事儿
你的小区还是抄表员上门抄表吗?那可真是OUT了。这年代,什么都流行智能化,那当然也包括水表啦。现在有一款新型的智能水表–LoRa水表,它的出现完美解决了上门抄表这一困扰。当然,有人肯定会问,什么是LoRa水表?那小编今天我就给大家科普一下吧。第一部分 LoRa水表介绍LoRa水表,顾名思义,水表内嵌LoRa无线模块,采集水量,通过LoRa调制方式,定时上报给LoRa网关,并通过LoRa网关来接收服...了解详情几种LoRa应用协议的定义以及应用方向
Lora几种应用协议分别是Lora协议、LoraWAN协议、CLAA协议、Lora私有协议等。下面就简单介绍一下这几种协议的应用,供大家参考LoRa协议LoRa™(Long Range,远距离)是一种调制技术,与同类技术相比,提供更远的通信距离。由于LoRa调制是物理层(PHY),因此也可将其用于不同的协议和不同网络架构(如Mesh、Star、点对点)等等。可以将LoRa概括为以下几种协议LoRaWAN协议...了解详情物联网低功耗广域网络有哪些?
随着各类厂商不断发力低功耗广域网络(LPWA),物联网专用网络的话题在此引起业内的热议。物联网智库曾持续关注并推出多篇LPWA的文章,向业内介绍SigFox、LoRa、LTE-M等市场上已开始商业化的LPWA协议。作为一个新兴的、刚起步的技术和市场,LPWA网络协议应该是呈现多家争鸣的状态,那么,这一领域还有哪些技术,它们之间在多个指标上各有哪些特点?物联网智库本周为大家编译推出一篇LPWA协议的...了解详情如何设计高品质LoRa无线模块
“炮制虽繁必不敢省人工,品味虽贵必不敢减物力”-百年同仁堂古训从14年至今,本着追求极致的工匠精神,锐米通信迭代设计了5版LoRa无线模块,最终达到高品质。干过射频设计的工程师都知道,因为高频电路敏感,元器件微小,测试仪器精密;每一版设计,不但凝聚心血,还需要真金白银的投入。为此,我们分享LoRa射频设计的一些经验,只为您(们)不必再掉进这些“坑”。1 原理图在14年,获取一份SX1276/8的原...了解详情LoRa网关、节点性能常用数据整理和统计
本文包含一些用到的一些LoRa网关、节点相关的参数,供方案设计人员参考。LoRa网关处理能力1个1301芯片,8个上行通道,24小时可以接收约150万个数据包。每个设备每小时上报一次,可以处理约62500个设备。下面见官方资料What is the capacity of LoRa gateway? How many nodes can be connected to a single gate...了解详情LPWA,物联网产业发展的新机遇
2015 IMT~2020(5G)峰会发布了《5G无线技术架构白皮书》和《5G的网络技术架构白皮书》,提出了2020年之后移动通信技术和产业将迈入第5代通信,使经济生活从移动互联网扩展到物联网领域,实现“万物互联”,并明确以连续广域覆盖、热点高容量、低时延、低功耗等为主要技术场景,满足2020年及未来的移动互联网和物联网发展需要。物联网产业发展催生无线接入新技术的兴起物联网时代将有数百亿物体接入网...了解详情LoRa点对点系统9 下载源代码与前路思考
1 源代码下载地址源代码可以从以下链接下载http://download.csdn.net/detail/jiangjunjie_2005/96634522 开发环境与工具硬件平台:锐米LoRa终端http://www.rimelink.com/pd.jsp?id=2测试套件:USB转串口 + LoRa终端转接板https://shop140974727.taobao.com/?spm=2013.1.1000126.d21.DL6hVR仿真器: ST LINK V2https://item.taobao.com/item.htm?spm=2013.1.20141002.4.Sj743Y&scm=1007.10009.31621.100200300000004&id=540446816750&pvid=8a31520e-d2bd-4a21-b940-aa421c82d92dIDE环境:IAR for STM8http://www.rimelink.com/nd.jsp?id=33&_np=105_3153 评估软件3.1 下载评估软件下载评估软件链接:http://www.rimelink.com/nd.jsp?id=38&_np=105_3153.2 使用评估软件使用该软件请参考《锐米LoRa终端评估软件操作手册》,链接地址为:http://www.rimelink.com/nd.jsp?id=38&_np=105_315思考题:路往何方1 点对点系统局限性LoRa点对点系统在现实中有少量的应用场景,如:使用手持机“点名”抄能源表计(电/水/气/热表计),远程控制阀门等。当然,它的局限性是很明显的:1. 没有避免冲突机制:没有LBT(Listen BeforeTalk)机制,如果2个节点同时发送,无线电信号将受损,导致通信失败;2. 接收节点无法低功耗:接收节点必须随时等待发送节点的信号,无法休眠;3. 无法自动组网:解决不了避免冲突和低功耗侦听,组网也就成了空中楼阁。2 LoRa+mesh可行吗?在FSK调制的微功率射频时代,mesh是主流方案,表面看,它具备:多跳延伸通信距离,多路径保证通信链路健壮性,避免冲突,低功耗侦听等优点;然而,深入研发的工程师都知道它有以下缺陷:1. 延时大:当一个数据包经过几跳传输后,实时性就很难保证;2. 不可靠:跳跃转发越多,丢失数据包的机率就越大,尤其是通信链路受干扰或信号微弱的情况下;3. 耗电大:mesh网中负责转发的节点能耗很大,最终整体网络将陷入瘫痪;4. 很复杂:多跳转发和多径路由,本身就复杂,这给开发和维护带来困难。也正因为上述缺陷,像ZigBee一直没有占据主导地位;LoRa是从物理层面(调制技术)实现了长距离和低功耗,因此它的“基因良好”,天生就可以绕过上述4个坑。除非常特殊的场景(如:军用或救灾),一般LoRa是不需要mesh组网的。锐米通信于2年前研发过一个LoRa+mesh的网络系统,后来团队发现,应用于产品不合适;当然,对于科研机构,该系统可能具备研究价值。如果您对于该系统感兴趣,我们提供源代码。申请Email:sales@rimelink.com3 星型网关LoRa因为长距离的优势,使用星型网络成为最佳的选择,它具备很多优势:1. 延时小:因为是单跳,一次性传播,延时是可控的;2. 高可靠:那怕链路受干扰或信号微弱,借助LoRa抗干扰优势,星型网络仍能提供可靠的通信;3. 能耗低:双方可以协商唤醒时刻,空闲时休眠,实现低功耗;4. 简单化:星型网在网络拓朴中非常简单,可以大幅降低开发和维护成本。锐米通信开发的第2代LoRa系统,就是星型网络,它除了低功耗和长距离还,特别擅长超低功耗唤醒技术。了解更多详情,请链接:http://www.rimelink.com/nd.jsp?id=44&_np=105_315了解详情LoRa点对点系统8 测试
1 测试环境1.1 测试工具PC机2台;锐米LoRa终端2个;USB转串口套件2个;锐米LoRa终端评估软件;1.2 搭建平台如下图所示,2个LoRa终端,分别通过USB转UART连接2台PC,终端之间通过LoRa无线通信。这样一来,PC#i发送的数据,PC#j能远程接收;反之,亦然。2 集成测试2.1 测试目的将LoRa终端和PC评估软件联合测试,使它们能够正常运行。2.2 测试内容步骤 | 方法 | 结果 |
NB-IoT和LoRa使用频谱比较
概述在中国,在低功耗广域网领域,NB-IoT和LoRa无疑是最为热门的两种低功耗广域网(LPWAN)技术。两者形成了两大技术阵营,一方是以华为为代表的NB-IoT,另一方是以中兴为代表的LoRa。国内两大电信服务商,引领了两种技术的发展,可谓是中国低功耗广域网(LPWAN)技术领域里的盛事。而低功耗广域网由于其低功耗广域覆盖的特点,正在推动物联网新一波发展的行情。毫无疑问,无线电频谱是一种国家资源...了解详情LoRa点对点系统7 剖析核心代码
1 引言在LoRa点对点系统中,核心是Network进程的处理代码,它除了响应用户发送无线数据包外,还需要驱动射频和响应多种中断信号。为此,我们列出该进程的逻辑,并且剖析它的代码。2 核心代码逻辑有2个特别注意的地方:1. 如果RF_Rx_Error,需要重新启动RF接收功能,以避免引发宕机错误;2. RF缓冲区中有多个数据包时,给自身发poll消息,让其他进程有机会运行。3 剖析核心代码PROCESS_THREAD(NetworkProcess, ev, data){/*ATTENTION: stack variables can NOT cross any “XX_YIELD()”. */uint8_t byDataSize;uint16_t wCalcCRC16;uint16_t wSrcCRC16;PROCESS_BEGIN();SX1278Receive(0);while(TRUE){PROCESS_YIELD();if (NETWORK_EVENT_TX_RF_PACKAGE == ev) 1{/* Make RF package as well as TX it. */wCalcCRC16= util_CRC16( s_stTxRFPackage.a_byBuf,s_stTxRFPackage.byRFTxSize );*(uint16_t *)&s_stTxRFPackage.a_byBuf[s_stTxRFPackage.byRFTxSize] =wCalcCRC16;SX1278SetSleep(); 2SX1278Send( s_stTxRFPackage.a_byBuf,s_stTxRFPackage.byRFTxSize +sizeof(uint16_t)); 3/* Waiting until TX is done. */PROCESS_YIELD_UNTIL( RF_Tx_Done == s_tRFResult ||RF_Tx_Timeout ==s_tRFResult ); 4/* Enable RF_RX. */SX1278Receive(0); 5}else 6{if (RF_Rx_Error == s_tRFResult){/*EXPLAIN: Restore the RX of RFif Rx-Error or frame is NOT integrity. */SX1278SetSleep(); 7SX1278Receive(0);}/* EXPLAIN: process all received packets for simplicity. */if (!IsRadioBufEmpty()){/* Fetch data from RF buffer, CheckCRC16. */s_stParseRFBuf.bySize = GetRadioBuf(s_stParseRFBuf.a_byBuf,RF_FIFO_SIZE); 8if (sizeof(uint16_t) < s_stParseRFBuf.bySize){byDataSize = s_stParseRFBuf.bySize – sizeof(uint16_t);wSrcCRC16 = *(uint16_t *)&s_stParseRFBuf.a_byBuf[byDataSize];wCalcCRC16 = util_CRC16(s_stParseRFBuf.a_byBuf, byDataSize);if (wSrcCRC16 == wCalcCRC16) 9{/* Deliver data to Comm2Trm-Process */comm2trm_RxRFPackage(s_stParseRFBuf.a_byBuf, byDataSize); 10}else{/*EXPLAIN: Restore the RX of RF if Rx-Error orframe is NOT integrity. */SX1278SetSleep(); 11SX1278Receive(0);}}/*if*//* Check whether some packages still stay in buffer. */if (!IsRadioBufEmpty()) 12{/* Don’t disturb the scheduling ofother processes. */process_poll(&NetworkProcess);}}/*if (!IsRadioBufEmpty())*/}}/*while(TRUE)*/PROCESS_END();}Line#1:用户需要发送RF数据包;Line#2:将处于持续接收的RF设置休眠状态;Line#3:通过SX1278发送该RF数据包;Line#4:阻塞进程,直到RF发送数据包完毕;Line#5:将RF切换到持续接收模式;Line#6:射频中断服务程序发来消息:接收到数据包,或,接收错误;Line#7:RF接收出错,重新启动RF接收功能,避免宕机错误;Line#8:从RF缓冲区复制数据包到解析工作区;Line#9:检查接收数据包的CRC16是否正确;Line#10:交付接收数据给Comm2Trm进程;Line#11:如果数据包的CRC16错误,重新启动RF接收功能,避免宕机错误;Line#12:如果RF缓冲区还有数据包,给自身发poll消息,允许Contiki调度其他进程运行。了解详情LoRa点对点系统6 源代码结构
1 源代码结构main.c基于C语言系统的入口函数main.h系统的全局配置文件Application应用程序,以Contiki系统的protothread方式组织ContikiContiki操作系统Driver驱动:ST官方驱动库和MCU外设驱动文件ProjectIAR环境下所有工程文档RFSX1278射频芯片驱动代码2 使用源代码在源代码文件main.h中,有如下宏编译语句:#define CUR_PRODUCT iWL882A#define REL_VER 1 /* 0=debug; 1=release */#define CUR_VER “LoRaP2PTW V1.0.00 2016-10-20” /*current version */它们代表如下含义:CUR_PRODUCT:当前LoRa终端的硬件版本号,目前出厂为iWL882A;REL_VER:0=debug版本,串口支持shell命令;1=release版本,串口与评估软件通信;CUR_VER:软件版本号,其中“LoRaP2PTW”不能更改,因为评估软件依赖该版本编号来识别产品种类;3 Main入口函数void main(void){/* Initialize hardware */chip_Init(); 1SX1278InitPins(); 2rtimer_init(); 3ss_Init(); 4cpc_Init(); 5#if (!REL_VER)dp_Init(); 6#endif/* EXPLAIN: enable INT before initialize process! */HAL_ENABLE_INTERRUPTS(); 7/*Initialize contiki system */process_init(); 8/* Start process of user */comm2trm_Init(); 9network_Init(); 10#if (!REL_VER)monitor_Init(); 11#endifwhile (1){while (0 < process_run()) 12{null(); 13}/* EXPLAIN: Set MCU to low power mode if have nothing to do. */wfi(); 14}}Line#1:初始化MCU时钟和引脚等;Line#2:初始化连接SX1278的SPI总线和中断控制线;Line#3:初始化rtimer(高精度实时时钟);Line#4:初始化SystSettings(系统参数)模块;Line#5:初始化通信串口,它连接PC;Line#6:如果是Debug版本,初始化调试串口;Line#7:使能MCU硬件中断;Line#8:初始化Contiki的进程模块;Line#9:初始化comm2trm模块,同时启动comm2trm进程;Line#10:初始化network模块,同时启动network进程;Line#11:如果是Debug版本,初始化monitor模块,同时启动monitor进程;Line#12:Contiki主循环函数,根据post和poll消息,调用对应的进程;Line#13:空语句,为代码可读性而添加;Line#14:节能指令,如果MCU空闲则进入WFI模式,可以被任意中断唤醒。了解详情LoRa点对点系统5 数据结构与算法
1 Comm2Trm进程1.1处理UART数据帧为节省内存,接收与处理UART数据“复用”了缓冲区,如下图所示:UART驱动:#1:一个接一个将接收的UART数据存储到缓冲区;#2:接收一完整UART帧后,发消息给进程通知处理;Comm2Trm进程:#3:给缓冲区加锁,解析UAR帧;#4:组织UART回应帧;#5:通过UART发送回应帧,给缓冲区解锁。为什么要给缓冲区加锁和解锁呢?如下图的时序逻辑所示:进程“锁定”缓冲区期间UART驱动无法向缓冲区中写数据,因此也不会“竞态打扰”进程处理该数据帧。1.2 发送RF数据包#1:UART一个接一个输入数据到缓冲区COMM_TRM_DATA;#2:当接收一完整帧结束后,UART_ISR给进程poll消息;#3:进程解析和处理该UART数据帧;#4:进程拷贝用户数据到缓冲区TxDataBuf;#5:Network进程从缓冲区TxDataBuf提取数据,通过RF发送。1.3 接收RF数据包#1:Network进程存储接收数据到缓冲区RxDataBuf;#2:Network进程post消息给Comm2Trm进程;#3:Comm2Trm进程组织该数据为UART帧;#4:进程通过UART口发送该数据帧。2 Network进程2.1发送RF数据包#1:从Comm2Trm进程提取发送数据到packetbuf;#2:基于packetbuf组织RF数据包;#3:通过RF发送packetbuf中的RF数据包;2.2接收RF数据包#1:RF接收的数据包存入RadioBuf,并poll进程;#2:进程从RadioBuf拷贝数据包到ParseRFBuf;#3:进程解析该RF数据包;#4:提取用户数据,交付给Comm2Trm进程;2.3 逻辑流程3 SystSettings模块为简化设计,定义了NetSettings_t数据结构,它的“主本”存储在SystSettings模块的EEPROM中,Comm2Trm和Network这2个进程各自拥有一个“副本”。1.上电时,Comm2Trm和Network这2个进程各自从“主本”拷贝“副本”;2.任意一方修改“NetSettings_t”的副本数据,必须:①存储到“主本”之中;②通知“另一方”同步更新副本数据。了解详情LoRa点对点系统4 进程通信
1 Comm2Trm进程1.1 接收RF数据包,发送给PCt0时刻:Network进程通知Comm2Trm进程(简称进程),接收到RF数据;t1时刻:进程封装数据为UART帧,通过UART端口发送;t2时刻:UART端口启动发送;t3时刻:UART发送完毕,ISR执行扫尾工作(清除硬件中标标识等);1.2 接收PC数据帧,通过RF发送t4时刻:UART接收到来自PC的UART数据帧,poll进程;t5时刻:进程提取UART帧中用户数据,通知Network进程;t6时刻:Network进程通过RF发送该数据帧。2 Network进程2.1 接收PC数据帧,通过RF发送t0时刻:Comm2Trm进程通知Network进程(简称进程),接收到UART数据;t1时刻:进程封装数据为RF包,通过RF端口发送,阻塞自身;t2时刻:RF启动发送;t3时刻:RF发送完毕,ISR执行扫尾工作,通知进程;t4时刻:进程恢复运行,切换RF到RF模式;2.2 接收RF数据包,发送给PC接收RF数据包,发送给PC。t5时刻:RF接收到数据包,poll进程;t6时刻:进程处理该RF数据包,通知Comm2Trm进程;t7时刻:Comm2Trm进程了解详情LoRa点对点系统3 与PC接口
1 通信介质UART口:115200波特率、8位数据位、1位停止位、无校验。2 通信模式设置和读取参数遵循主从方式,PC为主,Node为从。通信由PC发起,Node根据相应的命令进行响应,如下图所示。当Node接收唤醒通信数据帧时,它以“异步方式”发送给PC,如下图所示。3 通信帧格式PC与Node通信帧采用变长格式,如下图所示。大部分设备可以很好地处理以“回车符”结尾的数据帧,因此协议中的Tail等于0x0D(换行符)。4 通信帧种类没有额外说明,数据格式均为“大端”,即:4字节整数0x12345678在内存中(自低向高)存储顺序为:0x12、0x34、0x56、0x78。帧含义 | Typ | 数据域 | 实例 | |
字节 | 数据解释 | |||
读取软件版本(PC->No | 0x0 | |||
回应软件版本(Node-> | 0x8 | 软件版本号(字符串,以’\0’结尾 | 2 | “LoRaP2P V1.0.0 16-10-20” |
发送数据(PC->No | 0x0 | 实际发送数据,最大字节=24 | 数据帧(十六进制):12 34发送2字节数据:... |