IoT -- (九) IoT通讯技术选型与模型设计

IoT时代的无线通讯技术

“世界上最遥远的距离就是没有网络”,网络通讯是IoT的基础,常见的无线网络通讯技术有:WiFi、NFC、ZigBee、Bluetooth、WWAN(Wireless Wide Area Network,包括GPRS、3G、4G、5G等)、NB-IoT、Sub-1GHz等。它们在组网、功耗、通讯距离、安全性等方面各有差别,因此拥有不同的适用场景。WiFi、Bluetooth、WWAN是现阶段物联网的主力,占所有应用的95%以上。ZigBee主要用在全屋智能领域,NB-IoT是针对IoT设计的下一代网络。

那么如何在众多无线通讯技术中找到适合自己的呢?下面根据我的经验做一下简单总结,供大家参考。

为什么选WiFi
WiFi最大的优点是连接快速、持久、稳定,它是IoT设备端连接的首选方案,唯一需要考虑的是智能设备对WiFi覆盖范围的依赖导致smart devices的活动范围比较小,不适合随时携带和户外场景。

举例:各种智能家电可以通过WiFi被远程控制。

为什么选Bluetooth
Bluetooth最大的优点是不依赖于外部网络、便携、低功耗。只要有手机和智能设备,就能保持稳定的连接,走到哪连到哪。所以大部分运动和户外使用的设备都会优先考虑Bluetooth。它的主要不足是:不能直接连接云端,传输速度比较慢,组网能力比较弱。

举例:智能手环,共享单车的智能蓝牙锁,iBeacon定位。

为什么选WWAN
WiFi的不足是智能设备移动范围小,蓝牙的短板是设备不能直连云端和组网能力弱,而WWAN既可以随时移动,也可以随时联网,完美弥补了WiFi和Bluetooth的不足。但实际上它也存在二个短板:一是它在使用的过程中会产生费用,二是网络状况不稳定,常常遇到无网或弱网的环境。

举例:车载智能设备,政府的城市公共自行车。

无线模块选型分析

前面介绍了主流的三种无线技术,下面是一些特殊场景用到的无线技术选型。

ZigBee的使用
在全屋智能(精装修智能房屋)的场景中,从交付开始,家中就已存在大量IoT设备,如果使用WiFi方案,每个设备配网会非常麻烦,并且WiFi每次做移动或修改密码,智能设备都要做相应的调整。如果使用蓝牙方案,以目前的BLE 4.2标准来说,蓝牙的组网只能一个Central连接7个外设(部分芯片会有能力扩充,因为比较少见,所以这里忽略),蓝牙组网能力弱,也满足不了需求。所以在全屋智能场景中,经常会使用ZigBee+WiFi的二合一网关。ZigBee和蓝牙一样都是近距离低功耗的通讯技术,但它相比蓝牙最大的优势就是强大的组网能力,ZigBee和WiFi的二合一网关通过ZigBee连接IoT设备,通过WiFi将数据同步到云端。

Sub-1GHz的使用
飞行器常常在没有WiFi,山上等GPRS无信号或弱网的环境中使用,而且通常有较远的飞行距离,这样WiFi、Bluetooth、ZigBee和WWAN这种单一的无线模块不能很好的解决飞行器的通讯需求,所以需要多种无线模块的组合使用。通过Bluetooth让遥控器和手机连接,通过Sub-1GHz处理长距离飞行时飞行器和遥控器的通讯,通过其他波长处理中距离或短距离飞行中的数据通信。这种组合既能满足手机操控,又能在中距离有高质量的图像数据,在远距离还能继续控制。

同样功能的设备不一定选相同的通讯模块

例如补水仪,统一的功能,都是从设备喷出水汽到皮肤,给皮肤补水,但有便携式和固定式两种,便携式体积小,便于携带,随时使用,可以选择Bluetooth;固定式功能多,可以冷热交替补水,一般在家中使用,选WiFi没错。

总结和整理
图片描述
上表对前面介绍的无线通讯技术做了个总结,方便大家了解其中的差别,选到适合自己的方案。

IoT物联模型

应用侧的架构,根据接入设备的种类和数量,复杂度会相差很大,其中物联平台的架构最为复杂,例如阿里智能、微信物联、米家、百度物联这类平台级的系统。不过能做平台级物联系统的公司还很少,大部分还是针对特定设备类型或共同特征的智能设备的载体,它们的结构相对简单些,也是本文重点介绍的部分。

