• [交流吐槽] 第五次笔记
    GPIO操作GPIO api介绍GPIO引脚查看ADC采样开发ADC的API介绍wifiiot_adc.h接口简介ADC接口函数参数查看ADC对应的GPIO引脚使用用户按键1来模拟GPIO电压变化,GPIO_11对应的是ADC Channel 5,需要编写软件去读取ADC Channel 5的电压按键按下时是低电压,大约在0V左右ADC读取GPIO的电压值打开B4工程的adc_example.c文件,即可查看读取ADC通道5的电压值的代码*读取电压值用的是AdcRead,第一个参数要用adc的第五个通道I2C总线开发I2C的API介绍wifiiot_i2c.h声明接口函数wiffiot_i2c_ex.h包含扩展I2C接口函数查看NFC的I2C对应的GPIO引脚NFC芯片的I2C对应的GPIO引脚是,GPIO0和GPIO1,需要编写软件使用GPIO_0和GPIO_1产生I2C信号去控制NFC芯片I2C读写NFC芯片打开B5工程的i2c_example.c文件,即可查看代码可以实现NFC芯片的写操作*I2C协议的写操作UART读写开发API介绍查看对应GPIO引脚UART1对应的GPIO引脚为GPIO5和GPIO6
  • [技术干货] 嵌入式单片机-STM32物联网开发案例整理
    一、前言物联网是互联网基础上的延伸和扩展的网络,将各种信息传感设备与互联网结合起来而形成的一个巨大网络,实现在任何时间、任何地点,人、机、物的互联互通。物联网的底层是感知层,感知层主要器件是传感器,作用是使用传感器收集信息;收集到的信息会发给传输层,传输层的核心的无线网络(WiFi,蓝牙,zigbee等),作用是将感知层收集的信息传输给上层应用层,应用层是所谓的云服务器。应用层通过大数据,云计算等手段最终得出结论,在通过传输层发出操作指令给底层去执行。单片机是物联网感知层的核心,而接在单片机上的各种传感器就是单片机的感官,通过这些传感器采集数据,经过单片机统一处理传递给应用终端进行统一分析,完成互联互通。这篇文章合集就列出了单片机的常用传感器开发案例,比如:温度湿度传感器、GPS定位数据解析与转换、ESP8266串口WIFI的使用、光敏传感器的应用案例、三轴陀螺仪的使用案例、OLED低功耗显示屏应用案例、步进电机应用案例、IIC通信协议详解、红外线通信协议应用方案、单片机在线升级方案等等。二、开发案例2.1 STM32+BH1750光敏传感器获取光照强度链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=193508这篇文章利用STM32F103读取B1750光敏传感器的数据,使用IIC模拟时序驱动,方便移植到其他平台,采集的光照度比较灵敏. 合成的光照度返回值范围是 0~255。 0表示全黑 255表示很亮。实测: 手机闪光灯照着的状态返回值是245左右,手捂着的状态返回值是10左右.2.2 STM32+MFRC522完成IC卡号读取、密码修改、数据读写链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=193563这篇文章利用STM32F103控制RC522模块,使用MFRC522模块完成对IC卡卡号读取、卡类型区分、IC卡扇区密码修改、扇区数据读写等功能;底层采用SPI模拟时序,可以很方便的移植到其他设备,完成项目开发。 现在很多嵌入式方向的毕业设计经常使用到该模块,比如: 校园一卡通设计、水卡充值消费设计、公交卡充值消费设计等。2.3 STM32+HC05串口蓝牙设计简易的蓝牙音箱链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=193568这篇文章介绍简易蓝牙音箱的设计流程方案,讲解STM32串口的使用,HC05蓝牙模块的使用,设计了Android上位机,Android手机打开APP,设置好参数之后,选择音乐文件发送给蓝牙音箱设备端,HC05蓝牙收到数据之后,再传递给VS1053进行播放。程序里采用环形缓冲区,接收HC05蓝牙传递的数据,设置好传递的参数之后,基本播放音乐是很流畅的。2.4 基于STM32单片机设计的红外测温仪(带人脸检测)链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=193593由于医学发展的需要,在很多情况下,一般的温度计己经满足不了快速而又准确的测温要求,例如:车站、地铁、机场等人口密度较大的地方进行人体温度测量。当前设计的这款红外测温仪由测温硬件+上位机软件组合而成,主要用在地铁、车站入口等地方,可以准确识别人脸进行测温,如果有人温度超标会进行语音提示并且保存当前人脸照片。2.5 STM32+MPU6050设计便携式Mini桌面时钟(自动调整时间显示方向)链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=193644Mini桌面时钟可以根据MPU6050测量的姿态自动调整显示画面方向,也就是倒着拿、横着拿、反着拿都可以让时间显示是正对着自己的,时间支持自己调整,支持串口校准。可以按键切换页面查看环境温度显示。2.6 STM32+OLED显示屏制作指针式电子钟链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=193646自古以来时钟便是我们人类生活中异常重要的不可缺少的一部分。时钟可以让人们准确地了解和知道每时每刻的时间。现代生活的人们越来越重视起了时间观念,可以说是时间和金钱划上了等号,对于那些对时间把握非常严格和准确的人或事来说,时间的不准确会带来非常大的麻烦。2.7 STM32+ULN2003驱动28BYJ4步进电机(根据圈数正转、反转)链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=193647采用STM32驱动28BYJ4步进电机,实现正转反转,完成角度调整。步进电机是一种将电脉冲转化为角位移的执行机构。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动- -一个固定的角度(及步进角)。可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。2.8 STM32F103ZE+SHT30检测环境温度与湿度(IIC模拟时序)链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=193648sht30是盛世瑞恩生产的温湿度传感器, SHT30支持高精度温湿度测量,内部自动校准,整个程序采用模块化编程,iic时序为一个模块(iic.c 和 iic.h),SHT30为一个模块(sht30.c 和 sht30.h);IIC时序采用模拟时序方式实现,IO口都采用宏定义方式,方便快速移植到其他平台使用。2.9 STM32F103实现IAP在线升级应用程序链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=193650IAP,全称是“In-Application Programming”,中文解释为“在程序中编程”。IAP是一种对通过微控制器的对外接口(如USART,IIC,CAN,USB,以太网接口甚至是无线射频通道)对正在运行程序的微控制器进行内部程序的更新的技术(注意这完全有别于ICP或者ISP技术)。ICP(In-Circuit Programming)技术即通过在线仿真器对单片机进行程序烧写,而ISP技术则是通过单片机内置的bootloader程序引导的烧写技术。无论是ICP技术还是ISP技术,都需要有机械性的操作如连接下载线,设置跳线帽等。若产品的电路板已经层层密封在外壳中,要对其进行程序更新无疑困难重重,若产品安装于狭窄空间等难以触及的地方,更是一场灾难。但若进引入了IAP技术,则完全可以避免上述尴尬情况,而且若使用远距离或无线的数据传输方案,甚至可以实现远程编程和无线编程。这绝对是ICP或ISP技术无法做到的。某种微控制器支持IAP技术的首要前提是其必须是基于可重复编程闪存的微控制器。STM32微控制器带有可编程的内置闪存,同时STM32拥有在数量上和种类上都非常丰富的外设通信接口,因此在STM32上实现IAP技术是完全可行的。2.10 STM32封装ESP8266一键配置函数:实现实现AP模式和STA模式切换、服务器与客户端创建链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=193651ESP8266是一款物联网WiFi芯片,基于ESP8266可以开发物联网串口WiFi模块,像SKYLAB的WG219/WG229专为移动设备和物联网应用设计,可将用户的物理设备连接到WiFi无线网络上,进行互联网或局域网通信,实现联网功能。另外WG219/WG229仅需要通过出串口使用AT指令控制,就能满足大部分的网络功能需求。2.11 STM32入门开发 NEC红外线协议解码(超低成本无线传输方案)链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=193653红外线传输协议可以说是所有无线传输协议里成本最低,最方便的传输协议了,但是也有缺点,距离不够长,速度不够快;当然,每个传输协议应用的环境不一样,定位不一样,好坏没法比较,具体要看自己的实际场景选择合适的通信方式。NEC协议是众多红外线协议中的一种(这里说的协议就是他们数据帧格式定义不一样,数据传输原理都是一样的),我们购买的外能遥控器、淘宝买的mini遥控器、电视机、投影仪几乎都是NEC协议。 像格力空调、美的空调这些设备使用的就是其他协议格式,不是NEC协议,但是只要学会一种协议解析方式,明白了红外线传输原理,其他遥控器协议都可以解出来。2.12 STM32入门开发 编写DS18B20温度传感器驱动(读取环境温度、支持级联)链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=193655DS18B20是一个数字温度传感器,采用的是单总线时序与主机通信,只需要一根线就可以完成温度数据读取;DS18B20内置了64位产品序列号,方便识别身份,在一根线上可以挂接多个DS18B20传感器,通过64位身份验证,可以分别读取来至不同传感器采集的温度信息。2.13 STM32入门开发 采用IIC硬件时序读写AT24C08(EEPROM)链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=193656AT24C08系列支持I2C,总线数据传送协议I2C,总线协议规定任何将数据传送到总线的器件作为发送器。任何从总线接收数据的器件为接收器;数据传送是由产生串行时钟和所有起始停止信号的主器件控制的。主器件和从器件都可以作为发送器或接收器,但由主器件控制传送数据(发送或接收)的模式。2.14 GPS原始坐标转百度地图坐标(纯C代码)链接:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=193507得到GPS原始坐标数据之后,想通过百度地图API接口直接显示实际定位。国际经纬度坐标标准为WGS-84,国内必须至少使用国测局制定的GCJ- 02,对地理位置进行首次加密。百度坐标在此基础上,进行了BD-09二次加密措施,更加保护了个人隐私。百度对外接口的坐标系并不是GPS采集的真实经 纬度,需要通过坐标转换接口进行转换。
  • [行业资讯] 工业4.0连接链中缺失的一环
    在过去的十年里,工业4.0一直是爆炸性的,且它的增长并没有停止过。据全球移动通信系统协会预测,到2025年,全球将有超过250亿个物联网连接。虽然物联网已经改变了行业,但在简化部署方面仍存在挑战。简而言之,工业物联网实现了机器对机器通信,使制造设施变得智能化和数字化。通过使用传感器捕捉工厂车间数据,制造商可以全面了解其设施,以优化流程,提高机器性能,减少浪费和能源消耗,并减少意外停机时间。但连接背后的技术是什么?连接制造商通过移动网络连接物联网设备被称为蜂窝物联网。使用现有的移动网络不需要单独的、专用的基础设施。相反,可以使用一系列网络,无论是3G、4G、5G,还是物联网专用网络。LTE-M和NB-IoT是专门为物联网连接设计的网络。虽然LTE-M提供较低的价格点和语音和短信支持,但NB-IoT提供低功耗,低数据使用量以实现远距离和可靠性。无论使用哪种网络,通过传统SIM卡将设备连接到蜂窝物联网都给制造商带来了一些挑战。部署困难传统上,物联网SIM卡负责将设备连接到网络。但它并非没有挑战。物联网SIM卡通常只允许一个设备连接到一个运营商的网络。当跨多个网络在全球范围内部署设备时,或与涉及全球供应链或物流的设备一起工作时,这将造成物流噩梦。制造商必须为每个设备的本地网络采购和分发物理SIM。由于SIM卡需要在维护或运营商更换时可拆卸,这导致物联网设备不能密封,这意味着恶劣的操作条件更有可能损坏设备。此外,人们还担心,可拆卸元件会使物联网设备面临服务被盗的风险。eSIM是未来虽然物联网SIM卡可以完成这项工作,但如果手头有解决方案,这些挑战就很难被忽视。eSIM或嵌入式SIM是物理SIM的数字替代品,可通过无线方式将设备连接到网络。eSIM最初用于可穿戴设备和联网汽车,现在也成为工业物联网的关键组成部分。与物理SIM卡不同,eSIM通过无线配置将网络证书下载到物联网设备印刷电路板上的芯片上。消除SIM卡的物理组件使整个网络的载入过程远程化,这对制造商来说有很多好处。eSIM消除了物联网SIM卡的相关问题,物联网设备的组网在生产、发货、部署完成后才确定。根据设备位置或订阅成本的需要,制造商可以轻松地更换连接提供商,以获得最终的灵活性。通过无线方式提供网络凭据意味着eSIM可以远程连接和维护。不需要亲自操作设备来改变其连接,使设备更耐用,更不容易受到环境破坏。在安全性方面,eSIM位于电路板上的小芯片上意味着它是不可拆卸的。将SIM卡物理焊接到设备上,可以消除SIM卡物理被盗的风险,因为SIM卡很难识别,也不可能移除。通过这种方式,物联网设备可以在没有任何本地人工控制连接的情况下进行部署,所有责任都由制造商的服务提供商承担。Mobilise的HERO平台为服务提供商提供了基于云的eSIM编制层,以实现eSIM供应、管理、企业计费和CRM系统。这意味着服务提供商将负责管理订阅,为制造业用户减轻蜂窝连接的痛苦。虽然工业物联网对制造商来说并不新鲜,但使其更精简、方便和数字化是其持续成功的关键。采用eSIM技术可以缓解制造商所遇到的一些难点,使操作更流畅,并为更高效的工艺提供了机会。
  • [赛事资讯] 追光者 身披光芒 | 2022华为嵌入式软件大赛总决赛优胜名单
  • [技术干货] STM32+MFRC522完成IC卡号读取、密码修改、数据读写
    # 一、环境介绍 **MCU:** STM32F103ZET6 **开发软件:** Keil5 **非接触式读写卡模块:** MFRC522 # 二、功能介绍 使用MFRC522模块完成对IC卡卡号读取、卡类型区分、IC卡扇区密码修改、扇区数据读写等功能;底层采用SPI模拟时序,可以很方便的移植到其他设备,完成项目开发。 现在很多嵌入式方向的毕业设计经常使用到该模块,比如: 校园一卡通设计、水卡充值消费设计、公交卡充值消费设计等。 # 三、MFR522介绍 MF RC522 是应用于13.56MHz 非接触式通信中高集成度读写卡系列芯片中的一员。是NXP 公司针对“三表”应用推出的一款低电压、低成本、体积小的**非接触式读写卡芯片**,是智能仪表和便携式手持设备研发的较好选择。 MF RC522 利用了先进的调制和解调概念,完全集成了在**13.56MHz** 下所有类型的被动非接触式通信方式和协议。支持 ISO14443A 的多层应用。其内部发送器部分可驱动读写器天线与ISO 14443A/MIFARE卡和应答机的通信,无需其它的电路。接收器部分提供一个坚固而有效的解调和解码电路,用于处理ISO14443A 兼容的应答器信号。数字部分处理ISO14443A 帧和错误检测(奇偶 &CRC)。此外,它还支持快速CRYPTO1 加密算法,用于验证MIFARE 系列产品。MFRC522 支持MIFARE?更高速的非接触式通信,双向数据传输速率高达424kbit/s。 作为13.56MHz 高集成度读写卡系列芯片家族的新成员,MF RC522 与MF RC500和 MF RC530 有不少相似之处,同时也具备诸多特点和差异。它与主机间的通信采用连线较少的串行通信,且可根据不同的用户需求,选取SPI、I2C 或串行UART(类似RS232)模式之一,有利于减少连线,缩小PCB 板体积,降低成本。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/6/1657070014422652544.png) # 四、IC卡介绍 非接触式IC卡又称射频卡,由IC芯片、感应天线组成,封装在一个标准的PVC卡片内,芯片及天线无任何外露部分。是世界上最近几年发展起来的一项新技术,它成功的将射频识别技术和IC卡技术结合起来,结束了无源(卡中无电源)和免接触这一难题,是电子器件领域的一大突破。卡片在一定距离范围(通常为5—10cm)靠近读写器表面,通过无线电波的传递来完成数据的读写操作。 射频读写器向IC卡发一组固定频率的电磁波,卡片内有一个LC串联谐振电路,其频率与读写器发射的频率相同,这样在电磁波激励下,LC谐振电路产生共振,从而使电容内有了电荷;在这个电荷的另一端,接有一个单向导通的电子泵,将电容内的电荷送到另一个电容内存储,当所积累的电荷达到2V时,此电容可作为电源为其它电路提供工作电压,将卡内数据发射出去或接受读写器的数据。 非接触性IC卡与读卡器之间通过无线电波来完成读写操作。二者之间的通讯频率为13.56MHZ。非接触性IC卡本身是无源卡,当读写器对卡进行读写操作时,读写器发出的信号由两部分叠加组成:一部分是电源信号,该信号由卡接收后,与本身的L/C产生一个瞬间能量来供给芯片工作。另一部分则是指令和数据信号,指挥芯片完成数据的读取、修改、储存等,并返回信号给读写器,完成一次读写操作。读写器则一般由单片机,专用智能模块和天线组成,并配有与PC的通讯接口,打印口,I/O口等,以便应用于不同的领域。 ### **M1卡详细指标** M1卡是指M1芯片,是指菲利浦下属子公司恩智浦出品的芯片缩写,全称为NXP Mifare1系列,常用的有S50及S70两种型号。 M1(S50)卡详细规格: 1. 芯片类型:PhilipsMifare1ICS50 2. 存储容量:8Kbit,16个分区,每分区两组密码; 3. 工作频率:13.56?MHz; 4. 通讯速率:106KBoud; 5. 读写距离:2.5~10cm; 6. 读写时间:1~2ms; 7. 工作温度:-20℃~55℃; 8. 擦写寿命:>100,000次; 9. 数据保存:>10年; 10. 外形尺寸:ISO标准卡85.6x54x0.82; 11. 封装材料:PVC、PET、PETG、0.13mm铜线; Mifare S50和Mifare S70又常被称为Mifare Standard、Mifare Classic、MF1,是遵守ISO14443A标准的卡片中应用最为广、影响力最大的的一员。而Mifare S70的容量是S50的4倍,S50的容量是1K字节,S70的容量为4K字节。 读写器对卡片的操作时序和操作命令,二者完全一致。 Mifare S50和Mifare S70的每张卡片都有一个4字节的全球唯一序列号,卡上数据保存期为10年,可改写10万次,读无限次。一般的应用中,不用考虑卡片是否会被读坏写坏的问题, 当然暴力硬损坏除外。 Mifare S50和Mifare S70的区别主要有两个方面。一是读写器对卡片发出请求命令,二者应答返回的卡类型(ATQA)字节不同。Mifare S50的卡类型(ATQA)是0004H,Mifare S70的卡类型(ATQA)是0002H。另一个区别就是二者的容量和内存结构不同。 M1卡分为16个扇区,每个扇区由4块(0、1、2、3)组成。实际操作时,将16个扇区分为64个块,按绝对地址编号为0-63。 **结构如下:** ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/6/1657070035820641768.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/6/1657070047185645705.png) 1. 第0个扇区用于存放厂商代码,意见固话,不可更改。 2. 每个扇区的块0、块1、块2为数据块,可以用于存储数据。数据块可以进行读写操作。 3. 每个扇区的块3为控制块,包括了密码A、存储控制、密码B。具体结构如下: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/6/1657070067575801923.png) 4. 每个扇区的密码和控制位都是独立的,可以根据实际需求设定各自的密码及存取控制。存取控制为4个字节,共32位,扇区中的每个块(包括数据和控制块)存取条件是由密码和存取控制共同决定的,在存取控制中每个块都有一个相应的三个控制位。定义如下: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/6/1657070140954158662.png) Mifare 1 S50 白卡读写时一般步骤: 寻卡-->下载块密码--> 读写块数据。控制块也是一样。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/6/1657070165657639007.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/6/1657070176498934559.png) 数据块的访问权限设置表格:(根据自己需要的权限,完成上图字节6、7、8的填充即可) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/6/1657070194110826418.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/6/1657070202208755129.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/6/1657070213562524620.png) 控制块的读写权限设置:(**包含了对密码A****、控制权限、密码的读写权限**) **7 6 5 4 3 2 1 0** **字节6 1 1 1 1 1 1 1 1** **字节7 0 0 0 0 1 1 1 1** **字节8 0 0 0 0 0 0 0 0** **字节9** 设置的控制权限如下:**0xFF 0x0F 0x00 0x00** 代表数据块的权限: 验证密码A或者密码B都可以对数据块进行读写操作或者加值键值操作。 2. 代表控制块的权限 (1) 验证A密码之后可以写A/B密码,不能读密码。 ​ 可以读控制字节(4个),无法写控制字节 ​ 可以读写B密码 (2) 验证B密码之后,可以读写A/B密码,也可读控制字节,但无法写控制字节。 ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/20227/6/1657070229977520137.png) # 五、核心代码 ## 5.1 rc522.c ```cpp #include "sys.h" #include "RFID_RC522.h" #include "delay.h" #include "string.h" #include "usart.h" /* 函数功能:移植接口--SPI时序读写一个字节 函数参数:data:要写入的数据 返 回 值:读到的数据 */ u8 RC522_SPI_ReadWriteOneByte(u8 tx_data) { u8 rx_data=0; u8 i; for(i=0;i8;i++) { RC522_SCLK=0; if(tx_data&0x80){RC522_OUTPUT=1;} else {RC522_OUTPUT=0;} tx_data=1; RC522_SCLK=1; rx_data=1; if(RC522_INPUT)rx_data|=0x01; } return rx_data; } /* 函数功能:初始化RC522的IO口 */ void RC522_IO_Init(void) { RCC->APB2ENR|=12; //PA时钟使能 RCC->APB2ENR|=17; //PF时钟使能 //PA5 时钟 RC522_SCLK //PA6 输入 RC522_INPUT //PA7 输出 RC522_OUTPUT GPIOA->CRL&=0x000FFFFF; GPIOA->CRL|=0x38300000; GPIOA->ODR|=0x35; //RC522_RST ----->PF1--复位脚 //RC522_SDA ----->PF0--片选脚 GPIOF->CRL&=0xFFFFFF00; GPIOF->CRL|=0x00000033; GPIOF->ODR|=0x30; } /* 功能描述:选卡读取卡存储器容量 输入参数:serNum 传入卡序列号 返 回 值:成功返回卡容量 */ u8 RC522_MFRC522_SelectTag(u8 *serNum) //读取卡存储器容量 { u8 i; u8 status; u8 size; u8 recvBits; u8 buffer[9]; buffer[0]=PICC_ANTICOLL1; //防撞码1 buffer[1]=0x70; buffer[6]=0x00; for(i=0;i4;i++) { buffer[i+2]=*(serNum+i); //buffer[2]-buffer[5]为卡序列号 buffer[6]^=*(serNum+i); //卡校验码 } RC522_CalulateCRC(buffer,7,&buffer[7]); //buffer[7]-buffer[8]为RCR校验码 RC522_ClearBitMask(Status2Reg,0x08); status=RC522_PcdComMF522(PCD_TRANSCEIVE,buffer,9,buffer,&recvBits); if((status==MI_OK)&&(recvBits==0x18)) size=buffer[0]; else size=0; return size; } /* 延时函数,纳秒级 */ void RC522_Delay(u32 ns) { u32 i; for(i=0;i* 函数功能:RC522芯片初始化 */ void RC522_Init(void) { RC522_IO_Init(); //RC522初始化 RC522_PcdReset(); //复位RC522 RC522_PcdAntennaOff(); //关闭天线 DelayMs(2); //延时2毫秒 RC522_PcdAntennaOn(); //开启天线 M500PcdConfigISOType('A'); //设置RC632的工作方式 } /* 函数功能:复位RC522 */ void RC522_Reset(void) { RC522_PcdReset(); //复位RC522 RC522_PcdAntennaOff(); //关闭天线 DelayMs(2); //延时2毫秒 RC522_PcdAntennaOn(); //开启天线 } /* 功 能: 寻卡 参数说明: req_code[IN]:寻卡方式 0x52 = 寻感应区内所有符合14443A标准的卡 0x26 = 寻未进入休眠状态的卡 pTagType[OUT]:卡片类型代码 0x4400 = Mifare_UltraLight 0x0400 = Mifare_One(S50) 0x0200 = Mifare_One(S70) 0x0800 = Mifare_Pro(X) 0x4403 = Mifare_DESFire 返 回 值: 成功返回MI_OK */ char RC522_PcdRequest(u8 req_code,u8 *pTagType) { char status; u8 unLen; u8 ucComMF522Buf[MAXRLEN]; // MAXRLEN 18 RC522_ClearBitMask(Status2Reg,0x08); //清RC522寄存器位,/接收数据命令 RC522_WriteRawRC(BitFramingReg,0x07); //写RC632寄存器 RC522_SetBitMask(TxControlReg,0x03); //置RC522寄存器位 ucComMF522Buf[0]=req_code; //寻卡方式 status=RC522_PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,1,ucComMF522Buf,&unLen); //通过RC522和ISO14443卡通讯 if((status==MI_OK)&&(unLen==0x10)) { *pTagType=ucComMF522Buf[0]; *(pTagType+1)=ucComMF522Buf[1]; } else { status = MI_ERR; } return status; } /* 功 能: 防冲撞 参数说明: pSnr[OUT]:卡片序列号,4字节 返 回: 成功返回MI_OK */ char RC522_PcdAnticoll(u8 *pSnr) { char status; u8 i,snr_check=0; u8 unLen; u8 ucComMF522Buf[MAXRLEN]; RC522_ClearBitMask(Status2Reg,0x08); //清RC522寄存器位 RC522_WriteRawRC(BitFramingReg,0x00); //写 RC522_ClearBitMask(CollReg,0x80); //清 ucComMF522Buf[0]=PICC_ANTICOLL1; //PICC_ANTICOLL1 = 0x93 ucComMF522Buf[1]=0x20; status=RC522_PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,2,ucComMF522Buf,&unLen); //0x0c,通过RC522和ISO14443卡通讯 //PCD_TRANSCEIVE =发送并接收数据 //2:写入卡里的数据字节长度 //ucComMF522Buf:存放数据的地址 //unLen:从卡里读出的数据长度 if(status==MI_OK) { for(i=0;i4;i++) { *(pSnr+i)=ucComMF522Buf[i]; //把读到的卡号赋值给pSnr snr_check^=ucComMF522Buf[i]; } if(snr_check!=ucComMF522Buf[i]) { status = MI_ERR; } } RC522_SetBitMask(CollReg,0x80); return status; } /* 功 能:选定卡片 参数说明:pSnr[IN]:卡片序列号,4字节 返 回:成功返回MI_OK */ char RC522_PcdSelect(u8 *pSnr) { char status; u8 i; u8 unLen; u8 ucComMF522Buf[MAXRLEN]; ucComMF522Buf[0]=PICC_ANTICOLL1; ucComMF522Buf[1]=0x70; ucComMF522Buf[6]=0; for(i=0;i4;i++) { ucComMF522Buf[i+2]=*(pSnr+i); ucComMF522Buf[6]^=*(pSnr+i); } RC522_CalulateCRC(ucComMF522Buf,7,&ucComMF522Buf[7]); //用MF522计算CRC16函数,校验数据 RC522_ClearBitMask(Status2Reg,0x08); //清RC522寄存器位 status=RC522_PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,9,ucComMF522Buf,&unLen); if((status==MI_OK)&&(unLen==0x18))status=MI_OK; else status=MI_ERR; return status; } /* 功 能:验证卡片密码 参数说明:auth_mode[IN]: 密码验证模式 0x60 = 验证A密钥 0x61 = 验证B密钥 addr[IN]:块地址 pKey[IN]:扇区密码 pSnr[IN]:卡片序列号,4字节 返 回:成功返回MI_OK */ char RC522_PcdAuthState(u8 auth_mode,u8 addr,u8 *pKey,u8 *pSnr) { char status; u8 unLen; u8 ucComMF522Buf[MAXRLEN]; //MAXRLEN 18(数组的大小) //验证模式+块地址+扇区密码+卡序列号 ucComMF522Buf[0]=auth_mode; ucComMF522Buf[1]=addr; memcpy(&ucComMF522Buf[2],pKey,6); //拷贝,复制 memcpy(&ucComMF522Buf[8],pSnr,4); status=RC522_PcdComMF522(PCD_AUTHENT,ucComMF522Buf,12,ucComMF522Buf,&unLen); if((status!= MI_OK)||(!(RC522_ReadRawRC(Status2Reg)&0x08)))status = MI_ERR; return status; } /* 功 能:读取M1卡一块数据 参数说明: addr:块地址 p :读出的块数据,16字节 返 回:成功返回MI_OK */ char RC522_PcdRead(u8 addr,u8 *p) { char status; u8 unLen; u8 i,ucComMF522Buf[MAXRLEN]; //18 ucComMF522Buf[0]=PICC_READ; ucComMF522Buf[1]=addr; RC522_CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]); status=RC522_PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen);//通过RC522和ISO14443卡通讯 if((status==MI_OK&&(unLen==0x90))) { for(i=0;i16;i++) { *(p +i)=ucComMF522Buf[i]; } } else { status=MI_ERR; } return status; } /* 功 能:写数据到M1卡指定块 参数说明:addr:块地址 p :向块写入的数据,16字节 返 回:成功返回MI_OK */ char RC522_PcdWrite(u8 addr,u8 *p) { char status; u8 unLen; u8 i,ucComMF522Buf[MAXRLEN]; ucComMF522Buf[0]=PICC_WRITE;// 0xA0 //写块 ucComMF522Buf[1]=addr; //块地址 RC522_CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]); status=RC522_PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen); if((status!= MI_OK)||(unLen != 4)||((ucComMF522Buf[0]&0x0F)!=0x0A)) { status = MI_ERR; } if(status==MI_OK) { for(i=0;i16;i++)//向FIFO写16Byte数据 { ucComMF522Buf[i]=*(p +i); } RC522_CalulateCRC(ucComMF522Buf,16,&ucComMF522Buf[16]); status = RC522_PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,18,ucComMF522Buf,&unLen); if((status != MI_OK)||(unLen != 4)||((ucComMF522Buf[0]&0x0F)!=0x0A)) { status = MI_ERR; } } return status; } /* 功 能:命令卡片进入休眠状态 返 回:成功返回MI_OK */ char RC522_PcdHalt(void) { u8 status; u8 unLen; u8 ucComMF522Buf[MAXRLEN]; //MAXRLEN==18 status=status; ucComMF522Buf[0]=PICC_HALT; ucComMF522Buf[1]=0; RC522_CalulateCRC(ucComMF522Buf,2,&ucComMF522Buf[2]); status=RC522_PcdComMF522(PCD_TRANSCEIVE,ucComMF522Buf,4,ucComMF522Buf,&unLen); return MI_OK; } /* 功 能:用MF522计算CRC16函数 参 数: *pIn :要读数CRC的数据 len:-数据长度 *pOut:计算的CRC结果 */ void RC522_CalulateCRC(u8 *pIn ,u8 len,u8 *pOut ) { u8 i,n; RC522_ClearBitMask(DivIrqReg,0x04); //CRCIrq = 0 RC522_WriteRawRC(CommandReg,PCD_IDLE); RC522_SetBitMask(FIFOLevelReg,0x80); //清FIFO指针 //向FIFO中写入数据 for(i=0;i/开始RCR计算 } RC522_WriteRawRC(CommandReg,PCD_CALCCRC); //等待CRC计算完成 i=0xFF; do { n=RC522_ReadRawRC(DivIrqReg); i--; } while((i!=0)&&!(n&0x04));//CRCIrq = 1 //读取CRC计算结果 pOut[0]=RC522_ReadRawRC(CRCResultRegL); pOut[1]=RC522_ReadRawRC(CRCResultRegM); } /* 功 能:复位RC522 返 回:成功返回MI_OK */ char RC522_PcdReset(void) { RC522_RST=1; //PF1写1 RC522_Delay(10); RC522_RST=0; //PF1清0 RC522_Delay(10); RC522_RST=1; //PF1写1 RC522_Delay(10); RC522_WriteRawRC(CommandReg,PCD_RESETPHASE); //写RC632寄存器,复位 RC522_WriteRawRC(CommandReg,PCD_RESETPHASE); //写RC632寄存器,复位 RC522_Delay(10); RC522_WriteRawRC(ModeReg,0x3D); //和Mifare卡通讯,CRC初始值0x6363 RC522_WriteRawRC(TReloadRegL,30); //写RC632寄存器 RC522_WriteRawRC(TReloadRegH,0); RC522_WriteRawRC(TModeReg,0x8D); RC522_WriteRawRC(TPrescalerReg,0x3E); RC522_WriteRawRC(TxAutoReg,0x40);//必须要 return MI_OK; } /* 函数功能:设置RC632的工作方式 */ char M500PcdConfigISOType(u8 type) { if(type=='A') //ISO14443_A { RC522_ClearBitMask(Status2Reg,0x08); //清RC522寄存器位 RC522_WriteRawRC(ModeReg,0x3D); //3F//CRC初始值0x6363 RC522_WriteRawRC(RxSelReg,0x86); //84 RC522_WriteRawRC(RFCfgReg,0x7F); //4F //调整卡的感应距离//RxGain = 48dB调节卡感应距离 RC522_WriteRawRC(TReloadRegL,30); //tmoLength);// TReloadVal = 'h6a =tmoLength(dec) RC522_WriteRawRC(TReloadRegH,0); RC522_WriteRawRC(TModeReg,0x8D); RC522_WriteRawRC(TPrescalerReg,0x3E); RC522_Delay(1000); RC522_PcdAntennaOn(); //开启天线 } else return 1; //失败,返回1 return MI_OK; //成功返回0 } /* 功 能:读RC632寄存器 参数说明:Address[IN]:寄存器地址 返 回:读出的值 */ u8 RC522_ReadRawRC(u8 Address) { u8 ucAddr; u8 ucResult=0; RC522_CS=0; //片选选中RC522 ucAddr=((Address1)&0x7E)|0x80; RC522_SPI_ReadWriteOneByte(ucAddr); //发送命令 ucResult=RC522_SPI_ReadWriteOneByte(0); //读取RC522返回的数据 RC522_CS=1; //释放片选线(PF0) return ucResult; //返回读到的数据 } /* 功 能:写RC632寄存器 参数说明:Address[IN]:寄存器地址 value[IN] :写入的值 */ void RC522_WriteRawRC(u8 Address,u8 value) { u8 ucAddr; RC522_CS=0; //PF0写 0 (SDA)(SPI1片选线,低电平有效) ucAddr=((Address1)&0x7E); RC522_SPI_ReadWriteOneByte(ucAddr); //SPI1发送一个字节 RC522_SPI_ReadWriteOneByte(value); //SPI1发送一个字节 RC522_CS=1; //PF1写1(SDA)(SPI1片选线) } /* 功 能:置RC522寄存器位 参数说明:reg[IN]:寄存器地址 mask[IN]:置位值 */ void RC522_SetBitMask(u8 reg,u8 mask) { char tmp=0x0; tmp=RC522_ReadRawRC(reg); //读RC632寄存器 RC522_WriteRawRC(reg,tmp|mask); //写RC632寄存器 } /* 功 能:清RC522寄存器位 参数说明:reg[IN]:寄存器地址 mask[IN]:清位值 */ void RC522_ClearBitMask(u8 reg,u8 mask) { char tmp=0x0; tmp=RC522_ReadRawRC(reg); //读RC632寄存器 RC522_WriteRawRC(reg,tmp&~mask); // clear bit mask } /* 功 能:通过RC522和ISO14443卡通讯 参数说明:Command[IN]:RC522命令字 pIn [IN]:通过RC522发送到卡片的数据 InLenByte[IN]:发送数据的字节长度 pOut [OUT]:接收到的卡片返回数据 *pOutLenBit[OUT]:返回数据的位长度 */ char RC522_PcdComMF522(u8 Command,u8 *pIn,u8 InLenByte,u8 *pOut,u8 *pOutLenBit) { char status=MI_ERR; u8 irqEn=0x00; u8 waitFor=0x00; u8 lastBits; u8 n; u16 i; switch(Command) { case PCD_AUTHENT: //验证密钥 irqEn=0x12; waitFor=0x10; break; case PCD_TRANSCEIVE: //发送并接收数据 irqEn=0x77; waitFor=0x30; break; default: break; } RC522_WriteRawRC(ComIEnReg,irqEn|0x80); RC522_ClearBitMask(ComIrqReg,0x80); //清所有中断位 RC522_WriteRawRC(CommandReg,PCD_IDLE); RC522_SetBitMask(FIFOLevelReg,0x80); //清FIFO缓存 for(i=0;i/开始传送 } //有问题,下面的循环 //i = 600;//根据时钟频率调整,操作M1卡最大等待时间25ms i=2000; do { n=RC522_ReadRawRC(ComIrqReg); i--; } while((i!=0)&&!(n&0x01)&&!(n&waitFor)); RC522_ClearBitMask(BitFramingReg,0x80); if(i!=0) { if(!(RC522_ReadRawRC(ErrorReg)&0x1B)) { status=MI_OK; if(n&irqEn&0x01) { status=MI_NOTAGERR; } if(Command==PCD_TRANSCEIVE) { n=RC522_ReadRawRC(FIFOLevelReg); lastBits=RC522_ReadRawRC(ControlReg)&0x07; if(lastBits) { *pOutLenBit=(n-1)*8+lastBits; } else { *pOutLenBit=n*8; } if(n==0)n=1; if(n>MAXRLEN)n=MAXRLEN; for(i=0; i } } } else { status=MI_ERR; } } RC522_SetBitMask(ControlReg,0x80);// stop timer now RC522_WriteRawRC(CommandReg,PCD_IDLE); return status; } /* 函数功能:开启天线 参 数:每次启动或关闭天险发射之间应至少有1ms的间隔 */ void RC522_PcdAntennaOn(void) { u8 i; i=RC522_ReadRawRC(TxControlReg); if(!(i&0x03)) { RC522_SetBitMask(TxControlReg,0x03); } } /* 函数功能:关闭天线 参 数:每次启动或关闭天险发射之间应至少有1ms的间隔 */ void RC522_PcdAntennaOff(void) { RC522_ClearBitMask(TxControlReg,0x03); //清RC522寄存器位 } ```
  • [行业资讯] NB-IoT和LoRa不用电池也可以工作:无源物联网为LPWAN开辟新机遇!
    作者:赵小飞智库 原创导读随着环境能量采集技术的进一步发展,无源不仅能够为仅需微瓦级别功耗的反向散射通信节点提供能量来源,也能够在一定场景下为NB-、LoRa等低功耗广域网络(LPWAN)终端提供能量支持,让此前依赖于电池工作的节点可以彻底摆脱电池,实现更长生命周期。无源物联网已成为业界关注的一个热点,随着 Advanced和6G研究和讨论不断深入,无源物联网也作为未来升级版5G和6G的重点研究课题,并承载着蜂窝网络支撑海量节点乃至千亿级连接的任务。对于无源物联网的研究,重点集中在能量获取、低功耗通信、低功耗计算、低功耗传感等方向,其中前两项是无源物联网的重点,相应的主流的技术是环境能量采集和反向散射通信技术。 随着环境能量采集技术的进一步发展,该技术不仅能够为仅需微瓦级别功耗的反向散射通信节点提供能量来源,也能够在一定场景下为NB-IoT、LoRa等低功耗广域网络(LPWAN)终端提供能量支持,让此前依赖于电池工作的节点可以彻底摆脱电池,实现更长生命周期。低功耗是物联网发展的一条主线降低终端节点功耗一直是物联网发展中的核心主题之一,过去十余年产生了多项技术创新,对降低物联网节点功耗有明显的作用,目前也已发展成为物联网产业界最受关注的领域,可以说低功耗是物联网发展的一条主路径。 以蜂窝物联网为例,早在2009年,3GPP在其R8版本标准中,就对低功耗的蜂窝物联网接入终端定义了LTE Cat.1的标准,经过多年发展,Cat.1已成为蜂窝物联网的主力之一;更吸引业界目光的NB-IoT在2016年推出首个标准,其最大的卖点也是进一步降低了功耗,在特定场景电池供电5-10年也能驱动其工作;近期,5G R17冻结在即,其中RedCap(缩减能力终端)备受关注,也是在很大程度上降低了5G物联网终端的功耗。在非蜂窝物联网领域,最为典型的低功耗广域网络技术LoRa也是近年来物联网的热点,支持了大量传感器终端低功耗接入;局域物联领域也将降低功耗作为其核心技术路径之一,如蓝牙每推出一代新技术都会将低功耗作为其重要亮点,WiFi联盟推出专门的低功耗标准WiFi Halow来支持海量节点通过WiFi接入。 以上各类低功耗的技术和标准大大扩展了物联网连接的范畴。近年来,物联网新增的连接节点中,采用低功耗技术的连接占比最大,可以说低功耗已成为物联网连接的绝对主力。不过,现有低功耗技术支持的物联网节点依然需要各种形式主动供电,虽然大部分仅需普通电池或纽扣电池,但很多场景并不具备电池供电的条件,或者场景生命周期大于电池寿命会产生较高维护成本,这些是无源物联网需要支持的场景。 目前大规模商用的低功耗广域网络主要以NB-IoT、LoRa为代表,相关节点通过电池驱动工作。不过,业界已经开始探索对其无源化升级,通过环境能量采集技术,为NB-IoT、LoRa节点提供能量支持,做到免电池、免维护并永久供能,在很多场景扩大了NB-IoT、LoRa的应用范围和降低成本。NB-IoT、LoRa无源化正在进行中从公开资料看,针对NB-IoT、LoRa的无源化工作已经在探索中,也有小范围落地,这方面主要集中在环境能量采集技术与NB-IoT、LoRa结合形成的自供能模块,其中环境能量采集方案主要由一些初创型公司提供。 早在2019年,海思半导体就和荷兰一家能源管理芯片公司Nowi合作,推出能源自给的NB-IoT平台,并在2020年实现第二代升级。该平台是基于海思的Hi2115 NB-IoT解决方案和Nowi的NH2能量收集电源管理芯片,通过能量收集供能为芯片和模组长期供电,支持NB-IoT传输。Nowi是一家专注于能量采集管理的初创公司,核心技术为环境能源收集管理,其目标是为低功耗连接应用提供“一插永逸”(Plug & Forget)的供电方案。2021年1月,比利时一家名为e-peas的半导体初创公司与蜂窝芯片厂商Sequans合作,推出自供电的LTE-M/NB-IoT解决方案。该方案采用e-peas的能量收集管理IC和Sequans的Monarch LTE-M/NB-IoT芯片,e-peas的能量管理IC将能量从光伏接收电量传输到储存组件,然后供给Sequans的LTE-M/NB-IoT组件工作。双方推出的示范套装附带一个小型的室内光伏电池单元,该电池单元可使用室内照明作为环境能量来源。2021年4月,日本村田公司(Murata)与Nowi公司合作推出无电池LoRa方案参考平台,该平台使用村田的LoRa模块,由Nowi的能量采集电源管理(PMIC)芯片,该电源管理芯片为Smtech的LoRa收发器以及意法半导体的MCU供给能量。在这一参考平台下,一些场景可以大范围部署无电池的低功耗广域网络节点。在今年的MWC期间,村田公司、德国电信以及Nowi公司合作推出了“能源自主蜂窝物联网开发解决方案”,这一方案被称为NB-IoT自主开发方案(Autonomous NB-IoT Development Solution,ANDS),号称全球最小的能源采集NB-IoT模块。在这一方案中,村田提供其小尺寸的1YS NB-IoT模组,德国电信的nuSIM直接集成到村田公司的模组,Nowi提供其NH2能源采集芯片,该芯片体积为3x3mm,可为解决方案提供永久供能。这一方案涵盖了无线通信、电源管理和SIM管理。 笔者了解到,国内一家名为飞英思特的无源物联网公司,也在和相关物联网模组厂商合作,通过其微能管理模块,为NB-IoT模组提供能源,支持一些场景下NB-IoT免电池工作。 目前,NB-IoT、LoRa已经形成上亿级的连接规模,广泛分布于多个场景。若无源化技术能够成熟,则会进一步扩展NB-IoT、LoRa的应用场景,为其打开新的市场空间。进一步破解NB-IoT、LoRa无源化的壁垒目前,低功耗广域网络终端节点普遍采用电池供电来驱动其工作,基本满足了智能水表、智能燃气表、智能烟感、智能追踪定位等场景终端生命周期供电的需求。不过,低功耗广域网络终端无源化依然有不少需求,在笔者看来,这些需求主要表现在以下两方面:(1)NB-IoT、LoRa等技术比较适合部分场景对通信技术的需求,但电池供电周期低于场景对终端节点生命周期的要求,由此产生更换电池等维护成本;(2)反向散射通信技术目前还处于商业化早期,其通信距离、吞吐量、安全性等各方面尚不完善,能够应用的场景有限。以NB-IoT为例,虽然NB-IoT相比LTE功耗大幅下降,而且引入了eDRX和PSM省电模式进一步降低终端能耗来提升电池使用时间,但在实际部署场景中,具体环境和业务模型差别很大,普通电池不一定能够支持所宣称的5-10年的周期,用更大容量电池会造成成本提升和终端体积增大,不利于终端快速部署。例如,针对牛羊等牲畜的定位终端,尤其是对大量牲畜群或者散养牲畜,由于环境复杂,定位终端功耗大于理论功耗,往往需要在牲畜生长周期内重新更换电池。 不过,NB-IoT、LoRa等技术是目前成熟的大连接、长距离物联网通信技术,在这些场景中非常适合支持感知节点数据回传。目前成熟的反向散射通信技术的距离仅有10米级,传输速率也非常低,相关性能替代NB-IoT、LoRa技术,所以NB-IoT、LoRa依然是一些低功耗广域场景的首选。此时就需要采用免电池供电的技术,支持NB-IoT、LoRa终端节点更长时间、更低成本运行,因此环境能量采集技术就派上用场。笔者曾在《远低于NB-IoT功耗,无源物联网才是实现千亿级IoT连接的“杀器”!》一文中对环境能量采集进行总结,这一技术可以驱动物联网终端节点摆脱电池困扰,实现长期供能。不过,环境能量采集技术对于NB-IoT、LoRa节点的支持面临巨大的挑战,集中体现在环境能量采集技术获取的能量非常微弱,需要通过大量技术优化才能满足NB-IoT、LoRa节点通信需求。 中国科学院北京纳米能源与系统研究所专家张小涵等人在一篇学术论文中总结了典型的环境能量采集技术能够获取的能量密度如下:可以看出,典型的环境能量采集技术如太阳能、温差能、射频能、振动能等所能获取的能量密度大部分在微瓦级别,而NB-IoT、LoRa的模组的发射和接收功率都在毫瓦级别,尤其是发送数据的最大功率达到数百毫瓦。环境能量采集获取的能量微弱性、随机性使其驱动NB-IoT、LoRa模组工作面临巨大挑战。 因此,环境能量采集技术并非仅仅聚焦于能量采集,采集后对其微弱能量的管理、存储等也非常重要,尤其是能量管理异常重要,因为通过太阳能、温差、振动、射频采集转换形成的能量比较微弱且不稳定,需要能源管理相关技术有效整合起来,才能为节点供电或存储到能量储能单元中形成连续供能。目前,很多新兴的无源物联网厂商都将能量管理作为其核心技术,不断提升对采集的微弱能量管理的效率,比如采用采用优化的最大功率点跟踪(Maximum Power Point Tracking)算法等手段。笔者曾和飞英思特团队交流,获知其为了获得较好的微能量管理效率,尝试过数百种组合,实现七种模块组合的低功耗微能管理架构。 能量采集技术尤其是微能管理技术的进展,为NB-IoT、LoRa的无源化提供了解决方案。微能管理领域也吸引了大量厂商入局,除了新兴的无源物联网企业,一些传统的半导体厂商如德州仪器、安美森等也非常重视微能管理技术和产品的提升。当然,还有一个老生常谈的因素就是成本,当能量采集系列技术支撑的自供能方案能够显著低于现有电池供电的方案,相信在很多场景能够得到NB-IoT、LoRa方案商的青睐,也就能大幅扩展NB-IoT、LoRa的市场空间。       原文标题 : NB-IoT和LoRa不用电池也可以工作:无源物联网为LPWAN开辟新机遇!
  • [行业资讯] 音视频物联网快速增长 智慧物联的下一站在哪?
      随着5G、数字化技术的应用发展,万物互联的智能物联网(IoT)时代正款款走来。传统的音视频模式已不能适应现代用户的需求,推出先进的数字化和模块化的音视频技术及系统成为行业趋势,各行业领域的技术和产品服务商也开始抢滩布局这个蓝海市场。  6月28日,《中国经营报》记者从声网方面获悉,其正式推出“灵隼物联网云平台”。据悉,该产品平台专注于智能音视频设备的低代码、端到端开发平台,提供完整的IoT场景化解决方案。  “音视频物联网的演进,从视听上云、即时连接到目前阶段需要随时随地的实时互动,发展过程中,实时音视频技术在其中的应用占据越来越重要的位置。”声网IoT行业产品负责人侯云忆对记者表示。  门槛高、体验差是行业通病  2020年,全球IoT设备连接数量首次超过非IoT设备。其中,在消费产品设备端,随着网络带宽的提升、硬件性能的提升,超高清和沉浸式的新型多媒体终端设备快速增长,常见的有智能机器人、智能车载、智能手表、智能门铃、智能门锁等,而这些设备场景的互动都需要实时音视频技术的支持,音视频物联网正迎来快速增长期,设备的“眼睛”和“耳朵”将无处不在。  虽然市场在高速增长,但音视频物联网的开发门槛依然很高。首先,对物联网的从业者来说,音视频智能设备面世前,需要面临从芯片、模组到软件方案选型时的平台兼容难题;其次嵌入式、客户端、管理后台等一整套业务逻辑的开发周期也较长;同时音视频体验、网络环境等性能问题成为难以逾越的大山。从用户的角度,则是希望在可以快速连接设备的同时拥有流畅清晰的视频和语音互动体验。  以智能门铃为例,想要完成该产品的开发,厂商常规的解决方案有两种:一是自研物联网平台,需要面临开发成本高、硬件方案选型难、开发周期长、产品上线慢的困难;二是选择经典的IoT平台,这种窄带数据平台,音视频通常为附加的增值功能,又会面临音视频体验差、平台缺乏开放性、功能同质化严重等问题。  总结来说,目前物联网市场上,很难有一个“体验好用、开发易用”的音视频物联网平台。基于以上物联网平台开发门槛高、音视频体验差等难点,声网推出了灵隼物联网云平台产品,有Turnkey、自定义两种低代码开发模式,为开发者提供一个端到端、低代码开发平台。据介绍,基于该平台,开发者能在一小时内构建音视频智能硬件的示例场景。  聚焦在物联网视频硬件研发生产的爱培科产品经理郭力为对记者表示,以前开发搭载适配硬件的IoT平台,需要集成各个组件、移植SDK、优化CPU内存等。移植这种端对端一站式方案,确实能更快完成产品应用的开发和落地,降低研发成本和缩减上线周期。  智慧物联的下一站  不过,物联网业务依然存在诸多痛点难点,实时音视频使用对产品的价值到底在哪?未来智慧物联又将如何发展?  谈及物联网业务当下存在的痛点,博流智能科技产品市场开发总监杜瑞彬告诉记者,“当下物联网行业存在三大痛点,一是产品链路太长,需要经历硬件方案的导入到对接云平台再到落地工厂进行产出;二是不同的硬件产品通过品牌商背后的平台实现互联互通做的还不够;三是智能硬件还需要进一步深入用户场景。”  方块连连总经理黄友谊则认为,以智能门锁行业为例,该行业产品同质化严重,因此行业都在拓展实时音视频通话作为附加功能,但通话的体验又很难保障。基于RTC技术,方块连连可实现优质的远程通话能力,小程序即可接入的方式也为用户提供了便利。  而在元宇宙火热的当下及未来,智慧物联的下一站在哪?对此,侯云忆表示,物联网将是元宇宙最重要的感知基础设施,如果世界是元宇宙,实时音视频就是其中的神经网络,最终推动物联网走向人机协同,人机共融。  亚马逊云科技物联网生态负责人田龙强则向记者强调说,实时音视频本身能支撑更广泛连接传感器,能够接入到各个产品中,不管是VR,还是未来的相关硬件产品,将会给用户带来体验上的大幅提升。谈及万物互联时,他指出伴随万物互联的发展,用户和企业对于隐私也越发重视,私域物联网是行业目前重要的关注方向。
  • [技术干货] 【论文分享】6G卫星物联网移动性管理:挑战与关键技术
    6G卫星物联网移动性管理:挑战与关键技术白卫岗, 盛敏, 杜盼盼西安电子科技大学,陕西 西安 710071摘要卫星物联网是面向6G的新一代物联网的重要构成部分,是实现“泛在连接”愿景的重要网络形态。移动卫星与终端之间的相对高速运动引起了服务连续性问题。阐述了卫星物联网移动性管理技术,分析了双移动、广域覆盖以及需求非均匀等因素给卫星物联网移动性管理带来的新挑战,从移动性管理架构、预测及增强等方面探讨了面向6G卫星物联网移动性管理的关键技术。关键词: 6G ; 卫星物联网 ; 移动性管理1 引言物联网(IoT,Internet of things)是将各种传感设备与互联网结合形成的一个万物互联的网络,可实现在任何时间、任何地点的人、机、物之间的互联互通。地面物联网在多个领域得到了广泛应用,如智能家居、智能电网、环境监控、智慧城市等。随着 5G 网络的发展,地面物联网迎来了广阔的应用前景,2025年全球物联网连接数量将达到甚至超过270亿[1]。受限于覆盖能力及建设成本,以互联网、传统电信网、蜂窝网络等为信息承载体的地面物联网的发展受到一定制约。2019年11月,我国正式启动了6G网络研发工作,6G网络将信息覆盖延伸至太空、天空、陆地和海洋空间,卫星网络被认为是 6G 网络的重要组成部分,能够为地面通信“盲区”提供信号覆盖。以卫星网络为信息载体实现人、机、物互联的卫星物联网是面向 6G 的新一代物联网的重要构成部分,为物联网的发展提供了更广阔的平台[2]。相对于地面物联网,卫星物联网在覆盖范围、通信容量以及网络建设等方面有明显的优势,尤其是低轨卫星星座系统。由低轨卫星构成的星座系统能够实现对全球的无缝覆盖。新兴的低轨星座容量提升显著,如星链星座(4 425 颗卫星)吞吐量可达到23.7 Tbit/s[3]。此外,低轨卫星空间组网不受地面地形与规划的限制,且在自然灾害导致地面网络被损坏的情况下仍可正常工作。拥有上述优势的同时,低轨卫星与终端之间的相对高速运动导致终端在网络中的接入位置不断变化,严重影响服务的连续性和可靠性。为了保障网络服务质量,移动性管理是面向6G卫星物联网的关键。2 卫星物联网发展现状与挑战2.1 卫星物联网发展现状轨道通信(Orbcomm)、高级研究与全球观测卫星(ARGOS)和国际海事卫星(Inmarsat)是提供卫星物联网服务的典型代表[1,4]。Orbcomm 系统应用领域广泛,包括交通运输、油气田、水利、环保、渔船和消防报警等。ARGOS 系统能快速、准确、大范围地收集全球海洋环境参数,服务全球范围近两万个浮标终端[5]。Inmarsat 的 LoRaWAN 网络可在全球提供物联网解决方案[6]。此外,Telesat、OneWeb、SpaceX等航天巨头正在加速推进其低轨星座的建设,以支持未来卫星物联网服务。国内的天通一号、北斗系统均可提供卫星物联网服务[1]。鸿雁、虹云等低轨星座计划相继发布,首个“天基物联网”被命名为“行云工程”,计划由80颗低轨卫星组成[7]。此外,九天微星的“瓢虫系列”7颗卫星于2018年成功入轨,在野生动物保护、野外应急救援、车辆船舶监测、物流追溯等领域开展星座物联网验证[8]。2019年,北京国电高科科技有限公司研制的天启·沧州号卫星成功入轨,实现了天启物联网星座初步组网运行[9]。从终端接入模式看,卫星物联网结构可分为间接接入和直接接入[10]。间接接入模式的终端先接入地面物联网系统,然后通过卫星中继实现连通。直接接入模式的终端直接接入卫星网络,以卫星网络为传输载体开展物联网服务。面向6G 网络泛在连接愿景,在沙漠、无人区、海洋等区域的物联网终端直接接入更具吸引力。但无论是以低轨卫星作为中继的间接模式,还是以卫星网络作为接入和传输载体的直接模式,都存在服务连续性问题。2.2 卫星物联网移动性管理新挑战现有移动性管理技术主要针对蜂窝网络、WLAN等典型地面网络设计。卫星物联网移动场景复杂、全球覆盖、用户群海量及需求非均匀等新特征将给卫星物联网的移动性管理带来新的挑战。2.2.1 双移动现象导致移动性管理场景复杂地面物联网主要由终端移动引发移动性切换,卫星物联网中移动性切换的触发是双向的。从终端侧来看,包括终端的位置移动(如个体移动、传感设备随汽车、动车移动等)以及终端业务需求的移动。从网络侧来看,包括卫星节点的高速运动,导致星地、星间链路的断续连通以及网络状态的移动,如信道状态的变化、网络拥塞等。将上述终端侧和网络侧两种移动引起的移动性切换称为双移动现象。进一步地,终端侧业务与移动场景的复杂性会加剧双移动中的移动性管理难度。卫星物联网的业务类型众多,传输的数据类型、持续时长、业务量、频率、峰值时段等个性化显著。终端移动范围与速度差异化明显,从个体低速移动到飞机、导弹的超高速运动,移动范围从小区内可延伸到整个地球。除了终端独立移动外,还存在大量终端群组移动,如部署在交通工具内的各类信息终端、个人可穿戴传感器等。相对于地面物联网主要由终端移动引发移动性切换,双移动现象中的移动性管理更复杂。2.2.2 广域覆盖导致移动性管理过程复杂首先,相对于地面数千米的覆盖,卫星节点的覆盖范围通常在数千千米量级,可同时接入的终端数量巨大。其次,低轨卫星相对地面高速运动,终端对其可视时间通常只有几分钟,如 Iridium 的单星覆盖时间约为10 min。终端需要在波束、卫星节点之间频繁切换,才能保证服务的连续性。此外,星地大尺度信道使得移动性管理信令传播时延长,进而终端切换时延增加、效率降低。因此,卫星物联网移动性管理需要综合考虑海量终端、频繁切换以及信令传播时延长等影响。2.2.3 需求非均匀导致移动性资源调度复杂由于不同地区的人口密度不同、经济发展不均等因素,物联网业务呈现需求非均匀的特征。以物流监测业务需求为例,我国物流监测需求分布以“胡焕庸线”为界,东西部地区的业务需求差异明显。当卫星网络资源以均匀方式覆盖时,地球自转与卫星节点的运动使得卫星节点会交替覆盖业务密集与稀疏区域,此时需要动态调整资源调度策略以适应不同覆盖区的移动性管理要求,保证业务的连续性及服务质量。3 结束语6G 网络全球覆盖的能力给物联网的发展提供了更加广阔的平台,但移动卫星节点与终端设备之间的相对高速运动带来了服务连续性问题。本文首先分析了双移动、广域覆盖以及需求非均匀等因素对卫星物联网移动性管理的挑战,然后阐述了卫星网络移动性管理技术,讨论了应对上述挑战的移动性管理关键技术,包括面向卫星物联网的移动性管理架构、基于预测的移动性切换以及移动性管理增强技术等。最后,分析了面向卫星物联网移动性管理技术的发展趋势。The authors have declared that no competing interests exist.作者已声明无竞争性利益关系。4 原文链接http://www.infocomm-journal.com/wlw/article/2020/2096-3750/2096-3750-4-1-00104.shtml
  • [技术干货] C语言程序设计全套知识点合集(物联网、单片机底层开发必备)
    一、前言在物联网系统开发中,离不开各种传感器、单片机的程序开发;一个简单的物联网系统构成应该是: 感知层 + 网络传输层 + 平台管理层 。具体而言:感知层:由各种各样的嵌入式设备构成。而单片机是嵌入式系统的硬件组成,是嵌入式系统软件运行的载体和必要条件;嵌入式系统在整个物联网框架下,更多的体现为感知层的角色,作为智能设备存在于整个物联网体系中,是物联网数据的采集来源。网络传输层:底层部分由嵌入式设备到平台的IoT网络构成,比较常见的网络主要有NB,Lora,Zigbee,GSM,LTE等。顶层部分是由网络到TCP/IP网络的转化。平台管理层:这部分主要完成不同数据传输协议的转化,实现数据的远程存储和设备远程管理。比如有的智能设备利用lwm2m协议传送数据,有的使用的是MQTT,还有的喜欢用coap封装数据。平台需要根据协议,完成上报数据的解析,设备的管理和命令的下发动作。从组成关系来讲,物联网由嵌入式设备构成,嵌入式设备中包含单片机。作为一名物联网工程师,如果主要是负责感知层的开发,那么C语言肯定是一项必须精通的语言。目前C语言还是单片机里的主流开发语言,这篇合集主要就是介绍C语言的知识点,从基本数据类型、变量、数组、指针、结构体顺序来介绍C语言的学习思路。二、C语言基础知识点2.1 C语言-基本数据类型与位运算https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=190852这篇文章作为基础知识点,总结C语言的基本数据类型有哪些,浮点数的精度,整数变量的空间范围,变量定义语法,变量命名规则,浮点数打印格式,基本数据类型printf对应的打印、位运算的知识点。2.2 C语言-语句(if,for,while,switch,goto,return,break,continue)https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=190854这篇文章作为C语言基础知识点,介绍C语言常用的几个语句的用法、规则、使用案例。介绍的语句如下: if..else 判断语句 for循环语句 while循环语句 do..while循环语句 switch 语句 goto 语句 return 语句 break 语句 continue 语句2.3 C语言-数组https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=190858C语言的数组是一个同类型数据的集合,主要用来存储一堆同类型的数据。程序里怎么区分是数组?[ ] 这个括号是数组专用的符号. 定义数组、 访问数组数据都会用到。2.4 C语言-函数的定义、声明、传参https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=190859C语言里函数是非常重要的知识点,一个完整的C语言程序就是由主函数和各个子函数组成的,主函数调用子函数完成各个逻辑功能。2.5 C语言-一维指针定义与使用https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=190911指针在很多书本上都是当做重点来介绍,作为C语言的灵魂,项目里指针无处不在。比如: 指针作为函数形参的时候,可以间接修改源地址里的数据,也就相当于解决了函数return一次只能返回一个值的问题。指针在嵌入式、单片机里使用最直观,可以直接通过指针访问寄存器地址,对寄存器进行配置;计算机的CPU、外设硬件都是依靠地址操作的。2.6 C语言-内联函数、递归函数、指针函数https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=190915这篇文章介绍C语言的内联函数、递归函数、函数指针、指针函数、局部地址、const关键字、extern关键字等知识点;这些知识点在实际项目开发中非常常用,非常重要。2.7 C语言-void类型作为万能指针类型https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=190917void类型在基本数据类型里是空类型,无类型;void类型常用来当做函数的返回值,函数形参声明,表示函数没有返回值,没有形参。void类型不能用来定义变量,因为它是空类型–可以理解为空类型。2.8 C语言-指针作为函数形参类型https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=191033C语言函数里最常用就是指针传参和返回地址,特别是字符串处理中,经常需要封装各种功能函数完成数据处理,并且C语言标准库里也提供了string.h 头文件,里面包含了很多字符串处理函数;这些函数的参数和返回值几乎都是指针类型。这篇文章就介绍如何使用指针作为函数参数、并且使用指针作为函数返回值。2.9 C语言-字符串处理https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=191034字符串在C语言里使用非常多,因为很多数据处理都是文本,也就是字符串,特别是设备交互、web网页交互返回的几乎都是文本数据。字符串本身属于字符数组、只不过和字符数组区别是,字符串结尾有’\0’。 字符串因为规定结尾有'\0',在计算长度、拷贝、查找、拼接操作都很方便。2.10 C语言-结构体与位域https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=191137C语言里的结构体是可以包含不同数据类型和相同数据类型的一个有序集合,属于构造类型,可以自己任意组合,并且结构体里也可以使用结构体类型作为成员。结构体在项目开发中使用非常多,无处不在,有了结构体类型就可以设计很多框架,模型,方便数据传输,存储等等。2.11 C语言-学生管理系统(结构体+数组实现)https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=191138前面文章里介绍了结构体类型,知道结构体类型里可以存放不同的数据类型,属于一个有序的集合。这篇文章就使用结构体知识点完成一个小练习,使用结构体+数组设计一个简单的学生管理系统,作为结构体知识点的巩固练习。功能如下:(1). 欢迎界面提示(2). 输入密码登录(3). 功能: 录入学生信息、按照学号排序、按照成绩排序、输出所有学生信息、输出指定学生信息(学号、姓名、成绩)、计算成绩平均值值输出打印、删除指定学生信息、增加新的学生信息。(4). 功能模块采用菜单方式选择2.2 C语言-预处理(#define、#if...)https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=191139在C语言程序里,出现的#开头的代码段都属于预处理。预处理:是在程序编译阶段就执行的代码段。比如: 包含头文件的的代码#include <stdio.h> #include <stdlib.h> #include <string.h>后续这篇帖子会持续更新,持续加入C语言后面的知识点,方便大家寻找对应的知识点。
  • [赛事资讯] 2022年嵌入式大赛算法组复赛
    复赛:
  • [行业资讯] Arm发布全新图像信号处理器 助推物联网及嵌入式市场视觉系统发展
    近日,Arm宣布推出全新Arm Mali-C55图像信号处理器(ISP),这是 Arm迄今为止面积最小且可配置性最高的ISP产品,并已获得合作伙伴的青睐,包括首家公开授权许可客户瑞萨电子(Renesas)。Mali-C55提供更卓越的图像质量功能,可在各种不同的照明和天气条件下运作,专为在面积和功率受限的应用中实现最佳性能和功能而打造,是智能摄像头和边缘人工智能视觉用例的理想之选。Mali-C55 ISP发布Arm物联网兼嵌入式事业部副总裁Mohamed Awad表示:“ISP仍是最重要的信息生成设备之一,可支持商用、工业或家用智能摄像头及无人机等众多物联网视觉系统应用。随着对未来设备中更多、更高质量图像处理需求的不断增长,Arm也将持续投资于ISP技术路线图。”Mali-C55所具备的先进技术可为多个市场提供更为卓越的功能。监控和安防摄像头将能检测更多关键细节,例如可准确识别以时速高达75英里(120.7公里)行驶的汽车的车牌信息;家用摄像头和安防系统将可采集更高分辨率的室内外图像;而智能家居中心则可有效添加安全视觉解锁等高级功能。Arm同时也为开发者提供可用于控制ISP的完整软件包以及一整套调整和校准工具,以帮助合作伙伴为其应用实现所需的图像质量。此外,在Arm最新的物联网全面解决方案未来产品路线图中所包含的视觉全面解决方案也将集成Mali-C55。以最小的面积和功耗挑战图像质量的上限Mali-C55具备多达八个独立输入的多摄像头功能,可支持高达 8K 的图像分辨率和4800万像素的最大图像尺寸,从而实现了图像质量、吞吐量、功耗与芯片面积的最高效组合。立足于Mali-C52 ISP ,Mali-C55通过多种功能实现无与伦比的图像质量,包括改进色调映射和空间降噪,增强对高动态范围 (HDR) 传感器的支持,以及与机器学习 (ML) 加速器的无缝集成,以利用神经网络实现各种去噪技术。通过配置多个Mali-C55 ISP,视频会议等需要大于4800万像素的应用也可实现更大的图像尺寸。Mali-C55 ISP芯片面积和成本对于嵌入式及物联网视觉应用至关重要。Mali-C55的芯片面积仅为前几代产品的近一半,并且可提供更强大的功能,大幅减少功耗并延长电池续航时间,与此同时,还降低了这些设备的成本。视觉系统需要先进的机器学习技术随着边缘ML的应用成为趋势,通过将更多的ISP集成至SoC ,高级的图像处理功能将得以被充分利用。借助Mali-C55与ML加速器之间轻松地实现集成,ISP的输出可被直接发送至ML加速器中,如此一来,Arm可在高质量视觉系统设备中,将其设备端处理能力提升到全新水平。这样便可通过减少数据从设备发送到云端,并在不影响推理能力的情况下,降低成本,且缩短处理时间。可配置性是服务多样化市场的关键鉴于需要更先进的视觉系统的应用相当广泛,因此成像技术需适应特定的市场需求。举例而言,低成本的家用摄像头系统可能仅需一组简单且有限的功能,而商用摄像头则需要高分辨率、降噪、更强的安全性等更为复杂的功能。芯片合作伙伴和 OEM 厂商需要能够根据其应用需求自行添加或删除功能的弹性,因此Arm将Mali-C55设计为可配置性最高的ISP。除了多摄像头支持和与ML加速器集成之外,Mali-C55还配备了行业标准的AXI和AHB接口,以便与基于Cortex-A或Cortex-M的SoC轻松进行集成。Mali-C55 ISP显示了Arm对为业界提供领先成像技术的不懈追求。在不断增长的智能摄像头和边缘AI视觉市场,这项新技术将赋能SoC架构师、成像专家和嵌入式软件开发者打造出市场领先的产品。原文:https://new.qq.com/rain/a/20220611A03PAB00.html
  • [行业资讯] OPCUA+MQTT构建物联网通用框架【转载】
    写在前面:为了应对标准化和跨平台的趋势,更好的推广OPC,OPC基金会在OPCDA成功应用的基础上推出了一个新的OPC标准——OPC UA,OPCUA不再基于分布式组件对象模型(DCOM),而是以面向服务架构(SOA)为基础,因此,在未来的若干年中,OPCUA将逐步取代OPCDA,成为新一代的OPC标准,助力工业4.0。而提起MQTT,或许大家有些陌生。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。具有轻量、简单、开放和易于实现的特点,尤其在物联网IOT领域应用非常广泛。物联网一直都是一个很热门的话题,而数据上云,也是现在工业上很普遍的一个需求。至于如何实现,各个厂家都提供了各种不同的解决方案,无分好坏,最适合的就是最好的。刚看完一篇名为《OPCUA+MQTT=物联网扩展的热门组合》的公众号文章之后,文思泉涌,想着如何将OPCUA与MQTT联合起来,构建一个物联网通用框架,实现数据远传。01PART整体网络架构很多时候,我们的需求是这样的:现场有N台不同的设备或系统,每台设备或者系统的协议是各不相同的,希望可以用一种通用并且简单的方法,将这些数据传到云端,实现远程访问。这样的需求,在上位机中其实是物联网最典型的应用之一,那么采用OPCUA+MQTT或许是个不错的选择,整体的框架设计如下:图表 1 整体网络架构为了实现整体功能,这里的设备层,采用Modbus Slave,基于Modbus TCP协议来做仿真测试,增加5个变量,分为为压力1-压力5,对应地址从40001-40010,数据类型为浮点型,运行Modbus Slave仿真结果如下:图表 2 ModbusTCP服务器02PART服务层至于服务层,主要是OPCUA服务器的开发应用,这里我们有两个选择,一种是采用第三方的OPC软件,比如Kepware、Knight、Matrikon这些公司的产品,这种比较容易,做下相关配置即可,另外一种方式就是自己开发,相对来说难度要大一些。这里我使用自己开发的一款软件——上位机CMS配置一体化软件,通过简单配置,在10秒内,实现了ModbusTCP客户端数据通信,结果如下:图表 3 ModbusTCPClient通信测试然而,这部分,仅仅是实现了ModbusTCP客户端的功能,如果要实现OPCUA服务器的功能,需要激活一下OPCUA服务器,在服务器节点下添加一台OPCUA服务器即可,添加完成后,保存重新运行,结果如下: 图表 4 开启OPCUAServer为了测试OPCUA服务器是否开启成功,需要进行测试,可以使用官方软件UAExpert软件来测试一下:图表 5 OPCUAClient通信测试03PART数据层(1)在实现数据层功能之前,需要创建一个MQTT服务器,这里基于.NET CORE编写了一个MQTT服务器的程序,并在阿里云服务器中部署运行(这里要注意开放端口1883),运行效果如下: 图表 6 MQTT服务器(2)MQTT服务器创建完成之后,重新打开一个CMS配置软件来进行OPCUAClient的功能测试,上一节中的UAExpert是官方的OPCUA客户端软件,仅用于测试使用,这里的使用的CMS配置软件的OPCUAClient是自己开发的客户端程序,经过配置之后,运行结果如下: 图表 7 OPCUAClient(3)在CMS配置人家的服务器节点中,右击添加一个MQTTClient,根据MQTT服务器配置相关IP、用户、密码、主题及更新时间等信息,具体如下:图表 8 MQTT客户端配置(4)配置完成后点击启动按钮,整体运行之后,可以看到MQTT连接成功,并按照设定的周期将最新的数据发布到指定的主题中,效果如下:图表 9 启动MQTT客户端(5)打开MQTT服务器,也可以看到不断地有数据发布过来,这里为了便于观察结果,将压力1的数据仿真成每秒加1,MQTT服务器数据接收如下:图表 10 MQTT服务器数据接收04PART应用层通过以上的相关部署,即可实现整个OPCUA+MQTT的实现,实际应用时,只需要开启一个MQTT客户端,连接指定的MQTT服务器,并订阅相应的主题,即可获取到设备层的实时数据,这里使用一个常用的MQTT客户端软件,即MQTT.fx: 图表 11 MQTT.fx通信测试写在最后:本文旨在结合当下主流的OPCUA统一架构和MQTT通信协议,实现一种数据上云的途径,对于自动化行业的上位机工程师来说,可以拓展大家的思路。未来更多是IT和OT相结合的一种趋势,因此,作为每个工控技术人员,都要时刻保持危机感,不断学习,不断进步,这样才能更好地面对未来工业的快速发展。转载自https://iot.ofweek.com/2022-03/ART-132200-11000-30551999.html
  • [技术干货] 基于CC2530和数字温湿度传感器的温湿度采集系统(报告)
    摘要嵌入式系统是以应用为中心,以计算机为基础,软硬件可定制,适用于不同应用场合对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。嵌入式系统已广泛应用于各种领域,如通信领域、工业控制、交通领域、医疗卫生、消费娱乐等。正如温湿度采集系统的设计,其包括了数据的采集过程、传输过程以及数据的处理过程是嵌入式系统在国家森林火灾的防范、大型粮库的温湿度控制以及家庭温湿度控制等方面的典型应用。由于传统的有线方式在数据的检测、采集、以及传输过程中需要大量的节点且这些节点不集中,因此需要大量布线.为了避免该问题本设计主要从无线传感方向进行改进,本设计对温湿度的读取是利用CC2530的I/O(P1。0和P1.1)模拟一个类IIC的过程,对光照的采集则使用内部的AINO通道。该系统使用CC2530读取温湿度传感器SHT10的温度和湿度数据,并通过CC2530内部的ADC得到光照传感器的数据。最后将采样得到的数据转换然后在LCD上显示。前言本设计是一种基于CC2530和数字温湿度传感器的温湿度采集系统。即该系统是采用Zigbee无线通信技术结合传感器,并通过运用Zigbee协议架构组建无线传感网络,来实现主从节点的数据采集和传输的。同时,需要在网络层通过AODV路由协议来进行节点间的连接以及数据的收发。总之,基于无线传感技术的无线网络传感器是一种将传感器、控制器、计算能力、通信能力完美的结合于一身的嵌入式设备。它们跟外界的物理环境交互,实时的采集信息,并且将收集到的信息通过无线传感器网络传送给远程用户。无线网络传感器一般是由一个低功耗的微控制器(MCU)和若干个存储器、无线电/光通信装置、传感器等组件所集成的,通过传感器、动臂机构、以及通信装置和它们所处的外界物理环境进行交互。由此而引入的无线传感网络更是一种开创了新的应用领域的新兴概念和技术,广泛被应用于医疗领域、大规模环境监测、智能建筑、战场监视、智能家装、工业自动化和大区域内的目标追踪等领域。如,在医院Zigbee网络可以帮助医生及时并准确的收集急诊病人的信息及相关度检查结果,从而快速准确的作出诊断;同时,对一些特殊的病人,可让其携带Zigbee终端而对其进行24小时的体温、脉搏控制.生命诚可贵,时间价更高!又如,在工业控制领域内,就可以很好的通过无线传感网络实现厂房内不同区域的温湿度的检测及控制,以及相关机器运转状况是否正常的有关信息,统计库存量,等等.总的来说,我们的工作及生活在无形的改变着,变得更精致更高效更美丽。而这无形中进行着的神奇改变的关键莫过于高端的技术——嵌入式系统开发技术及无线技术.一 基本原理1.1 温湿度数据采集原理温湿度探头直接使用IIC接口进行控制,本实验将使用CC2530 读取温湿度传感器SHT10的温度和湿度数据,并将采样到的数据转换然后再LCD显示。其中对温湿度的读取是利用CC2530的I/O(P1。0和P1.1)模拟一个类IIC得过程。其中该系统所使用的SHT10 是一款高度集成的温湿度传感器芯片, 提供全标定的数字输出。它采用专利的CMOSens 技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电容性聚合体测湿敏感元件、一个用能隙材料制成的测温元件,并在同一芯片上,与 14 位的 A/D 转换器以及串行接口电路实现无缝连接。1。1。1SHT10 引脚特性1。 VDD,GND SHT10 的供电电压为 2.4~5.5V.传感器上电后,要等待 11ms 以越过“休眠"状态。在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个 100nF 的电容,用以去耦滤波.2. SCK 用于微处理器与 SHT10 之间的通讯同步。由于接口包含了完全静态逻辑,因而不存在最小 SCK 频率.3。 DATA 三态门用于数据的读取。DATA 在 SCK 时钟下降沿之后改变状态,并仅在 SCK 时钟上升沿有效.数据传输期间,在 SCK 时钟高电平时,DATA 必须保持稳定。为避免信号冲突,微处理器应驱动 DATA 在低电平。需要一个外部的上拉电阻(例如:10kΩ)将信号提拉至高电平。上拉电阻通常已包含在微处理器的 I/O 电路中。(1)向 SHT10 发送命令:用一组“ 启动传输”时序,来表示数据传输的初始化。它包括:当 SCK 时钟高电平时DATA 翻转为低电平,紧接着 SCK 变为低电平,随后是在 SCK 时钟高电平时 DATA 翻转为高电平。后续命令包含三个地址位(目前只支持“000”,和五个命令位。SHT10 会以下述方)式表示已正确地接收到指令:在第 8 个 SCK 时钟的下降沿之后,将 DATA 拉为低电平(ACK位).在第 9 个 SCK 时钟的下降沿之后,释放 DATA(恢复高电平)。(2)测量时序(RH 和 T):发布一组测量命令(‘00000101’表示相对湿度 RH,‘00000011’表示温度 T)后,控制器要等待测量结束.这个过程需要大约 11/55/210ms,分别对应 8/12/14bit 测量。确切的时间随内部晶振速度,最多有±15%变化。SHTxx 通过下拉 DATA 至低电平并进入空闲模式,表示测量的结束。控制器在再次触发 SCK 时钟前,必须等待这个“数据备妥"信号来读出数据。检测数据可以先被存储,这样控制器可以继续执行其它任务在需要时再读出数据。接着传输 2 个字节的测量数据和 1 个字节的 CRC 奇偶校验. 需要通过下拉 DATA 为低电平,uC以确认每个字节.所有的数据从 MSB 开始,右值有效(例如:对于 12bit 数据,从第 5 个SCK 时钟起算作 MSB; 而对于 8bit 数据, 首字节则无意义)。用 CRC 数据的确认位,表明通讯结束。如果不使用 CRC—8 校验,控制器可以在测量值 LSB 后,通过保持确认位 ack 高电平, 来中止通讯.在测量和通讯结束后,SHTxx 自动转入休眠模式。(3)通讯复位时序:如果与 SHTxx 通讯中断,下列信号时序可以复位串口:当 DATA 保持高电平时,触发SCK 时钟 9 次或更多.在下一次指令前,发送一个“传输启动”时序。这些时序只复位串口,状态寄存器内容仍然保留。二 系统分析嵌入式温湿度采集系统是一种基于CC2530和数字温湿度传感器SHT10的温湿度采集系统。该系统采用Zigbee无线通信技术结合传感器,通过运用Zigbee协议架构组建无线传感网络,实现主从节点的数据采集和传输,以及一点对多点,两点之间的通信。并且也是基于Zigbee协议栈的中心节点和终端节点的协议传输,主要是从Zigbee协议栈网络层里AODV路由协议着手,在网络层通过AODV路由协议进行节点间的连接以及数据的收发。2.1具体步骤描述1、给智能主板供电(USB 外接电源或 2 节干电池); 2、将一个无线节点模块插入到带 LCD 的智能主板的相应位置; 3、将温湿度及光电传感器模块插入到智能主板的传感及控制扩展口位置; 4、将 CC2530 仿真器的一端通过 USB 线(A 型转 B 型)连接到 PC 机,另一端通过 10Pin下载线连接到智能主板的 CC2530 JTAG 口(J203); 5、将智能主板上电源开关拨至开位置。按下仿真器上的按钮,仿真器上的指示灯为绿色时,表示连接成功; 6、使用 IAR7。51 打开“…\OURS_CC2530LIB\lib10(HumiTempLight)\ IAR_files”下的HumiTempLight.eww 文件,下载运行程序; 7、观察 LCD 上温度、湿度和光照强度的变化; 8、用一个物体挡住光照传感器的光线,观察 LCD 上光照强度数据的变化; 9、向温湿度传感器吹一口气体,观察 LCD 上温湿度数据的变三 详细设计本设计是基于CC2530的温湿度数据采集系统设计。因此,其重点是温湿度数据采集设计的实现,主要可分为二大部分,一是实现无线传感的硬件模块;二是实现无线传感的软件支持,也就是基于Zigbee协议架构的编程.实现温湿度数据采集的硬件部分主要包括:无线传感基本结构、无线传感实现原理、本设计所使用的实验箱以及软件支持、常见的无线传感模块以及实现基于CC2530的温湿度采集系统节点模块设计。实现温湿度数据采集的软件部分主要包括:Zigbee协议栈整体架构、Zigbee协议栈网络层、AODV路由协议。3.1实现温湿度数据采集的硬件部分嵌入式温湿度采集系统设计的硬件部分可以大体有无线传感基本结构、无线传感实现原理、本设计所使用的实验箱以及软件支持、常见的无线传感模块以及实现基于CC2530的温湿度采集系统节点模块设计等组成.其具体内容如下:3.1.1无线传感基本结构及实现原理无线传感器网络在设计目标方面是以数据为中心的,在无线传感器网络中,因为节点通常运行在人无法接近的恶劣甚至危险的远程环境中,所以除了少数节点需要移动以外,大部分节点都是静止不动的。在被监测区域内,节点任意散落,节点除了需要完成感测特定的对象以外,还需要进行简单的计算,维持互相之间的网络连接等功能。并且由于能源的无法替代以及低功耗的多跳通信模式节,设计无线传感节点时,有效的延长网络的生命周期以及节点的低功耗成为无线传感器网络研究的核心问题,其无线传感节点模型如下图1—2所示。无线传感网络的建立是基于传感器加无线传输模块的,传感器采集的数据,简单处理后经过无线传输模块传到服务器或应用终端。目标、观测节点、传感节点和感知视场是无线传感器网络所包括的4个基本实体对象.大量传感节点随机部署,单个节点经过初始的通信和协商,通过自组织方式自行配置,形成一个传输信息的单跳链接或一系列无线网络节点组成的网络,协同形成对目标的感知视场。传感节点检测的目标信号经过传感器本地简单处理后通过单播或广播以多跳的方式通过邻近传感节点传输到观测节点。用户和远程任务管理单元则能够通过卫星通信网络或Internet等外部网络,与观测节点进行数据信息的交互。观测节点向网络发布查询请求和控制指令,接收传感节点返回的目标信息。3.1.2使用的实验箱以及软件支持物联网创新实验系统IOV—T—2530采用系列传感器模块和无线节点模块组成无线传感网,扩展嵌入式网关实现广域访问,可实现多种物联网构架,完成物联网相关的各种传感器的信息采集、无线信号收发、Zigbee网络通讯、组件控制全过程。该工具箱提供了无线传感网通信模块、基本的传感器及控制器模块、嵌入式网关、计算机服务器参考软件等。3.1.3实现温湿度采集系统节点模块设计实验系统包含4个无线传感网通信节点和一个无线网络协调器。其中具体情况如下:无线节点模块:主要有射频单片机构成,MCU是TI的CC2530,2。4G载频,棒状天线.传感器及控制模块:系列传感器模块,包括温湿度传感模块、继电器模块和RS232模块等,也可以通过总线扩展用户自己的传感器及控制器部件.电源板或智能主板:即实现无线节点模块与传感及控制模块的连接,又实现系统供电,目前主要有两节电池供电,保留外接电源接口,可以直接有直流电供电。3.2实现温湿度数据采集的软件部分实现温湿度数据采集的软件部分主要有Zigbee技术概述、Zigbee协议栈整体架构、Zigbee协议栈网络层、AODV路由协议等几部分组成。而Zigbee协议栈网络层主要包括: 网络层概述、网络层所实现功能、网络层中常用路由协议。AODV路由协议主要包括:协议概述、协议的基本原理、AODV路由协议消息控制帧。一下将是温湿度数据采集的软件部分各部分的具体介绍:3.2.1 ZIGBEE技术概述Zigbee技术的使用与发展很大程度上弥补了无线通信市场上低功耗、低成本、低速率的空缺。同时随着Zigbee技术的深入发展和应用,越来越多的注意力和研究力量将会转到应用的设计、实现互联互通测试和市场的推广等方面。Zigbee技术的关键点是发展一种易布建、低成本、低功耗的无线网络.Zigbee技术的应用前景非常好。Zigbee在未来的几年里将在工业无线定位、工业控制、消费电子、汽车自动化、家庭网络、楼宇自动化、医用设备控制等多个控制领域具有广泛的应用,特别是工业控制和家庭自动化,将会成为今后Zigbee芯片的主要应用领域。通常符合以下条件之一的应用,都可以考虑采用Zigbee技术:(1)网点多:需要数据采集或监控的网点多。(2)低传输量:要求传输的数据量不大且要求数据成本低。(3)可靠性高:要求数据传输可靠性、全性高。(4)体积小:设备体积很小,体积较大的充电电池或者电源模块不便放置.(5)电池供电。(6)覆盖量大:所需检测点监测点多,地形复杂,需要较大的网络覆盖面积.(7)现有移动网络的覆盖盲区.(8)遥测、遥控系统:使用现存移动网络进行的低数据量传输。(9)局部区域移动目标的定位系统:使用GPS效果差、成本高的。Zigbee无线传感网络是基于IEEE802。15。4技术标准和Zigbee网络协议而设计的无线数据传输网络,该网络主要应用在压力过程控制数据采集、流量过程控制数据采集、温度湿度监控、楼宇自动化、工业控制、数据中心、社区安防、设备监控、环境数据监控、制冷监控、仓库货物监控等方面.适用于蔬菜大棚温度、湿度和土壤酸碱度监控,钢铁冶炼温度控制,煤气抄表等各个领域。这种网络主要用于无线系统中短距离的连接,提供传感器网络接入,能够满足各种传感器的数据输出和输入控制的命令和信息的需求,实现系统网络化、无线化.Zigbee技术是一种应用于各种电子设备之间的无线通信技术,这种通信组网是基于中短距离范围内、低传输速率下的。根据Zigbee技术的本质,它具有下列特性:低功耗、高度扩展性、可靠性高等。3.2.2 ZIGBEE协议栈Zigbee协议栈由一组子层组成,每一层为其上层提供一定的特定服务:一个数据实体提供数据传输服务,一个管理实体提供管理、维护等服务。每个服务实体通过一个服务接入点(SAP)为其上层提供服务接口,并且每个服务接入点(SAP)提供了一系列的基本服务指令来实现相应的功能。Zigbee协议栈中包括应以下各个子层:(1)APP(Application Programming):应用层目录,这是用户创建各种不同工程的区域,在这个目录中包含了应用层的内容和这个项目的主要内容,在协议栈里面一般是以操作系统的任务实现的。(2)HAL(Hardware (H/W) Abstraction Layer):硬件层目录,包含有与硬件相关的配置和驱动及操作函数.ZigBee硬件层通过射频固件和射频硬件提供了一个从MAC层以硬件层无线信道的接口.在硬件层中,包含一个硬件层管理实体(PLME),该实体通过调用硬件层的管理功能函数,为硬件层管理服务提供其接口,同时,还负责维护由硬件层所管理的目标数据库,该数据库包含有硬件层个域网络的基本信息。(3)MAC:介质接入控制子层,包含了MAC 层的参数配置文件及其MAC 的LIB 库的函数接口文件.实现的功能有:1、能产生网络信标。2、支持PAN的连接和断开连接。3、同信标保持同步。4、在对等的MAC实体之间提供一个可靠的通信链路.5、处理和维护GTS机制.6、信道接入采用CSMA—CA接入机制。7、支持设备的安全性。介质访问控制层(MAC)帧被称为MAC协议数据单元(MPDU),其长度不超过127个字节.它具有四种不同的帧形式,即信标帧、数据帧、确认帧和命令帧。(4)MT(Monitor Test):实现通过串口可控各层,与各层进行直接交互。(5)NWK(ZigBee Network Layer):网络层目录,含网络层配置参数文件及网络层库的函数接口文件,APS 层库的函数接口。(6)OSAL(Operating System (OS) Abstraction Layer):协议栈的操作系统。(7)Profile:AF(Application work) 层目录,包含AF 层处理函数文件.(8)Security:安全层目录,安全层处理函数,比如加密函数等。(9)Services:地址处理函数目录,包括着地址模式的定义及地址处理函数。(10)0Tools:工程配置目录,包括空间划分及ZStack 相关配置信息.(11)ZDO(ZigBee Device Objects):ZDO 目录.(12)ZMac: MAC 层目录,包括MAC 层参数配置及MAC 层LIB 库函数回调处理函数。(13)ZMain:主函数目录,包括入口函数及硬件配置文件。(14)Output:输出文件目录,这个EW8051 IDE 自动生成的.3.2.3 ZIGBEE协议栈网络层ZigBee网络层必须提供一定的功能,其主要是提供一些必要的函数,以保证IEEE 802。15。4—2003ZigBee协议栈的MAC层能够正确操作,正常工作,并且为应用层提供一个合适的服务接口。为了和应用层通信,必须向其提供接口,网络层的概念包括了两个必要的功能服务实体。它们分别为数据服务实体(NLDE)和管理服务实体(NLME)。网络层数据实体(NLDE)通过网络层相关的数据库服务接入点(NLDE-SAP)提供数据传输服务,网络层管理实体(NLME)通过网络层相关的管理库服务接入点(NLME-SAP)提供网络管理服务,网络层管理实体利用网络层数据实体来获得一些网络管理任务,并完成一些网络的管理工作。并且,网络层管理实体还维护一个管理对象的数据库,叫做网络信息库(NIB),网络层管理实体完成对网络信息库(NIB)的维护和管理。void main() { int tempera; int humidity; char s[16]; UINT8 adc0_value[2]; float num = 0; SET_MAIN_CLOCK_SOURCE(CRYSTAL); // 设置系统时钟源为 32MHz 晶体振荡器 GUI_Init(); // GUI 初始化 GUI_SetColor(1,0); // 显示色为亮点,背景色为暗点 GUI_PutString5_7(25,6,"OURS-CC2530”); //显示 OURS—CC2530 GUI_PutString5_7(10,22,"Temp:"); GUI_PutString5_7(10,35,"Humi:”); GUI_PutString5_7(10,48,"Light:"); LCM_Refresh(); while(1) { th_read(&tempera,&humidity); //读取温度和湿度 sprintf(s, (char*)”%d%d C", ((INT16)((int)tempera / 10)), ((INT16)((int)tempera % 10))); //将温度结果转换为字符串 GUI_PutString5_7(48,22,(char *)s); //显示结果 LCM_Refresh(); sprintf(s,(char*)"%d%d %%",((INT16)((int)humidity / 10)), ((INT16)((int)humidity % 10))); //将湿度结果转换为字符串 GUI_PutString5_7(48,35,(char *)s); //显示结果 LCM_Refresh();3.2.4AODV路由协议AODV自组织按需请求型距离向量路由协议(Ad Hoc On Demand Distance Vector,简称AODV),AODV采用的是逐跳转发分组方式,在每个节点之间保存了路由请求和路由回答的结果,因此路由的头部不需要携带完整的路由信息,从而提高了协议的效率。算法旨在多个移动节点中建立和维护一个自启动的,动态的,多跳路由的专属网络。它是一种按需的改进的距离向量路由协议,具有按需路由协议的特点即在AODV路由协议中,网络中的每个节点在需要进行通信时才发送路由分组,而不会周期性地交互路由信息以得到所有其它主机的路由;同时具有距离向量路由协议的一些特点,即各节点路由表只维护本节点到其他节点的路由,而无需掌握全网拓扑结构。网络中连接的断开和异动都会影响网络的拓扑结构,AODV 使得移动节点能适时对这种变化做出响应。AODV 的操作是无自环的,并且由于解决了 Bellman—Ford“无穷计数”的问题,使得该算法在网络拓扑变化时能够快速收敛。当一个连接断开时,AODV 会告知所有受到影响的节点,这些节点会让用到这个连接的路由失效。AODV 的一个显著特点是它在每个路由表项上使用了目的序列号。目的序列号由目的节点创建,并且被包含在路由信息中,然后这些路由信息将被回发到所有向它发起请求的节点.目的序列号的使用确保了无回环,并且易于编程。如果到一个目的有两条路由可供选择,那么收到请求的节点将会选择序列号最大的那一条。此外,AODV另一个显著的特点是它加入了组播路由协议扩展,并支持QOS。它的缺点是:不支持单向信道,原因是AODV协议基于双向信道的假设工作,路由回答分组直接沿着路由请求的反方向回到源节点.1、Void AODV::recv(Packet *p, Handler*) //判断是否是aodv包,是则调用函数recvAODV(p) if(ch-〉ptype() == PT_AODV) { recvAODV(p); //本节点产生的数据包,添加IP头 if((ih—〉saddr() == index) && (ch—〉num_forwards() == 0)) Add the IP Header //收到本节点发送的包,说明有路由环路,丢包 else if(ih->saddr() == index) drop(p, DROP_RTR_ROUTE_LOOP); //本节点是中间节点 else {//TTL是分组最多能转发的次数 if(--ih->ttl_ == 0) drop(p, DROP_RTR_TTL); //收到的不是广播分组,解析分组 if ( (u_int32_t)ih->daddr() != IP_BROADCAST) rt_resolve(p); //转发 else forward((aodv_rt_entry*) 0, p, NO_DELAY); 2、void AODV::rt_resolve(Packet *p) { //查找是否有到目的节点的路由 rt = rtable。rt_lookup(ih—〉daddr()); //没有,则添加到该目的节点的路由,此时添加的路由是无效的 if(rt == 0) rt = rtable.rt_add(ih—>daddr()); //有效路由,则根据路由表中信息转发分组 if(rt->rt_flags == RTF_UP) forward(rt, p, NO_DELAY); //如果本节点是该分组的源节点,说明没有到目的节点的路,此时发送RREQ找路 else if(ih—〉saddr() == index) rqueue.enque(p); sendRequest(rt-〉rt_dst); //链路中断,在维护中 else if (rt—〉rt_flags == RTF_IN_REPAIR) rqueue。enque(p); // 本节点转发数据分组,但是不知道该到目的节点的路,发送RERR说明链路中断 3、else sendError(rerr, false); //添加到目的节点的路由,此时的路由不可用,是无效的 aodv_rt_entry *rt = rtable.rt_lookup(dst); //不到发送RREQ的时间,注意文件开头的RREQ定时器,若没收到RREP,源节点需要定时发送RREQ if (rt->rt_req_timeout 〉 CURRENT_TIME) Packet::free((Packet *)p); //AODV中多次发送RREQ,多次发送RREQ后仍找不到路,则丢包 if (rt-〉rt_req_cnt 〉 RREQ_RETRIES) rt—〉rt_req_timeout = CURRENT_TIME + MAX_RREQ_TIMEOUT; drop(buf_pkt, DROP_RTR_NO_ROUTE); //余下部分是填充路由表以及RREQ分组的内容,不涉及实现的话不用了解,了解有一定难度,需要结合整个过程看 4、链路中断,需要发送RERR,通知所有受影响的节点,函数体关于填充RERR内容,不用细看void AODV::sendError(Packet *p, bool jitter) {// 5、周期发送Hello分组,以检测邻节点的连通性void AODV::sendHello() {// 6、根据包类型调用不同函数void AODV::recvAODV(Packet *p) {// case AODVTYPE_RREQ recvRequest(p); case AODVTYPE_RREP: recvReply(p); case AODVTYPE_RERR: recvError(p); case AODVTYPE_HELLO: recvHello(p); 7、收到RREQvoid AODV::recvRequest(Packet *p) {// // I’m the source — I recently heard this request。则丢弃该RREQ if(rq-〉rq_src == index) Packet::free(p); if (id_lookup(rq->rq_src, rq-〉rq_bcast_id)) Packet::free(p); // * Cache the broadcast ID ,用于判断是否已收到过该RREQ id_insert(rq—〉rq_src, rq-〉rq_bcast_id); //查找是否有到源节点的路由,有则更新,无则添加a //* Find out whether any buffered packet can benefit from the * reverse route。缓存中是否有到源节点的数据分组,有,则建立好路由后开始发送数据 //查找是否有到目的节点的有效路由,有则向源节点回复RREP,没有则继续转发该RREQ,注意转发前需要更新RREQ中部分内容 8、void AODV::sendReply(nsaddr_t ipdst, u_int32_t hop_count, nsaddr_t rpdst, u_int32_t rpseq, u_int32_t lifetime, double timestamp) { //填充RREP内容 9、void AODV::recvReply(Packet *p) { //查找是否有到目的节点的路由,没有则建立,否则更新 //如果是RREP的目的节点,即RREQ的源节点则建立到目的节点的路;否则根据路由表中到源节点的路由(此路由在发送RREQ过程中已建立)转发该RREP 10、收到RERR,查看有哪些路径受到中断链路的影响,更新RERR内容,并向受影响的节点发送该RERRvoid AODV::recvError(Packet *p) {
  • [赛事资讯] 【精彩速递】华为伙伴暨开发者大会2022精彩活动正式解锁!
    【赛事资讯】2022年5月21日--5月27日✨【热门赛事】2022华为嵌入式软件大赛,报名截止倒计时3天,你报名了吗?摘要:华为嵌入式软件大赛是华为公司面向在校大学生举办的大型嵌入式软硬件竞赛,在华为嵌入式软件大赛的舞台上,不仅可以充分展示你的软硬件作品,而且可以收获奖金、奖杯等奖励。此次比赛分为算法组(纯编码赛题)与实物组(提交软硬结合的原型作品),比赛分初赛、复赛和总决赛三个阶段,其中各赛区复赛将在各赛区研究所举办,全国总决赛将汇集各路英豪决战松山湖欧洲小镇。✨【征文活动】与云原生的故事,征文获奖名单出炉!摘要:“与云原生的故事”有奖征文获奖名单正式出炉啦!让我们一同恭喜获奖者!✨【直播回顾】华为云IoT创新应用开发大赛总决赛摘要:优质物联网应用方案线上直击!想了解华为云IoT如何助力企业构建物联网应用方案吗?本次将为大家直播华为云IoT创新应用开发大赛总决赛现场。20支优秀团队现场竞演,参赛作品覆盖智联生活、智能制造、智慧城市、智慧农业、智慧医疗等场景,带你全方位了解华为云IoT全场景智慧物联!✨【热门活动】华为伙伴暨开发者大会技术检阅场 · 活动集合摘要:各位开发者们,欢迎来到华为伙伴暨开发者大会社区活动集合,我们为大家准备了丰富多彩的活动以及奖品,精彩不容错过~往期回顾:【赛事资讯】2022年3月25日精彩速递-提交倒计时|2022软挑作品提交通道已开启【赛事资讯】2022年3月18日精彩速递-第八届华为软件精英挑战赛火热报名中,超全FAQ来袭!【赛事资讯】2022年3月11日精彩速递-2022华为大学生无线基站Massive MIMO创新大赛正式开启,快来报名参赛吧!【赛事资讯】2022年3月4日精彩速递-官宣!2022年第八届华为软件精英挑战赛正式启动报名
  • [行业资讯] 5G用来服务IoT,6G用来干什么?
    5G从概念走向商用,从“神坛”走向现实之后,人们对5G在IoT领域的期待仿佛并没有原来那么强烈,甚至将实现IoT的希望放在了6G身上。5G用来服务IoT(物联网),那6G用来干什么?”这是一个非常有意思的话题。我们知道,5G的愿景是万物互联,诞生伊始,便与IoT绑在了一起。IoT也凭借5G能够提供的高带宽、高速率传输、低延时,来实现物与物之间关联。然而,5G从概念走向商用,从“神坛”走向现实之后,人们对5G在IoT领域的期待仿佛并没有原来那么强烈,甚至将实现IoT的希望放在了6G身上。那么,之于5G,6G能有哪些提高?6G又将对通信网络有哪些助益?5G、6G、Wi-Fi?6谁将是IoT真正的“伴侣”?带着这些问题,我们从5G与IoT的机缘说起。5G是IoT发展所必须的技术早在2018年的时候,中国移动浙江公司在其举办的5G体验会上,展示了5G在远程医疗、工业互联网、AR/VR、全息通话等领域的应用,揭开了5G的神秘面纱。从发展看,此前5G标准定义了三大场景,eMBB、mMTC和URRLLC。其中,eMBB对应的是3D/超高清视频等大量流移动业务宽带,mMTC对应的是大规模物联网业务,而URLLC对应的是如无人驾驶、工业自动化等需要低延时高可靠连接的业务。在运营商看来,5G落地的应用是高清视频/AR/VR、大规模物联网、高可靠低延迟无人驾驶和工业自动化。因此,5G确实是IoT所必须的技术。当智能设备数量高速增加,需要有适应大规模物联网的5G作为基础,尤其是IPV6出来以后,每个设备都有了唯一标识码。此外,高速低延迟的物联网应用,需要5G的技术支持,诸如无人驾驶、机器人群控、工业自动化。可以说,有了5G加持,IOT发展进入快车道。然而,IoT无线通信技术有着丰富的种类,有授权频率通信技术,包括NB-IoT、GPRS,也有使用非授权频率通信技术,包括WIFI、BlueTooth、ZigBee、LoRa、NFC、两者各有优劣,互为补充。换言之,5G是IoT发展所必需的技术,那么,6G很大程度上也是。6G将完成万物互联的愿景通信观察家项立刚曾指出:“5G的愿景是万物互联,但事实上5G可能完成不了这个目标,这个目标可能需要6G来完成。”也就是说,相比5G,6G有着更多的优势和实力,将5G所要追求的目标完成。我们知道6G是用于数字蜂窝网络的第六代无线技术,其将利用无线电频谱的上限并支持1?Tbps(每秒兆兆字节)的速度,并将通信延迟降低1微秒,比5G延迟快1000倍。除了提供更高的吞吐量外,6G的更高频率还将实现更快的采样率。这将进一步提高5G应用的性能,释放无线成像和传感领域日益增长的数据需求应用的潜力。此外,6G网络还有望在低功耗的同时提供极端的覆盖扩展。同时,作为5G网络的继承者,将超越个性化通信,完全实现物联网范式,不仅连接人,还连接自动驾驶汽车、机器人代理和计算资源。在虚拟现实方面,6G的低(微级)延迟将使用户能够在沉浸式环境中进行实时交互。在全息网真方面,6G网络将有足够的带宽以数字形式传输所有5种人类感官,以提供身临其境的远程体验。在电子健康方面,6G有望通过远程手术和改进的医疗工作流程优化消除这些障碍。6G技术的超低延迟、高可靠性和精细智能将提供十倍的频谱效率增益。在IoT方面,6G将连接所有这些设备以及自动驾驶汽车和传感器。在机器人和无人驾驶方面,连接大型自主交通系统需要低延迟和前所未有的可靠性水平,以保证乘客安全。6G技术可能会通过软件、硬件和新连接解决方案的进步为这些连接系统铺平道路。一步一个脚印,做好6G布局此前,IMT-2030(6G)推进组2021年发布的《6G总体愿景与潜在关键技术白皮书》描述,6G将在5G基础上从服务于人、人与物,进一步拓展到支撑智能体的高效互联,实现由万物互联到万物智联的跃迁,最终助力人类社会实现“万物智联、数字孪生”的美好愿景。6G从需求到标准,再到稳步前行,业界普遍预测,6G将在2030年左右商用。也就是说6G技术还有十年的时间。据悉,芬兰奥卢大学是第一个专注6G研究的大学,创建了一个6G旗舰计划,以探索各种具有挑战性的研究领域。2019年,美国联邦通信委员会通过了新规则,以加快在95?GHz以上频谱中部署新服务。委员会的第一份报告和命令,标题为“频谱地平线”,开发了一个新的实验许可部分,用于95?GHz到3?THz的频率范围。弗吉尼亚理工大学的研究人员以及LG和三星等公司已经开始研究6G技术。此外,据报道,日本正在计划到2030年推出6G网络的综合战略。在国内,关于6G的研究并没有落下,甚至走在世界前列。华为从2017年,也就是5G商用的两年前,便开始着手进行6G的研发,中兴也在2018年成立了专门的6G研究团队。处在国内智能设备第一梯队的OPPO、VIVO、小米等公司先后对外公布6G的研发计划,OPPO更是在2020年宣布将在未来三年投入500亿元用于6G技术的研究。此外,布局6G不全在于技术研发、标准制定。作为5G的延续,布局6G更应该先建设好5G广泛开展5G业务。据悉,目前中国的5G基站已经超过160万个,5G套餐用户2021年底已达7亿以上,凭借5G套餐用户带来的收入增长。写在最后IoT时代正在加速到来,作为IoT的通信技术之一,5G在扮演重要角色的同时,也将为世界带来更多的助力。然而,IoT的发展也离不开以5G为代表的通信技术,未来5.5G、6G都有可能助力IoT的发展。5G用来服务IoT,6G用来干什么?想必这个问题的答案,大家了然于胸了吧?相关阅读5G用来服务IoT,6G用来干什么?
总条数:501 到第
上滑加载中