LoRaWAN协议解析 第4章 MAC帧格式

1 前言我正在陆续对《LoRaWAN102》即LoRaWAN协议规范 V1.0.2 版本(2016年7月定稿)协议的各个章节进行翻译。译文之外还对LoRaWAN协议和源码进行了解析,可点此查看帖子LoRa学习笔记_汇总。欢迎同行朋友们留言交流。本文作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/2 梳理解析LoRaWAN第4章,主要讲述了MAC帧格式,对所有涉及的字段都做了解释。千言万语汇成一句话,哦不,汇成一个表。
数据帧头DevAddFCtrFCnFOpt
数据帧PreamblPHDPHDR_CRMHDFHDFPorFRMPayloaMICR
MAC层PreamblPHDPHDR_CRMHD...
了解详情

LoRa天线电路设计四大要点

随着LoRa技术在业内的持续发热,加上其独特优越的传输性能,运用LoRa技术的群体正在爆发式的增长,由于很大部分群体对LoRa等射频技术均是初次接触,在做产品的过程中,通常会遇到棘手的射频电路设计问题,其实只要掌握几大要点,就基本可以发挥LoRa的最佳性能。要点一、匹配电路设计在原理图设计时,需要在天线接头与模块的天线引脚之间预留一个π型匹配电路。天线的阻抗是受到电路板的铺地、外壳和安装角度等因素...了解详情

LoRaWAN实战 LinkADR命令的源码分析