以智能手机、智能设备,智能云三者交互为例,主要涉及的无线通讯方式就是WiFi、WWAN、Bluetooth,其中WiFi和WWAN的场景几乎一致,Bluetooth架构多一层媒介层,本文主要介绍这三种场景。

WWAN/WiFi和Bluetooth在应用架构设计上最重要的区别是WWAN的智能设备可以直接和云端交互,而Bluetooth智能设备需要一个中转媒介,大部分时候,这个媒介指的是智能手机,偶尔也可能是其他的形态,比如蓝牙网关,或是一台装有操作系统的智能冰箱。

WWAN和WiFi物联模型的主要区别在于WWAN设备只要插上上网卡,就可以上网,而WiFi设备需要多一步配网的过程。

WWAN/WiFi物联模式

WWAN/WiFi物联模型如图1所示。
图片描述

图1 WWAN/WiFi物联模式

图片描述

图2 Bluetooth物联模式

WiFi在设备初次使用时,首先需要配网操作。通过WiFi在手机和智能设备之间建立点对点连接,手机把WiFi的SSID和密码传递到智能设备,然后再断开手机与智能设备的直连,把智能设备连接的WiFi网络切换至用于连接的WiFi设备(在家的场景,通常指的是家中的路由器)。WiFi smart device在联网成功后,会向云端发送设备激活的消息,此后设备端和云端就建立了一个稳定,长期的连接,保证了数据上行和命令下发。

Bluetooth物联模式
蓝牙设备一般都作为外设,和智能手机建立一对一的连接之后,通过智能手机作为媒介,间接与云端进行数据同步。通常情况,BLE 智能手机设备和智能手机的通讯非常重要(通道1),设备操控和数据同步都是通过这层连接完成的,相比之下通道2经常只是智能手机的普通API请求,用做Bluetooth 智能手机设备的数据持久层使用。

IoT模型优化

上一节介绍了WWAN/WiFi和Bluetooth的物联模型,IoT模型在设计的时候,有很多需要考虑的地方,常见的有:通道的安全、物联协议、动态化等。

通道的安全
通道安全往往是通过对连接通道认证和数据对称/非对称加密这两件事情保障的。对于安全性较高的设备,一定要在建立连接通道时,确保通道的安全性,在数据和命令上下行时,尽可能不要使用明文传输。安全通道的建立可以使用一些成熟的方案或者成熟的加密算法去实现,选择算法时要考虑到设备端的计算能力。设备端因为成本和体积,计算能力较弱,如果算法过于复杂会严重影响到设备端的处理能力和稳定性。

物联协议
物联协议是大型IoT平台必须考虑的问题,因为接入的设备类型多,很多场景需要多个设备互联互动,良好的物联协议设计可以减低设备接入的成本,提高稳定性和处理能力。现在每个物联平台都有自己的物联协议。

物联协议可以细分为通用协议和领域定制协议。通用协议可以做物联通道的兜底方案,对设备有一个统一的收口,而具体领域定制协议可以根据品类和业务深入定制行业解决方案,优化领域和领域设备的接入速度,优化业务流程和场景质量。一个优秀的领域协议需要综合平台、方案商、设备制造商多方经验才能制定,忌讳由平台制定后强推。

下面用蓝牙来举例说明一下平台的物联协议和业务协议。

微信物联的蓝牙协议要求:广播包中包含ServiceUUID:FEE7作为统一标识,FEA1为数据出口,FEA2为数据入口,把蓝牙协议扁平化形成一种请求,相应的数据模式。这是一个通道的固定,并没有涉及业务。
业务协议举例:蓝牙体重秤,协议如图3。

图片描述

图3 蓝牙体重秤协议

业务协议根据具体的通道,规定了二进制流中每一位数据的含义、数据长度、单位、大小端模式等。业务协议和智能设备具体的功能和要做的业务紧密相关。

动态化
物联平台因为接入的设备各种各样,芯片有各种不同的方案,如果要兼容多种设备和方案,就必须要求这个架构有着非常好的灵活性,而动态化可以极大提高灵活性。

客户端通过HTML5、React-Native等动态化渲染技术,解决业务层的动态化;数据协议的动态化可以在客户端或者服务端,通过动态化脚本方案实现;设备端的动态化可以考虑OTA固件升级实现。

上面只是动态化的一些具体实现方向,对于大型的物联平台,往往是通过一整套架构和模型去解决的,阿里IoT平台就有自己的一整套解决方案,因为会涉及到商业机密,这里不再详述。

