LoRa开发6:接收数据帧

1 引言接收LoRa数据帧比发送稍复杂一些,接收是一个异步动作—-不知道下一帧什么时候到来;因为干扰或信号微弱等,接收可能会出错;甚至,当多次接收错误后,RF可能会宕机—-再也无法接收任何数据帧。本章,我们继续基于Contiki和SX1278,开发接收数据帧的代码。2 整体逻辑流程接收数据帧的整体逻辑流程如下所示,特别注意的是,添加了处理异常的代码:如果RF接收错误(硬件自检payloadcrc16失败)或数据帧错误(用户CRC16失败),进程会重启动RF的接收,以防止陷入宕机(根据我们多年的经验,这种缺陷是可能发生的)。3 进程时序t0时刻:进程启动RF接收;t1时刻:SX1278接收到数据帧,中断服务程序poll进程;t2时刻:进程检验数据帧的CRC16,闪烁LED,打印计数、SNR和RSSI;4 代码剖析PROCESS_THREAD(RxPrintSNRRSSI, ev, data){/*ATTENTION: stack variables can NOT cross any “XX_YIELD()”. */bool bFrameOK; 1RF_FRAME_RAND_DATA *p_stFrameData;staticint32_t s_lRxRandCnt = 0;PROCESS_BEGIN(); 2InitSetLoRa(); 3SX1278Receive(0);/* Explain: 0 means RX forever */ 4while(1){PROCESS_YIELD(); /* Yield until receive aframe. */ 5bFrameOK = FALSE;if (RF_Rx_Done == s_tRFResult) 6{/* Check CRC16 of this received frame. */s_stParseRFBuf.bySize = GetRadioBuf(s_stParseRFBuf.a_byBuf,RF_FIFO_SIZE); 7p_stFrameData = (RF_FRAME_RAND_DATA *)s_stParseRFBuf.a_byBuf;if ( p_stFrameData->wCRC16 ==util_CRC16( p_stFrameData,GET_ST_FLD_OFFSET(RF_FRAME_RAND_DATA, wCRC16)) ) 8{bFrameOK = TRUE;chip_LEDToogle();++s_lRxRandCnt;RIME_DBG( RIME_DBG_ON,“Rx Rand Cnt=%ld, SNR=%d,RSSI=%d.\r\n”,s_lRxRandCnt, s_chPacketSnr, s_nPacketRssi ); 9}}/*EXPLAIN: Restore the RX of RF if Rx-Error or frame is NOT integrity.*/if(!bFrameOK) 10{SX1278SetSleep();SX1278Receive(0);}}PROCESS_END(); 11}Line#1:小心!在Contiki系统自动变量不能跨越阻塞语句,详细原因请链接:http://blog.csdn.net/jiangjunjie_2005/article/details/44725997Line#2:Contiki进程的第一条语句,详解请链接:http://blog.csdn.net/jiangjunjie_2005/article/details/44600365Line#3:初始化SX1278,详解请链接:http://blog.csdn.net/jiangjunjie_2005/article/details/52824184Line#4:启动RF接收,参数为0代表关闭超时定时器,即持续接收;Line#5:阻塞进程,等待RF中断唤醒;Line#6:判断RF是否接收一帧数据;Line#7:从RF缓冲区复制数据帧到解析工作区;Line#8:检测数据帧的CRC16是否正确;Line#9:打印接收次数、SNR和RSSI,RIME_DBG()的原理和使用,请链接:http://blog.csdn.net/jiangjunjie_2005/article/details/51869953Line#10:如果接收错误或数据帧CRC16错误,重启动RF接收,防止宕机;Line#11:Contiki进程的最后一条语句,详解请链接:http://blog.csdn.net/jiangjunjie_2005/article/details/44600365了解详情

LoRa开发5:发送随机数据