前言LinkADR是LoRaWAN网络管理中相当重要的一个MAC命令,其解析占用了183行。索性专门写篇源码解析,记录下。阅读此文前,最好再把第五章的这个命令好好翻一翻,代码和协议才能对应上。我正在陆续对协议的各个章节进行翻译,具体其他章节的译文,以及译文之外的代码解析,可点此查看帖子LoRa学习笔记_汇总。本文作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/LinkADRReq 的源码解析按照代码思路走一遍。1.解析 DataRate_TXPower 字段datarate = payload[macIndex++];txPower = datarate & 0x0F;datarate = ( datarate >> 4 ) & 0x0F;if( ( AdrCtrlOn == false ) &&( ( LoRaMacParams.ChannelsDatarate != datarate ) || ( LoRaMacParams.ChannelsTxPower != txPower ) ) ){ // ADR disabled don't handle ADR requests if server tries to change datarate or txpower// Answer the server with fail status// Power ACK = 0// Data rate ACK = 0// Channel mask = 0AddMacCommand( MOTE_MAC_LINK_ADR_ANS, 0, 0 );macIndex += 3; // Skip over the remaining bytes of the requestbreak;}如果终端ADR没开,那么就立即丢弃本命令处理。这里的macIndex += 3是对应LinkADRReq的剩余命令长度3而言的。2.解析 ChMask 字段chMask = ( uint16_t )payload[macIndex++];chMask |= ( uint16_t )payload[macIndex++] << 8;3.解析 Redundancy 字段nbRep = payload[macIndex++];chMaskCntl = ( nbRep >> 4 ) & 0x07;nbRep &= 0x0F;if( nbRep == 0 ){nbRep = 1;}把字段中的 chMaskCntl 和 nbRep 都给解析了出来。4.按地区规定处理 chMaskCntl ,及判断 ChMask 有效性#elif defined( USE_BAND_470 )if( chMaskCntl == 6 ){// Enable all 125 kHz channelsfor( uint8_t i = 0, k = 0; i < LORA_MAX_NB_CHANNELS; i += 16, k++ ){for( uint8_t j = 0; j < 16; j++ ){if( Channels[i + j].Frequency != 0 ){channelsMask[k] |= 1 << j;}}}}else if( chMaskCntl == 7 ){status &= 0xFE; // Channel mask KO}else{for( uint8_t i = 0; i < 16; i++ ){if( ( ( chMask & ( 1 << i ) ) != 0 ) &&( Channels[chMaskCntl * 16 + i].Frequency == 0 ) ){// Trying to enable an undefined channelstatus &= 0xFE; // Channel mask KO}}channelsMask[chMaskCntl] = chMask;}如果 chMaskCntl 为6,则所有信道都使能。如果 chMaskCntl 为7,则由于未定义返回失败。其他有效 chMaskCntl 情况下,先检查是否有未定义的频点,如果没问题则更新对应的channelsMask。5.判断速率有效性if( ValidateDatarate( datarate, channelsMask ) == false ){status &= 0xFD; // Datarate KO}6.判断发射功率有效性if( ValueInRange( txPower, LORAMAC_MAX_TX_POWER, LORAMAC_MIN_TX_POWER ) == false ){status &= 0xFB; // TxPower KO}7.全部判断通过后更新参数if( ( status & 0x07 ) == 0x07 ){LoRaMacParams.ChannelsDatarate = datarate;LoRaMacParams.ChannelsTxPower = txPower;memcpy1( ( uint8_t* )LoRaMacParams.ChannelsMask, ( uint8_t* )channelsMask, sizeof( LoRaMacParams.ChannelsMask ) );LoRaMacParams.ChannelsNbRep = nbRep;}8.回复MAC命令 LinkADRAnsAddMacCommand( MOTE_MAC_LINK_ADR_ANS, status, 0 );突然发现 AddMacCommand 的形参只有CID加2字节的回复,我是太无聊,把终端所有MAC命令都翻了一遍,确认所有payload确实是小于2字节。再次赞扬LoRaWAN协议的精简作风。End了解详情

唯传LoRa网关路由器测试结果惊人,稳定传输可达21.5公里

近日,唯传科技应客户需求,对GW500网关路由器(城市级)进行了长距离测试。因客户所处区域在戈壁滩上,准备在20 公里范围内安装1200个探测设备,选用基站进行远距离数据监测和传输。考虑到客户实际需求,唯传决定在深圳区域寻找大范围空旷地带模拟客户需求环境进行现场测试。此前半年,唯传也已经多次进行LoRa最大空空通讯距离的测试,测试结果得到了Semtech公司的高度认可。7月29日,唯传公司将GW5000网关路由器部署在南山高山上空旷的观景台,此处海拔约287米。节点随车在广深沿江高速上从前海往东莞虎门方向移动进行空空地距离测试。Semtech公司称:在最佳环境下,LoRa的最大空空通信距离可达15公里。这次测试中,唯传的测试使用LoRaWAN的参数(带宽=125kHz,编码率=4/5,扩频因子=12,约300bps),因为470M频段有使用限制,网关发射功率选择17dBm。图为唯传公司研发的GW5000网关路由器(城市级)1、测试地区概貌如图所示,本次LoRa空空平行可视距离测试区域的概貌。首先将发射模块放置在起点位置,在平行可视距离范围内,测试人员坐车从前海向宝安西乡出发,分别在坪洲新村附近(8.5公里)、福永码头附近(15.1公里)、广深沿江高速S3(21.5公里)、东宝河大桥(31.5公里)等进行通讯测试。测试起点位于深圳南山的观景台上,其他测试点和起点之间很空旷,有少量建筑物。测试人员从南山观景台出发,走广深沿江高速往虎门方向进行测试2、测试方法我们使用公司研发的无线通信模块。网关和节点的通信数据为LoRaWAN的数据,节点入网时候是23个字节,正常通信时是13个字节,设置节点LoRaWAN确认信息为true,入网后每隔5秒发送一个数据包,节点收到确认帧后,红色LED闪烁,同时还接串口线,查看当时收到数据包的信号强度;网关使用8dBm的天线,频率476.5M,发射功率设置17dBm。我们把发射器放置在南山观景台上。如下图所示,拿接收器沿广深沿江高速朝西乡方向前行,通过接口观看设备的数据,可以看出有没有接收到数据。测试人员手拿接收器来查看信号强度3、测试结果坪洲新村附近(8.5公里):此时,接收模块的测试人员随车前行,离发射的南山观景台约8.5公里。网关、节点正常收发,接收成功率高,信号稳定,无丢包,中间穿过路基旁边低矮的树丛等障碍物时,不影响任何接收信号。福永码头附近(15.1公里):此时,接收模块的测试人员离发射观景台约15.1公里,在实际环境中,与Semtech公司所称LoRa的最大空空通信距离接近,和理论值基本接近。这时,网关、节点正常收发,非常稳定。广深沿江高速S3(21.5公里):此时,接收模块的测试人员离发射观景台已经很远,超出LoRa理论最大空空通讯距离,网关、节点偶有丢包。因客户所在环境很空旷,无障碍物,不会对人类生活区造成影响,按照客户需求提高网关的发射功率到20dBm,则无丢包。东宝河大桥(31.5公里):为了测试LoRa最远信号距离,测试人员继续前行,直到离发射观景台约31.5公里,进入东莞地区,丢包严重。此时,将发射功率调整到27dBm后,继续测试,偶尔仍能收到通信数据。工作人员沿途选取不同距离进行数据传输稳定性测试4、测试总结通过此次测试,首先证明了LoRa无线超长的通信距离,这对于物联网建设将是一个很大的应用场景。其次,唯传公司产品已接近LoRa的最大空空通信距离,在无障碍物的最佳环境下,发射功率为17dBm时,可达15公里;发射功率为20dBm时,可达20公里,进一步验证了LoRa技术的优势。了解详情

花费200欧元打造自己的LoRa网关

本文来源https://github.com/isiot/diy_LoRa_gateway本教程介绍一个便宜的LoRa网关的制作步骤,然后让节点、网关和云在一起运行。注:本文仅翻译自github,并未亲测part1硬件选择我要介绍的LoRa网关,运行在sx1301之上,该芯片不能单独出售,只出售给符合条件的客户。唯一的办法就是购买一个成品的网关板。目前市场基于sx1301的LoRa网关板有:Semtech LoRa物联网入门套件,只出售给符合条件的客户IMST iC880A,约189欧元:Multitech mCard-LoRa, 约156欧元:Link Labs LoRaWAN Raspberry Pi(树莓蒎) Gateway Board, 225美元:Cisco LoRa card, sold with Cisco IR900 router only(思科LoRa板卡,只提供思科IR900路由器):只有Multitech mCard-LoRa符合我们的预算,而剩下的其他硬件就很便宜了。mCard LoRa是一个为Multitech MultiConnect Conduit router定制的插件板,这个Mini-PCIe card没有使用文档可以提供,因为它是即插即用的。但是如果我们想把用它在其他的硬件环境下,我们应该对它进行逆向拆解。余下的硬件则需要一个嵌入式Linux主机像Raspberry Pi,25欧元:以及一个 USB to Mini-PCIe转换器, 5欧元:对了,别忘了还有电源适配器、电缆和天线。进入第2部分我们将探讨对mCard LoRa硬件上的修改。part2硬件改造mCard LoRa是一个Mini-PCIe规格的板卡。包含有一个sx1301基带芯片和两个sx1257 I/Q调制收发器(1 TX 2 RX) ,都集成在一个很小的板上。图中,射频链用蓝色线画出,包含发送通道上的“平衡-不平衡转换器”BALUN,声表面波滤波器saw,功率放大器PA,滤波器和开关接收通道上的声表面波滤波器saw,低噪声放大器LNA,声表面波滤波器saw在另一层有一个FTDI SPI转USB转换器FT232,以及一些电源芯片请看USB转Mini-PCIe板卡的电源引脚,GND引脚连接到地,3.3V的电源引脚(2,24,52)连接到了一些电源芯片的输入上(用于为数字部分供电)。但是为模拟部分供电的电源芯片的输入接到了引脚23和25。3个LDO器件lp38502sd-adj用于模拟供电并调整到3.3V输出,所以它们 的输入电压应该大于3.52v,因为它们工作时的最小压差是220mv,总之,我决定为迷你PCIe连接器的23和25脚提供5V电压,这个5V电压从 USB接口处取得。我推荐你使用一个质量好的USB接口供电.树莓蒎2有USB电流限制以防止集线器启动,可以修改启动文件/boot/config.txt,增加max_usb_current = 1来增大USB电流。part3软件编译Raspberry Pi足够强大,Raspbian(Raspbian,树莓派自带的基于debian的OS)系统自带了GCC,Git…这样我们就可以在Raspberry Pi里面进行软件编译,而不需要在桌面PC上编译后上传二进制文件到Raspberry Pi。打开一个控制台或SSH会话,默认的用户名是“pi”和密码“raspberry”。首先我们需要FTDI芯片FT232HQ的驱动(libmpsse.so),不要试图在网上找到它,因为它是依赖于平台的,所以最好是从源码编译:sudo apt-get updatesudo apt-get install git --assume-yessudo apt-get install libftdi-dev --assume-yescd ~wget https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/libmpsse/libmpsse-1.3.tar.gztar zxvf libmpsse-1.3.tar.gzcd libmpsse-1.3/src./configure --prefix=/usr --disable-pythonmakesudo make installcd /etc/udev/rules.dsudo wget https://raw.githubusercontent.com/mirakonta/lora_gateway/master/libloragw/99-libftdi.rulessudo udevadm control --reload-rulessudo udevadm triggersudo adduser pi plugdevcd ~现在我们可以继续关于LoRa网关的部分了:下载源代码和编译,一旦完成编译,就把他们复制到 ~/lora/exec:mkdir ~/loracd ~/loramkdir execgit clone https://github.com/mirakonta/lora_gateway.gitgit clone https://github.com/mirakonta/packet_forwarder.gitcd ~/lora/lora_gatewaymake clean allcd ~/lora/packet_forwardermake clean allcp ~/lora/packet_forwarder/basic_pkt_fwd/basic_pkt_fwd ~/lora/exec/cp ~/lora/packet_forwarder/gps_pkt_fwd/gps_pkt_fwd ~/lora/exec/cp ~/lora/packet_forwarder/gps_pkt_fwd/global_conf.json ~/lora/exec/cd ~/lora/exec最后,我们执行的LoRa gateway:sudo ./gps_pkt_fwd本节我使用了这些链接作为参考资料:https://github.com/Lora-net/lora_gateway/blob/v3.1.0/libloragw/install_ftdi.txthttps://github.com/Lora-net/packet_forwarder/wiki/Use-with-Raspberry-Pipart4软件修改LoRa网关的软件部分本来应该做适当修改再进行编译的,但本教程第3部分用来编译的代码是我从原始lora_gateway代码fork的一个分支并做了必要的修改,所以你不需要修改任何文件如果你想知道我所做的修改,请阅读下文并查看我提交的commits。我第一次编译时,软件并没有运行起来,我意识到USB驱动没有被识别,因为我手上的mCard与LoRa开发套件(即与 https://github.com/Lora-net/lora_gateway 配套的套件)使用了不同的FTDI USB to SPI转换芯片FT232H,每个FT232H都有不同的PID(Product IDentification),我修改了源文件中的以下文件:loragw_spi.ftdi.c/* parameters for a FT232H */#define VID 0x0403#define PID 0x601099-libftdi.rules# FTDI Devices: FT2232HSUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", MODE="0664", GROUP="plugdev"为了使用FTDI SPI,我们必须做以下修改library.cfgCFG_SPI= ftdi现在,板子可以被正确识别但是还不能与SX1301通信,因为板子还处于复位状态,复位引脚是由主机通过FTDI的GPIO引脚来控制的,修改以下文件:loragw_spi.ftdi.c/* toggle pin ADBUS5 of the FT232H *//* On the MTAC-LORA, it resets the SX1301 */a = PinLow(mpsse, GPIOL1);b = PinHigh(mpsse, GPIOL1);现在sx1301似乎开始工作但没有读寄存器,这是因为sx1301没有时钟源,两个sx1257通过共享的TCXO进行时钟驱动,sx1257具有时钟输出,用于驱动sx1301时钟, 查看schematic的文档,我发现是radio_0的时钟输出而不是radio_1的被连接到了sx1301的时钟输入,所以修改以下文件:global_conf.json"clksrc": 0, /* radio_0 provides clock to concentrator */完工!!!Note:写完本教程以后,MultiTech公开发布了具有相同补丁的的GIT库文件,地址在http://git.multitech.net/cgi-bin/cgit.cgi/lora_gateway.git/commit/?h=1.7.0-mts了解详情

LoRaWAN stack移植笔记(六)_调试2

前言调试的过程中碰到的问题基本都是以前没有遇到过的,而且需要对整个协议栈及射频方面的工作流程较熟悉才能找到问题的原因,需要多读SX1276的数据手册以及与射频芯片的物理层通信例程和MAC层通信例程进行对比相结合。正文发送失败LoRa 模块在进行 模式切换时,比如TX 切换到RX模式,需要先将设备切换到standby模式CRC 校验失败,然后程序陷入死循环按逻辑来讲,CRC校验失败,应该进行的操作是...了解详情

LoRaWAN stack移植笔记(五)__调试1

先废话一小段在将LoRaWAN的程序移植的过程中,调试发现了很多的问题。做好记录工作,防止以后再踩坑移植使用的是LoRaMac-node库,使用的是STM32L151CBT6 MCU,需要要移植到STM32L051C8T6 这个MCU上面。开始正文JLink的配置由于第一次使用JLink(SWD方式),在一开始使用时,踩了几处坑:KEIL选择JLINK之后,点击设置进入,会出现一个对话框,要选择NOKEIL里面JLINK的 方式要选择SW,不然认不到芯片Flash download要选择对应大小的芯片,注意Flash的大小要选择正确程序无法进入main,甚至一个函数都没有跑当配置完JLink之后,程序可以正常烧写调试了,但是问题又出现了,无法跑进main函数,再进一步调试,发现来一个函数都没有执行,直接就进入进入死循环了(通过单步调试看上面的汇编代码)。这个现象就很奇怪了,以前也没有碰到过。因为3.3V和GND是正常的,这样就算晶振有问题,也会执行程序到配置晶振才会出问题,而不是一句函数都没有执行。后来顿悟,大概是BOOT0没接,仔细一看原理图,果然BOOT0是悬空的,飞线焊上之后,问题终于得到了解决。NOTE:画原理图时一定要主要,BOOT0一定要接地,这样程序才能正常从FLASH启动RTC定时链表的配置官方的库中使用了RTC来作为定时器来处理一些定时的事件,这也是库中唯一的任务调度机制。所以保证这个机制的正常运行非常重要。但是,当我把一切参数都配置完成之后,却发现,RTC的定时器不听使唤,经常不进入中断,初步诊断是写入寄存器的定时时间出了问题,但是却找不到出问题的原因。这个问题也是非常的诡异,至今还未发现原因。但是在一次偶然的调试中,我将原本处于static void RtcStartWakeUpAlarm( uint32_t timeoutValue )这个函数中的RtcCalendar_t now;RtcCalendar_t alarmTimer;RTC_AlarmTypeDef alarmStructure;这三个变量由局部变量改为了全局变量,问题就得到了解决。但是原因还未发现。原本以为是变量未赋初值就使用,但是程序中都有在使用前赋初值,具体原因不明。程序进入Default_handler在调试程序的时候,程序又出现跑死的情况,然后单步调试发现程序进入了Default_handler这里,始终无法跑出来。然后通过搜索得知,进入这里的情况应该是发生了中断但是没有处理,然后程序一直进入中断。后来查看代码发现,由于Cotex-M3和cotex-M0的核,对GPIO的中断的入口是不一样的,在移植时需要做修改,在做了修改之后,程序终于跑正常了。无法点对点通信需要注意的是,点对点通信中,能够建立条件需要两个点的通信参数配置成相同。特别注意的是iqInverted preamble SYNCWORDnote:1. 如果发射方使能了iqInverted,那么接收方也要使能iqInverted2. 接收方的preambleLen必须设置大于发射方,否则有很大可能接收不到(偶尔可以收到,但是接收成功率很低)3. 发射方和接收方的SYNCWORD必须设置一样(同步字一样),否则认为是不同网络接收机在接收检测时,会先检测前导码的长度,小于设置的最大接收长度时再检测同步字的内容,看是否一致,都符合时,才会接收负载的内容。邮箱地址:454626653@qq.com 欢迎咨询搭讪了解详情

LoRaWAN_stack移植笔记(四)__RTC

stm32相关的配置由于例程使用的主控芯片为STM32L151C8T6,而在本设计中使用的主控芯片为STM32L051C8T6,内核不一样,并且Cube库相关的函数接口及配置也会有不同,所以芯片的驱动所以做修改。RTC 的配置此例程中,RTC被当做定时器使用,用于定时执行任务。例程中,RTC使用外部LSE的32.768Khz的晶振作为时钟源而在本设计中,使用内部LSI作为RTC的时钟源,需要重新...了解详情

LoRaWAN_stack移植笔记(三)__SPI

stm32相关的配置由于例程使用的主控芯片为STM32L151C8T6,而在本设计中使用的主控芯片为STM32L051C8T6,内核不一样,并且Cube库相关的函数接口及配置也会有不同,所以芯片的驱动所以做修改。SPI 的配置SPI使用的是STM32的硬件接口-SPI1 MOSI MIS可以看到例程中,对SPI接口进行了再一层的封装,封装如下其中是原先的STM32Cube库的封装,在此基础上...了解详情

LoRaWAN_stack移植笔记(一)–RF硬件相关

和硬件相关的问题TCXO 的使用根据SX1276数据手册如果使用TCXO,则需要配置RegTcxo寄存器为0x19,代码如下否则配置为0x09,因为芯片上电默认不使用TCXO,即上电寄存器值即为0x09,所以无需配置PA_BOOST 引脚的使用根据sx1276 数据手册如果使用PA_BOOST作为RF输出,则需要配置PaSelect脚为RXTX switch(接收和发送的天线电路的切换在图中...了解详情

LoRaWAN_stack移植笔记 (二)_GPIO

stm32相关的配置由于例程使用的主控芯片为STM32L151C8T6,而在本设计中使用的主控芯片为STM32L051C8T6,内核不一样,并且Cube库相关的函数接口及配置也会有不同,所以芯片的驱动所以做修改。另外例程中对STM32库函数的再一次封装的方法也非常值得学习。GPIO 的配置例程中可以看到,对IO口的初始化只有这一句,是因为例程中对GPIO的操作进行了封装,方便了上层的使用。例程中使用Enum定义了64个IO口,其中...了解详情

LoRaWAN实战 中国470频段的代码实现

前言在LoRaWAN协议中文版_配套文件 地区参数(物理层)中已经为中国规划了470频段,因此国内开发者对此需求很强烈。在最新(2017-02-27)的V4.3.1版本协议栈上已经新增了中国470频段。这篇文章从源码角度解析下其实现方式。目前国内的LoRaWAN基站产品都和标准有一些不同,比如CLAA等,所以搞清楚整个代码实现还是很有必要的。只要熟悉了整个流程,对接任何一个基站都不是难事。我正在陆续对协议的各个章节进行翻译,具体其他章节的译文,以及译文之外的代码解析,可点此查看帖子LoRa学习笔记_汇总。本文作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/源码解析1.前导码格式的源码实现同步字的处理在SX1276的驱动中:void SX1276SetPublicNetwork( bool enable ){SX1276SetModem( MODEM_LORA );if( enable == true ){// Change LoRa modem SyncWordSX1276Write( REG_LR_SYNCWORD, LORA_MAC_PUBLIC_SYNCWORD );}else{// Change LoRa modem SyncWordSX1276Write( REG_LR_SYNCWORD, LORA_MAC_PRIVATE_SYNCWORD );}}而前导码长度则是在每次SetTxConfig和SetRxConfig时配置进去。2.信道频率的源码实现先说上行信道的处理。第一步,初始化时把所有信道6*16=96个上行信道都使能了。LoRaMacParamsDefaults.ChannelsMask[0] = 0xFFFF;LoRaMacParamsDefaults.ChannelsMask[1] = 0xFFFF;LoRaMacParamsDefaults.ChannelsMask[2] = 0xFFFF;LoRaMacParamsDefaults.ChannelsMask[3] = 0xFFFF;LoRaMacParamsDefaults.ChannelsMask[4] = 0xFFFF;LoRaMacParamsDefaults.ChannelsMask[5] = 0xFFFF;第二步,紧接着把96个信道的频点赋值一遍。for( uint8_t i = 0; i < LORA_MAX_NB_CHANNELS; i++ ){Channels[i].Frequency = 470.3e6 + i * 200e3;Channels[i].DrRange.Value = ( DR_5 << 4 ) | DR_0;Channels[i].Band = 0;}第三步,发送时在SetNextChannel中选择合适的频点,默认是96个信道中随机选择。Channel = enabledChannels[randr( 0, nbEnabledChannels - 1 )];这上面是上行信道处理三部曲,下行信道处理则轻松多了。主要是配合接收窗口处理,由这个宏定义了下行的起始频点。具体可以看下面第7点。#define LORAMAC_FIRST_RX1_CHANNEL ( (uint32_t) 500.3e6 )3.数据速率和节点发射功率编码速率编码如下:const uint8_t Datarates[] = { 12, 11, 10, 9, 8, 7 };发射功率编码如下:const int8_t TxPowers[] = { 17, 16, 14, 12, 10, 7, 5, 2 };速率范围如下:/*!* Minimal datarate that can be used by the node*/#define LORAMAC_TX_MIN_DATARATE DR_0/*!* Maximal datarate that can be used by the node*/#define LORAMAC_TX_MAX_DATARATE DR_5/*!* Minimal datarate that can be used by the node*/#define LORAMAC_RX_MIN_DATARATE DR_0/*!* Maximal datarate that can be used by the node*/#define LORAMAC_RX_MAX_DATARATE DR_5/*!* Default datarate used by the node*/#define LORAMAC_DEFAULT_DATARATE DR_0发射功率范围如下:/*!* Minimal Tx output power that can be used by the node*/#define LORAMAC_MIN_TX_POWER TX_POWER_2_DBM/*!* Maximal Tx output power that can be used by the node*/#define LORAMAC_MAX_TX_POWER TX_POWER_17_DBM/*!* Default Tx output power used by the node*/#define LORAMAC_DEFAULT_TX_POWER TX_POWER_14_DBM4.CFList中国没有。具体见OnRadioRxDone中的FRAME_TYPE_JOIN_ACCEPT分支。5.LinkAdrReq命令对于 ChMaskCntl 的处理都在 ProcessMacCommands() 的 SRV_MAC_LINK_ADR_REQ 分支中。小彩蛋一个:你发现没,注释里写着Channel mask KO。不知是djaeckle (loramac-node的作者之一)调皮,还是语言习惯如此。if( chMaskCntl == 6 ){// Enable all 125 kHz channelsfor( uint8_t i = 0, k = 0; i < LORA_MAX_NB_CHANNELS; i += 16, k++ ){for( uint8_t j = 0; j < 16; j++ ){if( Channels[i + j].Frequency != 0 ){channelsMask[k] |= 1 << j;}}}}else if( chMaskCntl == 7 ){status &= 0xFE; // Channel mask KO}else{for( uint8_t i = 0; i < 16; i++ ){if( ( ( chMask & ( 1 << i ) ) != 0 ) &&( Channels[chMaskCntl * 16 + i].Frequency == 0 ) ){// Trying to enable an undefined channelstatus &= 0xFE; // Channel mask KO}}channelsMask[chMaskCntl] = chMask;}6.最大载荷长度/*!* Maximum payload with respect to the datarate index. Cannot operate with repeater.*/const uint8_t MaxPayloadOfDatarate[] = { 51, 51, 51, 115, 222, 222 };/*!* Maximum payload with respect to the datarate index. Can operate with repeater.*/const uint8_t MaxPayloadOfDatarateRepeater[] = { 51, 51, 51, 115, 222, 222 };这在RxWindowSetup()进行处理,调用了最终的驱动函数。if( RepeaterSupport == true ){Radio.SetMaxPayloadLength( modem, MaxPayloadOfDatarateRepeater[datarate] + LORA_MAC_FRMPAYLOAD_OVERHEAD );}else{Radio.SetMaxPayloadLength( modem, MaxPayloadOfDatarate[datarate] + LORA_MAC_FRMPAYLOAD_OVERHEAD );}7.接收窗口处理。RX1的处理在OnRxWindow1TimerEvent()中,满足协议要求。RxWindowSetup( LORAMAC_FIRST_RX1_CHANNEL + ( Channel % 48 ) * LORAMAC_STEPWIDTH_RX1_CHANNEL, datarate, bandwidth, symbTimeout, false );RX2的默认参数见如下宏:#define RX_WND_2_CHANNEL { 505300000, DR_0 }RX2的处理在OnRxWindow2TimerEvent()中:if( RxWindowSetup( LoRaMacParams.Rx2Channel.Frequency, LoRaMacParams.Rx2Channel.Datarate, bandwidth, symbTimeout, rxContinuousMode ) == true ){RxSlot = 1;}速率偏移处理如下:datarate = LoRaMacParams.ChannelsDatarate - LoRaMacParams.Rx1DrOffset;if( datarate < 0 ){datarate = DR_0;}8.默认设置目前基本各地区的参数都一样,因此协议栈也是直接共用如下参数:/*!* Class A&B receive delay 1 in ms*/#define RECEIVE_DELAY1 1000/*!* Class A&B receive delay 2 in ms*/#define RECEIVE_DELAY2 2000/*!* Join accept receive delay 1 in ms*/#define JOIN_ACCEPT_DELAY1 5000/*!* Join accept receive delay 2 in ms*/#define JOIN_ACCEPT_DELAY2 6000/*!* Class A&B maximum receive window delay in ms*/#define MAX_RX_WINDOW 3000/*!* Maximum allowed gap for the FCNT field*/#define MAX_FCNT_GAP 16384/*!* ADR acknowledgement counter limit*/#define ADR_ACK_LIMIT 64/*!* Number of ADR acknowledgement requests before returning to default datarate*/#define ADR_ACK_DELAY 32/*!* Number of seconds after the start of the second reception window without* receiving an acknowledge.* AckTimeout = \ref ACK_TIMEOUT + Random( -\ref ACK_TIMEOUT_RND, \ref ACK_TIMEOUT_RND )*/#define ACK_TIMEOUT 2000/*!* Random number of seconds after the start of the second reception window without* receiving an acknowledge* AckTimeout = \ref ACK_TIMEOUT + Random( -\ref ACK_TIMEOUT_RND, \ref ACK_TIMEOUT_RND )*/#define ACK_TIMEOUT_RND 1000End了解详情

基于Semtech SX1276/SX1278 LoRa的智能酒店门禁方案

SX1276/SX1278智能酒店门禁方案,智能酒店系统摆脱了传统意义上的单独智能系统,将照明系统、智能场景、影音系统、音乐系统、智能云端集中控制系统完美融合,从实现了真正意义上的智慧酒店,让每一位入住酒店的客户享受轻松便捷的生活。替换原来的机械开关,电工轻松搞定。按照说明书即可组网调试,用户自己DIY控制。方便扩展及升级功能,用户可随时增添控制设备。无需专业的技术工程师保障后期系统正常运行该系统提供了安卓& IO...了解详情

为Arduino模拟量传感器添加物联App功能

Karlno从网上淘了两个Arduino传感器,一个光照强度,一个土壤湿度,输出都是模拟量电压的,因为万纳模块有ADC输入功能,于是不需编程,将他们很方便的接到了酷享系统里。【图】光照强度传感器、土壤湿度传感器【图】万纳模块【图】硬件连接硬件连接很简单,将两个传感器的输出口,接到万纳模块的IO1和IO2即可。两个传感器及万纳模块都要供电。实际连接的时候,直接用了万纳模块实验板,用杜邦线就可以完成连接。逻辑上,万纳模块连接传感器,将数据采集并传给酷享系统主机(主节点),主节点类似路由器,自动将数据上报到云端和App中。万纳模块出厂的时候,是空白配置,可以搜索并使用官方的ADC配置。官方ADC配置是将IO1-IO4配置成ADC输入的,我们实际使用了两路。如上图,搜索电压,选择“电压采集设备(百分值)”这个配置,并将它从云端下载下来。配置文件可以通过产品编辑器直接打开查看或者编辑,可以修改成我们需要的功能,不过这里使用默认即可。“电压采集设备(百分值)”这个配置文件,使用了万纳模块的IO1-IO4这四个IO口,将他们配置成了ADC采集,并新建了4个变量,并将ADC采集的结果放到这四个变量里。由于ADC采集的结果实际是一个0-3300的电压值,即0-3.3V。配置文件里通过设置ADC的因子参数为3.3,将ADC采样值除以3.3,得到的就是百分值,这个数值会存储到变量中。附件:电压采样设备(百分值显示)(示范)给酷享系统主机上电,连上网线,通过主机,将配置文件下载到万纳模块中,万纳模块就会被配置成相应功能。如果设计者希望将传感器封装成产品,那可以一次性量产一批万纳模块嵌入到产品中,对于终端用户而言,是不需要接触上述配置工具的。打开App,添加设备,搜索设备类型“电压”,选择”电压采集设备(百分值)“,这个跟刚才的是同一个文件,存储于云端。搜索万纳模块,并添加进去。由于“电压采集设备(百分值)”是一个示范产品,所以没有绑定UI,我们可以搜YwRobot这个UI,将其设置给设备。添加完成之后,就可以点击设备,看到我们模块传来的数据了。任何地方只要手机有网络,都可以看到设备数据。产品型号文件(也就是万纳模块配置文件)及设备UI,可以自己修改,可以本地调试,也可以上传到云,可以实现功能很多,文件见附件。如果使用的主节点是带屏幕的,这些数据可以展示到液晶屏上。可以将传感器数据做成触发源来触发情景动作,比如实现“当光照强度低于60,并且持续了300秒后,就打开灯光或者插座”之类的联动。联动是脱离手机运行的,不需要App在线。附件:UI感谢YwRobot厂商提供的传感器及相关资料、资源。了解详情

如何使用Microchip的LORA模块,以加快物联网设计

LoRaWAN提供了很好的匹配,以物联网的需求,性能特点。除了它的扩展工作范围和低功耗的要求,LoRaWAN提供安全,灵活的通信选项。然而,为了实现一个LoRaWAN溶液所需的硬件和软件可以证明一个主要障碍集中在物联网应用程序本身的开发团队。本文将详细阐述了MicrochipTechnology的第1部分介绍RN2903 LORA模块,并展示如何使用一些额外的硬件和软件,用它来实现远距离,低功耗设计,物联网。快速入门套件Microchip Technology的RN2903 LORA模块是一个物联网设计近投递LoRaWAN硬件解决方案。即便如此,它仍然只是一个完整的LoRaWAN网络的基石,开发者仍然必须考虑支持硬件和软件系统。Microchip的满足这一需求提供全面的评估套件,提供了实现LoRaWAN对物联网所需要的其他元素。正如第1部分所提到的,MicrochipTechnology的RN2903支持LoRaWAN兼容的通信频率为915MHz,旨在简化物联网应用的开发。全面认证,Microchip的模块包括了实现LoRaWAN连接(图1)所需的所有组件。该模块的命令处理器采用板载LoRaWAN固件完全支持LoRaWAN类的协议。板载EEPROM提供存储用于LoRaWAN配置参数,从而提高性能和减少主机和模块之间的数据传输增加的安全性。图1:Microchip的LORA模块提供了LoRaWAN连接,其板载命令处理器,LoRaWAN协议栈,射频收发器和串行连接一个简易的解决方案。(图片来源:微芯片科技)Microchip的RN2903模块提供与外部MCU主机通信的专用UART接口。此外,该模块包括14 GPIO引脚,开发者可以使用模块固件监视或控制外部设备,如开关和LED编程。最后,该模块提供了方便的连接到一个简单的套偶极天线的射频信号引脚。模块的命令处理器根据通过其UART接口从外部主机MCU接收的命令执行LoRaWAN交易。正如任何网络通信的方法,LoRaWAN消息被发送,并在特定的格式接收。对于LoRaWAN的LORA联盟标准规定了在字节级苛求细节这些格式。该RN2903模块提供了一个直观的基于文本的方法,抽象LoRaWAN标准字节级别的格式为一组关键字的使用可选参数命令。Microchip的定义了三种类型的关键字:MAC的LoRaWAN MAC配置和控制命令无线电指令针对PHY无线电层SYS额外的模块功能,如提供模块固件版本的信息或访问模块的EEPROM存储器命令例如:mac tx uncnf 30 23A5发送端口30的数据值“2,3,4,5-”的消息。的“uncnf”选项表示设备没有请求从网络服务器确认。或者,使用“CNF”选项表示该设备预计网络服务器确认收到。的洛拉模块负责将其发送到它的网关以便传递到网络服务器之前加密该消息。radio tx 6d657****765发送含有值[0x6d]一揽子[0x65] [0x73] [0x73] [0x61] [0x67] [0x65(十六进制示例文本字符串“消息”)sys set nvm 100 FF存储该值为0xFF在EEPROM中的用户分区的地址为0x100物联网设备设计凭借其串行接口,RN2903需要一些额外的组件来实现兼容LoRaWAN,物联网的硬件设计。Microchip的进一步发展速度与RN2903 LORA莫特。为了证明其LORA模块功能,Microchip的LORA莫特提供实现LoRaWAN兼容的无线传感器需要一套完整的硬件和软件。Microchip的RN2903 LORA莫特和RN2483 LORA莫特各结合各自的LORA模块与MicrochipPIC18LF45K50 8位MCU,作为传感器的操作和LoRaWAN协议执行主处理器。此外,莫特包括用于采集样品的数据,以及用于用户反馈的液晶显示光传感器和温度传感器。该莫特通过一个标准的USB接口,它提供了访问LORA模块的UART接口连接到主机。在开发过程中工程师们可以通过发送执行LoRaWAN操作MAC,无线电和SYS命令字符串使用莫特的USB连接的模块。在运行期间,物联网设备主机上运行的代码会发出需要的物联网应用的命令和处理响应。对于LoRaWAN应用,Microchip提供的硬件莫特丰富的C软件库。例如,一个应用程序级例程,MOTEapp.c,收集的传感器数据,并通过LoRaWAN连接发送数据,处理由RN2903预期低级MAC命令(清单1)。            . . .            moteApp_clearBuffers();            // Make Sure Port is in allowed Range            // Prepare DataBuffer for Tx            light = 0;            temperature = 0;            NOP();                      // Measure Sensors            moteApp_setSensorsInput();            uint8_t sizeOfUpdate = 0;            light = moteApp_convertSensorValue(moteApp_getLightValue());            oled_putString(moteApp_getLightString(), 6, 1);            sizeOfUpdate = moteApp_addToDataBuffer(moteApp_getLightString(), 4);            temperature = moteApp_convertSensorValue(moteApp_getTempValue());            temperature = ADC_TempConversion(temperature);            moteApp_add8bToDataBuffer(temperature, 4 + moteApp_lightStringSize() + 1);            // Do Normal Operation            . . .            // Getting Random Channel            randomPortNum = TMR2_ReadTimer();            . . .            // Prepare DataBuffer for Tx            moteApp_add8bToDataBuffer(randomPortNum, 0);            dataBuffer[3] = 0x20;            NOP();            sendDataCommand("mac tx uncnf ", dataBuffer, 12);            . . .清单1:Microchip提供C语言软件演示样本物联网的应用程序,收集从莫特的光照和温度传感器的数据,建立与数据(消息add8bToDataBuffer),发送消息(sendDataCommand使用MAC TX命令)。(代码源:微芯片科技)应用级开发随着简单的基于关键字的命令方式,Microchip的LORA模块和相关莫特开发板显著简化LoRaWAN终端设备的发展。然而,即使在系统级莫特板及其相关软件地址LoRaWAN层次仅是最低的,终端设备的水平。一个完整的LoRaWAN兼容网络需要额外的硬件部件,包括兼容网关(S)和一个网络服务器。此外,在实施的物联网应用,开发者必须处理的LORA联盟标准只涉及标准OSI堆栈的最低水平这一事实。其结果是,开发者需要完成的其他联网层,开始与位于由LoRaWAN MAC标准寻址的数据链路层之上的OSI网络层。微芯片的地址这一需要使用实现一个完整LoRaWAN兼容网络,包括端设备,网关和网络服务器的硬件和软件开发工具包。Microchip的RN2903LORA网络评估工具包和RN2483 LORA网络评估套件捆绑一对微尘与Microchip的LoRaWAN网关板。董事会是由LoRaWAN网关核心板和相关的无线子卡完整的天线和电缆。在软件方面,该试剂盒使用从MicrochipLORA技术评估套件提供所有全面评估的示例LORA系统所需的软件组件(图2)。图2:Microchip的LORA网络评估套件和软件套件实现完整的LoRaWAN的网络应用,包括终端设备(莫特板),网关(核心板)和网络服务器(mchplora)。(图片来源:微芯片科技)该套件提供了一个网络服务器(mchplora)的设计使其在开发系统的虚拟机上运行泊坞窗容器。网关主板通过USB连接到开发系统和无线方式与莫特板通信。该莫特板通过制定系统的USB到基于Java的开发实用程序连接。设计与评估套件工作,Microchip的LORA开发套件提供了一个全面的Java套件,提供了更为丰富的比提供的服务与莫特C ++类库。例如,发送一个MAC传输,开发套件抽象相关交易一个简单的execute一个方法macTX类(清单2)。  void macTXSendAction()  {    if (this.application.device.updateValueFlag)      this.application.device.wanPojo.setData(this.data.getText());    if (this.application.device.updateValueFlag) {      this.application.device.wanPojo.setPortNumber(this.portNumber.getText());    }    ICommand macTX = CommandFactory.getCommand(CommandFactory.mactx);    DeviceModel currDev = this.application.device;    macTX.setDataModel(currDev);    List task = new ArrayList();    task.add(macTX);    if (currDev != null)      this.application.mvcController.execute(task);    else      System.err.println("Current Device not set");  }清单2:Microchip的LORA开发套件提供了一个完整的LoRaWAN环境,包括一系列广泛的Java包(JAR文件)的抽象LoRaWAN交易,如MAC TX到一组简单的软件电话等macTXSendAction()。(代码源:微芯片科技)在清单2中,CommandFactory在定义的类LoRaDevUtility.jar定义  public static String mactx = "mac tx";然后创建适当的类的一个实例,在这种情况下,一macTx类对象,当工厂称为CommandFactory.mactx:    if (command.compareTo(mactx) == 0)      return new macTX();该macTX.class在LoRaDevUtility.jar提供运行时配置值和各种服务功能,如数据包验证,以及该类的主要实用方法execute。该execute方法创建所需的MAC TX规定格式字符串命令,传送消息(WriteI2cData),然后获取响应:       . . .command = new StringBuilder().append("mac tx").append(((DeviceModel)this.server).wanPojo.getIsConformed()).append("").append(((DeviceModel)this.server).wanPojo.getPortNumber()).append("").append(((DeviceModel)this.server).wanPojo.getData().replace("0x","")).toString();       . . .        byte[] data = command.getBytes();        ((DeviceModel)this.server).getController().transport.WriteI2cData(this.processPacket.pack(data), null, this.timeout);        byte[] read = null;        read = super.readResponseData();结论有效连接是由低功率的IoT器件的海量数的IoT网络的基本要求。LoRaWAN提供了一个有效的物联网连接解决方案,以提供最低的功率要求远距离操作。与任何连接选项,可实现在证明自己的一大创举,从他们的主要集中在物联网应用本身分心开发。基于Microchip的RN2903 LORA模块,MicrochipTechnology的LORA网络评估套件和相应的LORA开发套件提供完整的应用LoRaWAN。使用预认证的硬件和软件的组合,开发人员可以快速调出能够实现15公里无线范围和10年的电池寿命的物联网连接解决方案。了解详情

如何设计高品质LoRa无线模块

“炮制虽繁必不敢省人工,品味虽贵必不敢减物力”-百年同仁堂古训从14年至今,本着追求极致的工匠精神,锐米通信迭代设计了5版LoRa无线模块,最终达到高品质。干过射频设计的工程师都知道,因为高频电路敏感,元器件微小测试仪器精密;每一版设计,不但凝聚心血,还需要真金白银的投入。为此,我们分享LoRa射频设计的一些经验,只为您(们)不必再掉进这些“坑”。1 原理图在14年,获取一份SX1276/8的原理图,得找semtech的代理商;现在,可以直接从官网上获取:http://www.semtech.com/apps/filedown/down.php?file=SX1276RF1KAS_e269v01a.zip需要注意的是:官方是针对SX1276的射频电路,如果使用SX1278,需要处理HF引脚;官方有多个中心频点的物料BOM,在国内,一般使用490MHz中心频点;PE4259接天线的电路,根据天线性能,需要修改电容和电感值;2  PCB图尽管二层板也能工作,还是强烈建议使用四层板设计,它的优势很明显:稳定性高,抗干扰能力强,电路板的电磁兼容得到了很大的改善。独立的电、地层可以使所有的信号环路面积最小;电源层和地层形成较大的分布电容,为电源提供了很好的高频解耦作用,从而减小了电源线上的噪声;当然,四层板的价格比二层板贵得多,尤其是首次制作的工程费用更高。根据原理图设计PCB后,千万记得提交给semtech公司官方review。锐米通信的PCB经过semtech官方2次review,性能有明显的提升。在此,感谢科通(深圳)黄工和semtech(深圳)刘工的审核。3 电感电容直接用官方推荐的元器件吧,它保证精度和性能,唯一的缺陷是物料成本高。特别注意,要使用绕线电感,叠层电感虽然便宜,但是性能欠佳。锐米通信全部采用muRata品牌,这是国际公认的优秀品质。4 温补晶振按SX1276/8的数据手册,LoRa可以使用廉价的XTAL(无源晶振),仅当BW低于62.5kHz时,才建议使用TCXO(温补晶振)。然而,根据我们的测试经验,建议使用高品质的TCXO:具备温补功能,让处于不同温度(如室内和室外)的LoRa模块无线电频率最大化接近,可以有效提高解码率,从而提升通信质量;良好的抗老化,让不同寿命(先期部署和后期部署)的LoRa模块频偏最小,从而保证通信成功率;以锐米通信使用的NDKTCXO:它的最大功耗仅1.5mA,最大温漂仅2.5ppm,最大老化率仅1ppm/年。当然,它的价格昂贵,是普通XTAL的好几个倍。5 频谱实验每设计一版射频电路,至少得使用频谱仪进行遍历实验,我们使用Tektronix RSA5100A real- time signal analyzer。频谱仪测试选项很多,上2张中心频点为470MHz的测试照:6  SMT生产LoRa射频是高频电路,0402器件很微小,生产只能使用高精密SMT机器,才能保证品质和合格率。我们的生产机器为:7 自动化测试为保证100%合格率,每一片LoRa无线模块,锐米通信都会采用工装仪器进行自动化测试。除检测UART、SPI和RTC等外设外,还通过若干次RF通信,统计计算射频性能分数。测试结果如下图所示:关于LoRa无线模块更多资料,请链接:http://www.rimelink.com/pd.jsp?id=20了解详情

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...了解详情

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 STM8 http://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了解详情