总结

本文浅尝辄止地介绍了IoT方向的一些无线通信技术以及IoT模型选择的思考,欢迎大家入坑。这些方案是近年来的主流方案,而随着IoT的飞速发展,也许几年后就会出现一些杀手级的方案完全改变IoT的现状和格局。也有许多已知技术正在孕育当中,比如Bluetooth5和NB-IoT,Bluetooth5相比4.2,在组网和传输距离上有了很大提升,连接范围扩大了4倍,速度提高了2倍,无连接数据广播能力提高了8倍,同时提升了组网能力。笔者和TI,Nordic工程师有聊到过,设备厂商的5.0芯片都已经开发完成,等待生产。量产后,预计会对ZigBee有很大的冲击。

而NB-IoT的提出就是针对IoT的使用场景,其最大特色是覆盖面广,价格便宜。NB-IoT现在联盟的力量很强大,大部分芯片商、通讯商、电信运营商都参与其中,积极推进NB-IoT的公共网络建设,预计就在这一年两内NB-IoT的网络会覆盖国内很多地区,未来潜力非常值得关注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSM中PageHelper的使用步骤与com.github.pagehelper.PageHelper3系列与5系列的区别

SSM中PageHelper的使用步骤 一. 在pom.xml导入依赖 <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.2</version></dependency>二. 交给IOC管理 在SqlSessionFactory…

mysql修改数据库级别_设置数据库兼容级别的两种方法

兼容级别设置为 80 兼容级别设置为 90 影响的可能性对于 FROM 子句中的锁提示&#xff0c;WITH 关键字始终是可选的。但在一些例外情况中&#xff0c;仅当用 WITH 关键字指定表提示时&#xff0c;FROM 子句中才支持这些提示。有关详细信息&#xff0c;请参阅 FROM (Transact-SQ…

Github PageHelper 原理解析

任何服务对数据库的日常操作&#xff0c;都离不开增删改查。如果一次查询的纪录很多&#xff0c;那我们必须采用分页的方式。对于一个Springboot项目&#xff0c;访问和查询MySQL数据库&#xff0c;持久化框架可以使用MyBatis&#xff0c;分页工具可以使用github的 PageHelper。…

Springboot Mybatis使用PageHelper实现分页查询

以下介绍实战中数据库框架使用的是mybatis&#xff0c;对整合mybatis此处不做介绍。 使用pageHelper实现分页查询其实非常简单&#xff0c;共两步&#xff1a; 一、导入依赖&#xff1b; pom.xml添加依赖&#xff1a; <!--分页插件 pagehelper --> <dependency>…

mysql 与 xls 连接_数据库MySQL与xls文件的互导

最近的一个项目需要将xls表导入到MySQL数据库中和将MySQL数据表导出到xls表中&#xff0c;在网上搜了很多资料&#xff0c;经过多次尝试终于实现了功能&#xff0c;废话不多说&#xff0c;在这粘贴出代码&#xff0c;希望可以帮到需要的朋友。一、将.xls表导入到MySQL数据表中。…

Mysql 一条SQL语句实现批量更新数据,update结合case、when和then的使用案例

如何用一条sql语句实现批量更新&#xff1f;mysql并没有提供直接的方法来实现批量更新&#xff0c;但是可以用点小技巧来实现。 代码如下: UPDATE mytable SET myfield CASE id WHEN 1 THEN valueWHEN 2 THEN valueWHEN 3 THEN value END WHERE id IN (1,2,3);这里使用了c…

MySQL可运行在不同的操作系统下_不同操作系统下的mysql数据库同步

当数据库的数据量读写频繁的时候&#xff0c;我们就要考虑把数据库的读写分开&#xff0c;以提高数据库的使用效率&#xff0c;(当然还有其他用处比如&#xff0c;备份数据)&#xff0c;这个时候我们就要用到mysql的一个功能&#xff0c;数据库同步。下面就具体讲一下实现方法。…

@RequestBody和@RequestParam区别

一&#xff1a;RequestBody和RequestParam区别 RequestParam 用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。&#xff08;Http协议中&#xff0c;如果不指定Content-Type&#xff0c;则默认传递的参数就是application/x-www-form-urlencoded类型&am…

mysql内置加密函数_MySQL数据库内置加密函数总结

首先&#xff0c;我认识的加密函数有以下几个&#xff1a;password(plainText)&#xff1a;旧版(OLD_PASSWORD())加密后长度16位&#xff0c;新版41位select length(password("123456"))可以用来查看加密后的字符串的长度。这种加密方法依赖数据库&#xff0c;需要保…