1 引言学习需要循序渐进,做开发也不例外。在LoRa终端开发中,最简单的代码是通过SX1278发送数据帧。因此,我们先从发送开始,了解初始化SX1278和建立Contiki进程的入门知识。2 整体逻辑流程发送数据帧的整体逻辑流程如下所示,很明显,进程是一个无限循环:生成随机数据帧-> 发送 -> 生成随机数据帧 ->…3 初始化SX1278初始化SX1278的代码清单如下,它主要完成射频参数的配置。static void InitSetLoRa(void){SX1278Init(&s_stRFEvents); 1SX1278SetFreq(RADIO_FREQ); 2SX1278SetPAOutput(PA_OUTPUT_PIN_BOOST); 3SX1278SetTxPower(20); 4SX1278SetPreambleLen(6); 5SX1278SetLowDatarateOptimize(FALSE); 6SX1278SetFixLen(FALSE); 7SX1278SetCrcOn(TRUE); 8SX1278SetRxContinuous(TRUE); 9SX1278SetBandwidth(RF_BW_500000); 10SX1278SetSpreadingFactor(RF_SF_7); 11SX1278SetCodingRate(RF_FEC_4_5); 12SX1278SetLoRaSettings(); 13SX1278SetTxTimeout(SX1278GetTimeOnAir(255) + 10); 14return;}Line#1:传递一个回调函数指针数组给SX1278驱动,这样一来,当射频中断发生时,可以让调用者执行必需的动作 (一般用于给进程发消息)。该原理的解释,请链接:http://blog.csdn.net/jiangjunjie_2005/article/details/52798757Line#2:设置频率为470MHz;Line#3:使用PA(Power Amplifier,功率放大器)引脚输出;Line#4:设置发射功率为最大值20dBm;Line#5:设置preamble(前导码,用于接收同步)长度为6,根据我们多年的测试经验,6是最小值,低于该值将会导致接收误码率上升;Line#6:关闭低速率优化功能:当symbol驻空时间超过16ms时,打开此选项可以提高LoRa链路健壮性。注意:发送和接收双方必须设置一致!Line#7:允许发射数据帧长度可变;Line#8:使能SX1278对接收数据帧payload进行CRC16校验;Line#9:使能持续接收;Line#10:设置BW为500kHz;Line#11:设置扩频因子为7,即1symbol(每bit用户payload),LoRa扩频到2^7=128 chip(实际发射信号);Line#12:设置前向纠错码,每发送4symbol,添加1symbol纠错码;Line#13:将设置参数写入SX1278寄存器(批量操作提高效率);Line#14:设置发送超时为最大值(使用MCU定时器避免SX1278发送宕机);4 进程时序t0时刻:进程生成随机数据帧,并发送;t1时刻:SX1278启动发送;t2时刻:SX1278发送完毕,中断服务程序poll进程;t3时刻:进程打印发送次数,再次生成随机数据帧和发送;5 代码剖析PROCESS_THREAD(TxRandData, ev, data){/*ATTENTION: stack variables can NOT cross any “XX_YIELD()”. */RF_FRAME_RAND_DATA *p_stFrameData; 1staticint32_t s_lTxRandCnt = 0;PROCESS_BEGIN(); 2InitSetLoRa(); 3while(1) 4{/* Makethe frame of random data, TX it. */p_stFrameData= (RF_FRAME_RAND_DATA *)s_abyTxRFBuf;MakeRandData(p_stFrameData->a_byBuf,sizeof(p_stFrameData->a_byBuf)); 5p_stFrameData->wCRC16= util_CRC16( p_stFrameData,GET_ST_FLD_OFFSET(RF_FRAME_RAND_DATA, wCRC16)); 6SX1278Send(s_abyTxRFBuf, sizeof(RF_FRAME_RAND_DATA)); 7/* Block process until Tx Done or timeout. */PROCESS_YIELD_UNTIL( (RF_Tx_Done == s_tRFResult) ||(RF_Tx_Timeout == s_tRFResult) ); 8++s_lTxRandCnt;RIME_DBG(RIME_DBG_ON, “Tx Rand Cnt=%ld\r\n”, s_lTxRandCnt); 9}PROCESS_END(); 10}Line#1:小心!在Contiki系统自动变量不能跨越阻塞语句,详细原因请链接:http://blog.csdn.net/jiangjunjie_2005/article/details/44725997Line#2:Contiki进程的第一条语句,详解请链接:http://blog.csdn.net/jiangjunjie_2005/article/details/44600365Line#3:初始化SX1278;Line#4:一般而言,进程都是无限循环;Line#5:生成随机数据;Line#6:计算CRC16,宏GET_ST_FLD_OFFSET()用于取结构体中域的偏移;Line#7:发送随机数据帧;Line#8:阻塞进程,直到发送数据帧结束或超时;Line#9:打印总发送次数,RIME_DBG()的原理和使用,请链接:http://blog.csdn.net/jiangjunjie_2005/article/details/51869953Line#10:Contiki进程的最后一条语句,详解请链接:http://blog.csdn.net/jiangjunjie_2005/article/details/44600365了解详情

