物联网是个交叉学科,涉及通信技术、传感技术、网络技术以及RFID技术、嵌入式系统技术等多项知识,但想在本科阶段深入学习这些知识的难度很大,而且部分物联网研究院从事核心技术工作的职位都要求硕士学历,“LPWAN实验室”计划从收集、整理、翻译实用的物联网有关的知识着手,帮助各高校物联网专业学生利用这个实验室学习平台找准专业方向、夯实基础,同时增强实践与应用能力。虽然现在面临大学生毕业就业难的情况,但实际各行各业却急需物联网领域相关专业的人才,从目前情况来看,环保、安防、智能交通、农业、医疗推广的可能性最大,这也是成为高校热门专业的一个重要原因。从工信部以及各级政府所颁布的规划来看,物联网在未来十年之内必然会迎来其发展的高峰期。而物联网技术人才也势必将会“迎娶”属于它的一个美好时代。
LoRaWAN_stack移植笔记(四)__RTC
stm32相关的配置 由于例程使用的主控芯片为STM32L151C8T6,而在本设计中使用的主控芯片为STM32L051C8T6,内核不一样,并且Cube库相关的函数接口及配置也会有不同,所以芯片的驱动所以做修改。 RTC 的配置 此例程中,RTC被当做定时器使用,用于定时执行任务。 例程中,RTC使用外部LSE的32.768Khz的晶振作为时钟源, 而在本设计中,使用内部LSI作为RTC的时钟源,需要重新设置RTC的分频参数,使得程序正常运行。 注意MCU内部的低速晶振往往误差很大,在使用时很大可能会造成模块接收不到下行包,因为接收对接收窗口的时间要求比较严格,所以如果是对下行要求比较严格的环境,建议不要使用内部晶振。 根据Fck_spre = Frtcclk/(PREDIV_S+1)/(PREDIV_A+1) 例程中RTC的工作频率为32.778/(3+1)/(3+1) = 2.048Khz, 而内部晶振的频率约为37Khz,故PRVEDIV_S和PREDIV_A的值需要改变。 37/2.048 ~= 18; 数据手册里面有这样一句话: Note: When both prescalers are used, it is recommended to configure the asynchronous prescaler to a high value to minimize consumption. 所以:18 = 9*2;故设置PREDIV_A = 8,PREDIV_S = 1; 由于 37/18 ~= 2.055 1/2.055 ~= 0.486618 故此处的宏定义需要稍作修改 […] Read more.
LoRaWAN_stack移植笔记(三)__SPI
stm32相关的配置 由于例程使用的主控芯片为STM32L151C8T6,而在本设计中使用的主控芯片为STM32L051C8T6,内核不一样,并且Cube库相关的函数接口及配置也会有不同,所以芯片的驱动所以做修改。 SPI 的配置 SPI使用的是STM32的硬件接口-SPI1 MOSI MISO 可以看到例程中,对SPI接口进行了再一层的封装,封装如下: 其中: 是原先的STM32Cube库的封装,在此基础上,将SPI的引脚也封装进了自定义的Spi_s结构体中。这样,查看结构体就可以看到SPI的所有情况。 SPI 初始化配置 初始化的函数体如下: 可以看到SPI的MOSI/MISO/SCLK脚都有看到,但是NSS脚看到,而是传了NC。 这是为什么呢? 可以看到程序里面有段话 其意思就是设置为NC就配置NSS 为软件控制,即NSS脚只做片选使用,x像GPIO一样控制他拉高拉低就可以控制片选的使能与否了。 还有一处,设置SPI的工作频率的 由于__ffs这个函数只有Cotex-M3以上内核才能调用,但是通过计算可知若传参为10000000,__ffs这个函数的返回值为0x03,所以可得obj->Spi.Init.BaudRatePrescaler = 8,即SPI_BAUDRATEPRESCALER_8 因为 所以此处设置Spi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8; 最后再调用 至此,SPI的初始化就完成了。 SPI 读写 接下来就是SPI的读写操作了,由于都是使用的Cube库,对寄存器的命名并没有什么不同,直接保留例程中的代码就可以了。 在使用上,需要注意NSS引脚的操作,在进行读写前进行使能,读写完毕之后失能。程序如下图所示: 至此,LoRaWAN例程中的SPI的移植就完成了。 邮箱地址:454626653@qq.com 欢迎咨询搭讪 Read more.
LoRaWAN_stack移植笔记(一)–RF硬件相关
和硬件相关的问题 TCXO 的使用 根据SX1276数据手册, 如果使用TCXO,则需要配置RegTcxo寄存器为0x19,代码如下 否则配置为0x09,因为芯片上电默认不使用TCXO,即上电寄存器值即为0x09,所以无需配置 PA_BOOST 引脚的使用 根据sx1276 数据手册 如果使用PA_BOOST作为RF输出,则需要配置PaSelect脚为1 RXTX switch(接收和发送的天线电路的切换) 在图中可以看到,射频输入和射频输出是不一样的电路,但是用的是一个天线,所以用到了一个射频电路切换的芯片。 在程序中,需要做的就是控制FEM_CPS脚,在RX和TX时进行RF1(RFI)和RF2(RFO)的切换。 由于在设计中兼容高低频,并且使用两个引脚分别控制高频和低频部分的射频部分输入输出的切换,所以在实际使用中需要控制两个引脚。 如果只有高频或者低频一个部分,上面的代码只要保留相应的部分即可 邮箱地址:454626653@qq.com 欢迎咨询搭讪 Read more.
LoRaWAN_stack移植笔记 (二)_GPIO
stm32相关的配置 由于例程使用的主控芯片为STM32L151C8T6,而在本设计中使用的主控芯片为STM32L051C8T6,内核不一样,并且Cube库相关的函数接口及配置也会有不同,所以芯片的驱动所以做修改。另外例程中对STM32库函数的再一次封装的方法也非常值得学习。 GPIO 的配置 例程中可以看到,对IO口的初始化只有这一句,是因为例程中对GPIO的操作进行了封装,方便了上层的使用。 例程中使用Enum定义了64个IO口,其中 0-15 表示PA0-15 16-31表示PB0-15 32-47表示PC0-15 48-63表示PD0-15 64-79表示PE0-15 80-95表示PF0-15 96-111表示PH0-15 这样,在定义引脚的时候直接是用Enum变量就可以表示出IO的PIN以及PORT,在完成驱动程序之后,操作引脚非常的方便。 例如 使用了一个LED灯,连接的是PB_5,这样我们#define LED PB_5,在程序里面就可以得知使用的是PB口,以及PIN_5,方法如下: 由于PB_5 = 16+5 = 21; 21/16 = 1,得知使用的是PB口,21%16 = 5,得知使用的是PIN_5。 其中C语言的时下代码如下,使用(&0xff)以及<<的操作,效率比做除法及取模的效率更高 邮箱地址:454626653@qq.com 欢迎咨询搭讪 Read more.
如何通过Raspberry Pi(树莓派)和Dragino构建一个低成本的LoRa网关
在本视频中,我们建立了一个带有Raspberry Pi和Dragino帽子的单通道LoRa网关。 我演示如何构建它,以及如何配置一个Arduino节点,一切正常。 【如果您的浏览器不支持直接播放下列视频,可以点击此处下载播放】 相关资料: 安装Raspbian:https://www.raspberrypi.org/documentation/installation/installing-images/ 安装LoRa网关:https://www.hackster.io/ChrisSamuelson/lora-raspberry-pi-single-channel-gateway-cheap-d57d36 Lora Pi Hat:https://www.aliexpress.com/item/ong-distance-wireless-433-868-915Mhz-Lora-and-GPS-Expansion-Board-for-Raspberry-Pi/32704894056.html 学习小组招募: 喜欢动手的程序猿们喜大普奔时刻来临了!来临了!来临了! 来自安爵士亲手制作的有关LoRa网关、终端等硬件开发系列学习视频登陆LoRa学习站,英文好的同学们可以先睹为快了,如果你英文足够好,又有兴趣参与LoRa学习资料翻译组,欢迎注册我们的网站会员并留言“加入学习视频翻译”。 Read more.
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 Read more.
基于Semtech SX1276/SX1278 LoRa的智能酒店门禁方案
SX1276/SX1278智能酒店门禁方案,智能酒店系统摆脱了传统意义上的单独智能系统,将照明系统、智能场景、影音系统、音乐系统、智能云端集中控制系统完美融合,从实现了真正意义上的智慧酒店,让每一位入住酒店的客户享受轻松便捷的生活。 替换原来的机械开关,电工轻松搞定。 按照说明书即可组网调试,用户自己DIY控制。 方便扩展及升级功能,用户可随时增添控制设备。 无需专业的技术工程师保障后期系统正常运行 该系统提供了安卓& IOS控制。 【展示板照片】 【方案方块图】 【系统功能】 利用手机APP网上注册,注册成功会发一个加密的钥匙图示发到手机。 进入酒店会自己配对己注册房间门锁,点手机上的钥匙图示打开门锁同时完成室内设备配对。 可透过WIFI将资料传到Android及iOS应用程序上显示,并可以通过手机控制灯、空调、窗帘等。 【方案特性】 该系统是基于STM32MCU微控制器。 该软件包提供了板级支持包(BSP)的RF扩展板和一些中间件组件。 所使用的应用软件来访问和使用RF扩展板的软件层是: STM32MCU HAL层:HAL驱动层提供了一个通用的多实例组简单的API(应用程序编程接口)与上层(应用程序,库和堆栈)进行交互。它是由通用和扩展API。它是直接建立在一个通用的架构,并允许其建立在诸如中间件层的层,为了实现它们的功能,而不依赖于用于给定微控制器单元(MCU)的具体硬件配置。这种结构改善了库代码的可重用性,并保证方便地移植到其他设备。 板级支持包(BSP)层:该软件包支持STM32与独立MCU的外设。该软件包含在板级支持包(BSP)。让使用者可使用开发工具完成板端与手机端连接实时数据传输。 Read more.
基于LoRaWAN的物联网生态系统介绍
什么是LoRaWAN? LoRaWAN是众多低功率广域网(LPWAN, Low Power Wide Area Network) 规范中的其中一种,它的设计目标是能够让以电池供电的装置可以部署在较广域的网络中(原文是区域级-regional, 国家级-national 或 全球级-global)。因此,注重的点是「远距离、低功耗」这类应用需求。 LoRaWAN网络架构的特点 采用星型网络拓扑(Star topology),终端点的通讯是双向的(bi-directional):即数据可收可发,LoRaWAN 资料传输率可以从 0.3 kbps 到 150 kbps(与距离成反比,且在未来还有进一步提升空间)。 LoRa三种终端装置的 Class LoRaWAN 将终端装置 (end-point devices) 区分为 A, B, C 三类 (classes),各自能运用远距离通信的不同需求 (有些要求很省电、有些需要很即时)。这里先说明一下 uplink 与 downlink 的意思:uplink transmission (上行传输):终端装置传给服务器downlink transmission (下行传输):服务器传给终端装置。 Class A 可双向通讯的终端装置(bi-directional end-devices),每个装置的uplink transmission 之后接有两个短暂的 downlink receive windows 用于需要以最低功耗操作的终端装置。这种装置常常在它送出 uplink 之后,只需要与 server 端进行很短暂的 downlink 通讯 (例如只收个 […] Read more.
为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厂商提供的传感器及相关资料、资源。 Read more.