Query String Parameters、Form Data、Request Payload的区别

Query String Parameters 当发起一次GET请求时&#xff0c;参数会以url string的形式进行传递。即?后的字符串则为其请求参数&#xff0c;并以&作为分隔符。 如下http请求报文头&#xff1a; GeneralRequest URL: http://login?unamedingdingRequest Method: GETQuery…

c mysql 添加数据类型_MYSQL的常用命令和增删改查语句和数据类型

连接命令&#xff1a;mysql -h[主机地址] -u[用户名] -p[用户密码]创建数据库&#xff1a;create database [库名]显示所有数据库: show databases;打开数据库:use [库名]当前选择的库状态:SELECT DATABASE();创建数据表:CREATE TABLE [表名]([字段名] [字段类型]([字段要求]) …

@requestbody和@requestparam作用

1、什么都不写 GET 可以自动封装为对象模型&#xff0c;没有的数值自动为0值 POST 请求体里面放了数据&#xff0c;但是还是使用了RequestParam里的数据 总结&#xff1a; 在不使用注解的情况下&#xff0c;相当于默认使用了RequestParam里的数据 &#xff08;这种理解是错…

@RequestBody的使用

提示&#xff1a;建议一定要看后面的RequestBody的核心逻辑源码以及六个重要结论本文前半部分的内容都是一些基 本知识常识&#xff0c;可选择性跳过。 声明&#xff1a;本文是基于SpringBoot&#xff0c;进行的演示说明。 基础知识介绍&#xff1a; ​ RequestBody主要用来接…

mysql 字段值为 a b c_数据的虚拟列-让数据库中的C字段等于a+b

直接用update aaaaa aa set aa.f (aa.aaa.b)就行了引出来的新知识--虚拟列虚拟列的好处是:如果cab那插入数据时&#xff1b;值只插入a1,b2;那么c会自动是3oracle temporary table and virtual column(2013-07-31 15:06:55)表是数据库中保存用户数据最基本的结构。下面我简要的…

@RequestBody 和 @RequestParam可以同时使用

RequestParam和RequestBody这两个注解是可以同时使用的。 网上有很多博客说RequestParam 和RequestBody不能同时使用&#xff0c;这是错误的。根据HTTP协议&#xff0c;并没有说post请求不能带URL参数&#xff0c;经验证往一个带有参数的URL发送post请求也是可以成功的。只不过…

mysql索引使增删变慢_mysql优化之索引篇

mysql&#xff0c;对it打工人&#xff0c;这个几乎是必备的技能之一。mysql可以解决我们平时工作中的大量的、有关增删查改的问题。所以想深入了解mysql&#xff0c;我觉得关键在于他的增删查改背后的算法&#xff0c;开搞。面对增删查改等问题&#xff0c;直接通过场景来看吧场…

POST、GET、@RequestBody和@RequestParam区别

RequestParam 注解RequestParam接收的参数是来自HTTP请求体或请求url的QueryString中。 RequestParam可以接受简单类型的属性&#xff0c;也可以接受对象类型。 RequestParam有三个配置参数&#xff1a; required 表示是否必须&#xff0c;默认为 true&#xff0c;必须。de…

python与linux关系_如何处理Linux / Python依赖关系?

由于缺乏对我想使用的一些库的支持,我将一些Python开发从Windows转移到Linux开发.我已经花了大部分时间搞乱了依赖关系.问题每当我拿起Linux,我通常会遇到一些依赖问题,通常是开发库,无论是通过apt-get,easy_install或pip安装.我可以浪费时间,应该是简单的任务,花更长的时间让图…

Springmvc接收json数据的4种方式

1、以RequestParam接收 前端传来的是json数据不多时&#xff1a;[id:id],可以直接用RequestParam来获取值 Autowired private AccomodationService accomodationService;RequestMapping(value "/update") ResponseBody public String updateAttr(RequestParam (&q…

centos安装mysql卡住_CentOS 6.4安装MySQL的过程中出现的bug

在CentOS 6.4下安装MySQL&#xff0c;下载一个源码包&#xff0c;感觉很简单&#xff0c;tar&#xff0c;./configure&#xff0c;make&#xff0c;make install 经典四步&#xff0c;弄这个也不是第一次了&#xff0c;但今天就是老出错&#xff0c;首先是./configure中&#x…