LoRa开发4:移植Contiki

1 LoRa终端需要OS吗?尽管工程师有很多理由拒绝在LoRa终端上使用OS(Operating System,操作系统):“它很复杂”,“没必要”,“内存太小”,“有学习成本”,“要改变编程思维”,“可能不稳定”……然而,基于以下理由,我们强烈推荐移植一个小型OS降低复杂度LoRa终端的复杂度其实比我们想象的要高:它需要驱动SX1278,这需要处理很多事件,如接收数据超时,接收数据错误等;它需...了解详情

LoRa开发3:终端驱动设计

1 引言从表面看,终端驱动就是MCU通过读写SX1278的寄存器,实现射频收发功能。然而,一个优秀的驱动设计,至少满足以下设计目标;最具喜挑战的是,有些目标是相互抵触的。提供机制:区分策略和机制,驱动仅提供机制,由用户进程实现策略;接口简单:接口越简单,驱动越好使用,另外,更好实现“高内聚、低耦合”;提高效率:最大化硬件设备性能,是驱动的重要使命;节能内存:内存复用和指针传递等方法可以节省MCU宝贵的内存;...了解详情

LoRa开发2:终端硬件平台

1 硬件基本框图一般而言,LoRa终端主要部件包括:MCU,SX1278,TCXO,RF_SWITCH,它们的功能如下表
部件功能
MC驱动SX1278,实现无线网络协议,与用户系统交互等
SX127完成LoRa无线信号的接收与发送
TCX为SX1278高频电路提供精确时钟
RF_SWITC为半双工的SX1278切换输入或输出状态
一个LoRa终端硬件框图如下所示在实际工程应用中,为更好地移植射频...了解详情

LoRa开发1:LoRa设计10问

