LoRaWAN协议解析 第6章 终端激活

1 前言我正在陆续对《LoRaWAN102》即LoRaWAN协议规范 V1.0.2 版本(2016年7月定稿)协议的各个章节进行翻译。译文之外还对LoRaWAN协议和源码进行了解析,可点此查看帖子LoRa学习笔记_汇总。欢迎同行朋友们留言交流。本文作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/2 梳理解析LoRaWAN第6章,主要对节点加网做了描述,它有两种方式。如果要用一句话来总结的话,那就是这一句了,请看:如果是空中激活,则需要准备 DevEUI,AppEUI,AppKey 这三个参数,即设备自身MAC地址和要使用的应用(应用ID和密钥)。如果是ABP激活,则直接配置 DevAddr,NwkSKey,AppSKey 这三个LoRaWAN最终通讯的参数,不再需要join流程。在这种情况下,这个设备是可以直接发应用数据的。这里插个题外话,商用的LoRaWAN网络一般都是走OTAA流程,这样安全性才得以保证。(twowinter,你数数,这是一句话?)(如果是空中激活,则需要准备 DevEUI,AppEUI,AppKey来join。如果是ABP激活,则直接配置 DevAddr,NwkSKey,AppSKey。)3 代码位置3.1 激活处理协议的第6章,相关的核心代码是这么几行,位于 \src\mac\main.c。整个代码结构非常清晰,用一个宏(OVER_THE_AIR_ACTIVATION)分开两段,分别对应两种激活方式。3.2 参数配置关于参数部分,相关的默认值全部位于\src\apps\LoRaMac\classA\硬件平台\Comissioning.h本尊有机会接触了几个LoRaWAN基站厂家,发现大家为了调试方便,一般也会支持这些默认值。End了解详情

LoRaWAN协议解析 第5章 MAC命令

1 前言我正在陆续对《LoRaWAN102》即LoRaWAN协议规范 V1.0.2 版本(2016年7月定稿)协议的各个章节进行翻译。译文之外还对LoRaWAN协议和源码进行了解析,可点此查看帖子LoRa学习笔记_汇总。欢迎同行朋友们留言交流。本文作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/2 梳理解析从LoRaWAN第4章的帧格式可以得到如下信息:MAC命令,要么使用FPort0来单独传输,要么使用非零的FPort来和数据一起传输。LoRaWAN第5章,LoRaWAN出于网络管理需要,提出了9条MAC命令,这个章节是对9条命令进行具体的描述。说个题外话,CLAA(中国LoRa应用联盟)在9条命令以外还扩充了一些MAC命令。现阶段协议还不能公开,所以我就不多说了。中兴目前作为LoRa联盟董事会成员,也许以后会把这些拓展MAC命令引入到LoRaWAN协议也说不准,大家暂且当个课外知识了解下就好。3 代码位置MAC命令枚举MAC命令的接收处理OnRadioRxDone()携带着MAC帧进来,经过层层筛选,最终到达ProcessMacCommands()来处理MAC命令。这里代码中涉及的两种处理方式,可以跟协议对应起来:port = 0时,MAC命令放在FRMPayload中,需要先解密再处理;port非零时,MAC命令放在fopts中。MAC命令的发送及回复MAC命令的发送及回复处理都在这个函数中,AddMacCommand()。协议栈对MAC命令发送的处理还是比较简单的,都是放在Fopts中来传输,都在这个15字节的MacCommandsBuffer中。了解详情

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公里

近日,唯传科技应客户需求,对GW5000网关路由器(城市级)进行了长距离测试。因客户所处区域在戈壁滩上,准备在20 公里范围内安装1200个探测设备,选用基站进行远距离数据监测和传输。考虑到客户实际需求,唯传决定在深圳区域寻找大范围空旷地带模拟客户需求环境进行现场测试。此前半年,唯传也已经多次进行LoRa最大空空通讯距离的测试,测试结果得到了Semtech公司的高度认可。7月29日,唯传公司将GW...了解详情

花费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),不要试图在网上找到它,因为它是依赖于平台的,所以最好是从源码编译:现在我们可以继续关于LoRa网关的部分了:下载源代码和编译,一旦完成编译,就把他们复制到 ~/lora/exec:最后,我们执行的LoRa gateway:本节我使用了这些链接作为参考资料: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.c99-libftdi.rules为了使用FTDI SPI,我们必须做以下修改library.cfg现在,板子可以被正确识别但是还不能与SX1301通信,因为板子还处于复位状态,复位引脚是由主机通过FTDI的GPIO引脚来控制的,修改以下文件:loragw_spi.ftdi.c现在sx1301似乎开始工作但没有读寄存器,这是因为sx1301没有时钟源,两个sx1257通过共享的TCXO进行时钟驱动,sx1257具有时钟输出,用于驱动sx1301时钟, 查看schematic的文档,我发现是radio_0的时钟输出而不是radio_1的被连接到了sx1301的时钟输入,所以修改以下文件:global_conf.json完工!!!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的驱动中:而前导码长度则是在每次SetTxConfig和SetRxConfig时配置进去。2.信道频率的源码实现先说上行信道的处理。第一步,初始化时把所有信道6*16=96个上行信道都使能了。第二步,紧接着把96个信道的频点赋值一遍。第三步,发送时在SetNextChannel中选择合适的频点,默认是96个信道中随机选择。这上面是上行信道处理三部曲,下行信道处理则轻松多了。主要是配合接收窗口处理,由这个宏定义了下行的起始频点。具体可以看下面第7点。3.数据速率和节点发射功率编码速率编码如下:发射功率编码如下:速率范围如下:发射功率范围如下:4.CFList中国没有。具体见OnRadioRxDone中的FRAME_TYPE_JOIN_ACCEPT分支。5.LinkAdrReq命令对于 ChMaskCntl 的处理都在 ProcessMacCommands() 的 SRV_MAC_LINK_ADR_REQ 分支中。小彩蛋一个:你发现没,注释里写着Channel mask KO。不知是djaeckle (loramac-node的作者之一)调皮,还是语言习惯如此。6.最大载荷长度这在RxWindowSetup()进行处理,调用了最终的驱动函数。7.接收窗口处理。RX1的处理在OnRxWindow1TimerEvent()中,满足协议要求。RX2的默认参数见如下宏:RX2的处理在OnRxWindow2TimerEvent()中:速率偏移处理如下:8.默认设置目前基本各地区的参数都一样,因此协议栈也是直接共用如下参数:End了解详情

基于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模块,并展示如何使用一些额外的硬件和软件,用它来实现远距离,低功耗设计,物联网。快速入门套件MicrochipTechnology的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的进一步发展速度与RN2903LORA莫特。为了证明其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 Txlight = 0;temperature = 0;NOP();// Measure SensorsmoteApp_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 ChannelrandomPortNum = TMR2_ReadTimer();. . .// Prepare DataBuffer for TxmoteApp_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网络评估工具包和RN2483LORA网络评估套件捆绑一对微尘与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);elseSystem.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的原...了解详情