引言近2年来,LoRa技术在国内受重视,从高校到企业,再到自主创业者,都在了解和研究。作为从事LoRa研发3年,推出2代LoRa网关的锐米通信,接触许多问询LoRa技术的客户。为此,我们解释一些LoRa技术的常见问题。1问:LoRa是什么?答:LoRa是Long Range(长距离)的简称,是一种长距离、低功耗无线通信技术。2009年法国公司Cycleo设计出一种优异的扩频通信算法,后来,该公司被美国semtech公司收购,后者于2013年推出LoRa芯片。目前,semtech公司是LoRa芯片唯一供应商。2问:LoRaWAN是什么?答:LoRaWAN是LoRa Wide Area Network(LoRa广域网)的简称,是基于LoRa技术的一种通信协议。它主要包括三个层次的通信实体:LoRa终端、LoRa网关和LoRa服务器。LoRaWAN是一个较庞大的体系结构,支持CLASS A / B / C三种终端,使用LoRa MAC协议为网关和终端提供防冲突通信和同步机制,有4种服务器角色,分别担任:网络连接、应用管理、接入控制和用户数据。它的层次关系如下:3问:LoRa有什么优点?答:最大的优点是长距离传输,采用扩频增益,它的传输距离约FSK的3倍;其次是低功耗,尽管它通信距离空旷能达到5km,仍保持良好的节能特性;再次,它工作在免费ISM频段,这为普通民众使用该无线网络打开了一道便捷之门,极大降低网络铺设成本。4问:LoRa有哪些缺点?答:第一个缺点,传输速率低,因为扩频调制后的通信带宽窄,一般只适合传感器网络;第二个缺点,硬件价格高,推出市场的时间不长,没有大规模应用,成本没有被摊薄;第三个缺点,LoRaWAN核心技术(通信协议和算法)需要缴纳会费才能获取,这提高了研发成本和难度。5问:LoRa与常见无线技术的区别?答:确实,我们身边的无线技术已经很多了:3G/4G、WiFi、蓝牙和ZigBee,为什么还需要LoRa这种无线技术呢?其实,每种无线技术都只能适应特定通信场景,需要配合使用才能构建高效率、低成本的网络。打个比方,现代化的军事组织,单兵武器都是配合使用,才能达到最佳火力配制。
无线技术类比武器距离...
了解详情

四个案例告诉你“定制树莓派”在企业级市场大有所为

树莓派自2012年推出以来,经过4年技术积淀以及社区运营,它在创客中间已经具备相当的名气了,去年仅英蓓特出货量就达到200多万片,这个对非消费类电路板块来说,是一个很不错的成绩了。近年来智能硬件概念的兴起,再加上国家层面大力推动“互联网+”、“智慧城市”,越来越多的传统企业参与其中,由此也诞生了很多新的创业公司以及新的业务,涌现出一批批刷新三观的应用。在这个讲究速度与激情的商业时代,比竞争对手先一...了解详情

WAZIUP欧洲项目的教学视频:构建低成本的LoRa物联网设备

如何构建低成本的LoRa IoT设备。 有关github的更多信息https://github.com/CongducPham/LowCostLoRaGw学习小组招募:喜欢动手的程序猿们喜大普奔时刻来临了!来临了!来临了!来自安爵士亲手制作的有关LoRa网关、终端等硬件开发系列学习视频登陆LoRa学习站,英文好的同学们可以先睹为快了,如果你英文足够好,又有兴趣参与LoRa学习资料翻译组,欢迎注册我们的网站会员并留言“加入学习视频翻译”。了解详情

LoRa组网案例5:无线电表,唤醒+总线

案例背景某用电采集系统,为减少布线和施工的代价,计划使用无线采集方案。在方圆1km的区域,连接400块电表。基于国网电表通信协议,响应时间要求小于10秒。需要和某电表通信时先广播该电表号和请求命令,约20字节;对应表号的电表根据命令发送回复帧,约100字节;非该表号的电表不予回应。通信拓扑如下图所示提取需求
因素指标
距离1000米,墙壁、门等会造成信号衰减
带宽纯负载带宽:(20 * 8 + 100 * ...
了解详情

LoRa组网案例4:无线水表,上报+唤醒

案例背景水表无线集抄具备很多好处:容易施工、缴费便捷、方便查询等。长期以来困扰该方案的是,既要长距离通信,又要低功耗以延长电池使用寿命。现在,LoRa无线可以解决该难题。以32层高,每层4户为例,集抄128支水表;每15分钟抄读约10字节用水数据;10秒内能控制任意表计开阀(2字节,欠费停水,续费使用)。提取需求
因素指标
距离层高可达32楼,墙壁和门等会造成信号衰减
带宽纯负载带宽:(128 * 10 * 8...
了解详情

LoRa组网案例3:智能温控,上报+唤醒

案例背景舒适的温度可以提高人们的工作效率,一般办公楼都配置中央空调,如此一来,一方面保证温度合适,另一方面需要节能减排。可以设计一个智能温控系统,在办公区域布置100个温湿度传感器,温湿度值为8字节,每5分钟自动调节中央空调的温控功率。提取需求
因素指标
距离方圆500米,层高可达36楼,墙壁和门等会造成信号衰减
带宽纯负载带宽:(100 * 8 * 8 + 10 *8) bit / (5 * 60) s =2...
了解详情

LoRa组网案例2:控制路灯,唤醒下发

案例背景现代城市,一般在马路的两侧每30米布置一盏路灯,对路灯的控制包括开关:灵活地对“全部 / 部分 / 单盏”路灯进行开启和关闭;策略:根据昼夜长短、天色亮暗、车行人多寡和节假日,调节亮度。上述控制数据不超过10字节,要求在5秒钟内路灯做出响应,单个子网覆盖6km。提取需求
因素指标
距离3000米,城市高楼会造成信号衰减
带宽纯负载带宽:(10 * 8bit) / 5s=16bps,属于超低带宽要求
功耗严格,路灯有市电供应,但数量庞大,节能意义十分重大...
了解详情

LoRa组网案例1:温度采集,主动上报

案例背景一方圆500米的冶炼厂,需要将窑温控制在1200摄氏度,为此设计一个自动测温与添料系统:布置100个温度监测点,温度值为4字节,每5分钟采集一轮,电池供电。使用无线系统将温度值传输到服务器,计算并控制添加燃料的数量。提取需求
因素指标
距离约500米,有少许障碍物,有电磁干扰
带宽纯负载带宽:(100 * 4 * 8bit) / (5 * 60s)=11bps,属于超低带宽要求
功耗苛刻,电池供电,非采集时段要求休眠节能...
了解详情

锐米通信:如何规划中小型LoRa物联网系统

1 背景概述无线通信技术在物联网应用中大致分为三大阵营,它们的特征如下表所示
无线技术市场份额适合场景不适合
2G/3G/410长距离,高速率电池供电,低价格
WiFi/ZigBee/B35短距离,室内通信电池供电,长距离
LoRa等55长距离,低价格,低功耗高速率
LoRa以其“一长三低”(长距离,低功耗,低价格,低速率)的特点,特别适应大量的物联网需求:表计集抄、资产管理、环境监测等场合。本...了解详情

动手演练:通过LoRaWAN将数据从节点发布到后端服务器

在本视频教程中,Andri向我们介绍了利用LoRaWAN协议的LoRa通信的用例。 我们将学习如何通过网关从节点到后端发布数据。使用的节点是通过Raspberry Pi Hat网关运行的ESP8266微控制器和RFM95W LoRa收发器。 数据被发布到云中的服务器。马上享受快乐动手实验吧相关资料使用https://github.com/andriyadi/single_chan_pkt_fwdhttp://cloud.makestro.com上的云软件,以及如何准备使用的硬件。RFM95W收发器:http://www.hoperf.com/rf_transceiver/lora/RFM95W.htmlESP8266微控制器:https://shop.makestro.com/product/espectro-core/LoRa Raspberry Pi Hat:https://shop.makestro.com/product/lora-arduino-raspberry-pi-hat/学习小组招募:喜欢动手的程序猿们喜大普奔时刻来临了!来临了!来临了!来自安爵士亲手制作的有关LoRa网关、终端等硬件开发系列学习视频登陆LoRa学习站,英文好的同学们可以先睹为快了,如果你英文足够好,又有兴趣参与LoRa学习资料翻译组,欢迎注册我们的网站会员并留言“加入学习视频翻译”。了解详情

LoRa无线技术在物联网中的应用

LoRa是低功耗广域网通信技术中的一种,是物理层或无线调制用于建立长距离通信链路。许多传统的无线系统使用频移键控(FSK)调制作为物理层,因为它是一种实现低功耗的非常有效的调制。LoRa是基于线性调频扩频调制,它保持了像FSK调制相同的低功耗特性,但明显地增加了通信距离。LoRa的优势在于技术方面的长距离能力。单个网关或基站可以覆盖整个城市或数百平方公里范围。在一个给定的位置,距离在很大程度上取决...了解详情

LoRa路测(二):山区测试

在上一篇文章中,AUGTEK介绍了城市路由网关在城市密集区的测试:通过在建筑密集的城区布置一台网关就可以很好地覆盖半径5KM左右的城区,为该区域的智慧城市业务提供基础网络。今天AUGTEK继续放大招,带您看AUGTEK 网关在山区的覆盖效果到底如何! 这一次,我们的测试地点是重庆某AAAAA级风景区。高山峡谷,峦峰林海,大家随意感受下。在这样地形复杂的山区环境中,网络覆盖是比较棘手的问题,运营商网络虽能大致覆盖,但盲区多、局部弱覆盖、信号不稳定等问题仍无法忽视。此次测试的路线由客户规划,路线所在区域为运营商网络信号覆盖薄弱区,无线通讯困难,其他无线通讯难以覆盖,故客户拟采用LoRa技术进行测试。测试地实景图AUGTEK为测试高山、峡谷、多弯道以及多障碍物遮挡情况下AUGTEK网关的覆盖效果、信号质量及传输距离,在重庆山区展开了我们的测试。测试地带海拔约为1100m-1500m、地形复杂(可见如下等高图),可以很好的模拟部分山区应用场景, 为一些特殊环境的应用如森林防火、智慧农业、智慧林业、山区人员定位等提供一定的参考。测试地等高图AUGTEK的小伙伴经过实地考察后,将AUGTEK第一代网关架设在约1400m的山头铁塔上。其中蓝色星星代表网关架设地,蓝色线条表示测试路线。由于部分道路不通,AUGTEK小伙伴手持移动测试终端在部分路段乘坐汽车测试,在部分路段步行测试,故而测试点密集程度不一,分布情况不规律。本次测试网关发射功率为17dBm(50mW),SF值为12。测试路线图手持式移动测试终端内含Genie 模块与GPS定位模块,通电开启后即可在屏幕上显示信号强度(RSSI)、信噪比(SNR)和GPS坐标等数据。我们的测试小伙伴兵分几路,沿着规划好的路线一路测试。AUGTEK的测试工程师将回传的数据进行整合处理,可以得到如下的信号强度覆盖图,其中蓝色星星为网关架设地,红色散点为测试点,标签为各散点的RSSI值。对本次试点信号进行统计,有 83.5%的采样点信号均大于-130dBm,可知由于LoRa有着极低的接受灵敏度,即使在如此恶劣的环境下(其他传统的无线技术已经无法通讯),AUGTEK的无线传输方案也能较好的对其覆盖,并能稳定工作,满足客户数据采集等通讯需要。RSSI覆盖图及统计图AUGTEK网关在高山、峡谷地形的衍射、反射能力较强,覆盖效果良好。在多网关部署的情况下,对盲区会有很好补充覆盖效果。即使在山区,AUGTEK网关的平均覆盖距离也能保障在5KM左右。AUGTEK EVK开发套件正在热销中,详情可见AUGTEK网上商城或在菜单栏【产品资料】联系我们。AUGTEK致力于为贵公司提供运营商级别的LPWAN全套解决方案与LoRa产品。了解详情

LoRa路测(一):城市密集区测试

路测(Drive Test,DT)是无线网络优化的重要组成部分,是通信行业中对道路无线信号的一种最常用的测试方法。为提高测试效率,一般测试人员都是坐在汽车中,用专业的测试仪表对整个路段进行测试。AUGTEK的路测小伙伴选取了国内比较典型的一些场景:住宅小区(城市密集区)、郊区、山区来进行测试,向大家展示不同环境下LoRa技术的覆盖效果。在本文中,我们使用手持式移动测试工具,在南京市一成熟小区(城市...了解详情