本项目的交流QQ群:701889554
物联网实战--入门篇https://blog.csdn.net/ypp240124016/category_12609773.html
物联网实战--驱动篇https://blog.csdn.net/ypp240124016/category_12631333.html
一、平台简介
物联网平台这个概念比较宽,大致可以分为两大类,一类是行业物联网平台,面对的政企客户,定制化程度比较高,例如智慧消防平台,需要跟现有业务做对接;一种是通用物联网平台,就像小米智能家居一样,用户就是普通个人,下载一个APP就能使用设备了。不管是哪种平台,它的核心底层功能都是承载设备的连接、管理和数据存储,是用户与设备的连接纽带。
所谓平台,其实就是一个或多个运行在服务器的软件了,这个软件涉及的知识点和技术栈会比较多,以下是一个常规的物联网平台的架构图(来自IOT-DC3),仅供参考。
二、平台定位
这里有一些开源的物联网组件和平台盘点 12 个物联网开源项目,yyds! - 知乎,总的来讲,这些平台的技术栈过多、设计思想类似、体系过于臃肿,看似什么都能干,但在实际项目中却很难达到理想效果,因为中间件过多,有时候一个数据可以延时好几秒,甚至中间件掉链子,无法到达终端,在定位问题时经常是踢皮球,整个开发体系沟通成本过高,这是目前很多物联网公司的通病。
总的来讲,还是定位和设计思想的问题,很多公司在设计物联网平台时候心都很大,都是要包罗万象的,MQTT、Coap、LORA、OPC、BACNet、modbus什么协议都要支持,电力、消防、水务各个行业都要能应用,地图、3D、BIM、数字孪生哪个高端整哪个,到头来基本上是老板强推、一线骂娘。这一类的物联网平台往往是政策驱动的,而不是市场驱动的。
在从事物联网行业期间,自己也一直在找有没有简单、实用、高可靠性的物联网平台,只需要基础的设备接入和管理功能,让我可以把心思放在用户需求分析、产品设备的定义和开发上。其实米家生态是一个比较合适的对象,只不过它更倾向于消费级的商业化产品,对接一个产品前后可能要花几千甚至几万的成本,还有很多协议需要遵守。结合学习的需求,最终觉得还是得自己设计一个平台软件,对标的就是米家这种类型的,针对个人用户,用户拿到设备后只需要简单添加就可以使用了。
三、架构设计
上图是平台架构图,主要由五部分组成:设备端、MQTT服务器、用户端、数据服务器和应用服务器。其中,MQTT服务器是中心,负责数据的路由转发,其它各模块通过话题的定义进行交流。
在设计目标中,简单和高可靠性是两个比较重要的指标,所以设备端和用户端(主要是手机APP)采用端到端的通讯,中间除了MQTT服务器做数据转发外没有其它中间件,设备发送的数据到手机端直接解析和显示,很大程度上也降低了延时,提升了体验感;另外,即使应用服务器和数据服务器都宕机了,短时间内也不会影响用户对设备的使用和操控。而在传统的物联网平台设计中,数据需要汇集到统一的中心进行处理,然后再转发到用户端,这个过程只要数据处理服务停止运行,用户就收不到数据了,而且在设备数量上升后,对服务器的压力也会变大,意味着需要升级硬件、增加很多的服务器成本。
应用服务器主要是对账户、应用和设备进行管理,属于常规的、各个平台都会有的内容,其主要还是跟用户端进行交互;数据服务器的作用是存储设备数据,同时实时解析设备的数据包内是否包含紧急的报警信息,这样才能及时通知用户。
那么,使用这么一个端到端平台对于物联网开发会有什么好处呢?这个话题得回到 “物联网” 三个字本身,首先得要有物,其次才是联网,物也就是产品,跟用户直接接触的东西,大家在买智能家居产品的时候应该都有这么一个感觉--设备才是我自己的,软件和联网等功能是附加体验,决定我买不买的主要因素还是设备本身的价格和功能,平台软件很难成为决定因素。但是,在现有的开发体系中,设备端往往没有很大的话语权,一切都是以平台为中心的,很多协议、功能都只能适应平台,这也导致了很多设备产品的定义和设计只能妥协,用户体验自然就下降了。平台用端到端的设计后,设备端和用户端的定义可以自行决定,平台方无需增加开发,降低了沟通成本,提升了设备端的自主权。这样说可能比较抽象,举个例子,比如一个温度传感器,要设置报警温度阈值,我现在用过的几个产品都是把这个阈值放在平台数据库内,平台根据设备上报的温度数据进行对比,超过阈值就进行报警推送,整体逻辑没什么问题,但是体验感和可靠性上是不太行的,首先设备多久上报一次数据?有的几秒,有的几分钟,如果上报周期太长导致报警延迟,可能会导致严重的后果。比如工厂化鸡舍,如果通风系统或者制冷设备故障,高密度养殖会导致温度迅速上升,如果没有及时预警处理,可能会对用户造成极大的损失。如果把这个阈值设置在设备内部,那温度检测都是毫秒级别的,基本上能在5秒内发出报警信息。这里只是大概举例,核心要说明的问题其实还是设备端跟平台端在协议对接上的交流成本是挺高的,两边的开发人员都是站在自己的角度考虑问题,容易发生矛盾。比如对于平台来讲协议如果用json这样的文本是最好的了,简单明了,但是对于设备端来说资源受限,一般采用二进制形式,而且对于采用4G的设备来说,流量也是个大问题。所以说,这就是采用端到端开发产品的好处了,设备端可以自定义协议内容,减少沟通成本。后面等这个平台软件开发完成后,我们就会不断地用这种模式去开发各式各样的硬件产品,效率极高。
四、开发规划
依据上面的架构图,我们主要的工作量还是在应用服务器和用户端的对接开发,包含了帐号注册、登录,密码修改,子账户管理,应用管理,分组管理,设备管理,手机验证码,扫码添加,报警消息通知等等。对于APP的设计,我们还是参考米家APP,UI设计是技术人员的短板,还是直接模仿比较快,当然了,很多冗余的东西也会删除,毕竟人家是商业性的APP了,我们这个主要还是为了学习用的,下面放一张APP截图作为参考。
在开发技术上,我们全部使用Qt进行开发,包括服务器相关的程序和手机APP,当然了只要你理解了技术原理和设计思想,那么你用Java和安卓开发都是可以的,不限具体的技术形式。
接下来,每一篇文章都会对新的功能模块进行开发,开发完后上传,一步一步完成,沉浸式体验整个过程,让大家在学习过程中理解物联网整个体系的设计原理和开发思维,同时掌握实战性的开发技巧。
最后,回答一个经常有人问的问题,很多物联网专业的同学看到自己要学的内容那么多、那么杂,瞬间失去了兴趣和方向,不自觉地灵魂拷问:物联网的出路在哪里?我个人的观点是三个方向:
1、纯粹做技术,那你把物联网各个环节中的某一个环节学精来就行了,比如嵌入式、硬件设计、后台开发、前端开发等等,选一个自己感兴趣的深入学习,然后早点去找个公司实习,积累经验,这样未来找工作的时候简历就很丰富了,竞争力也就强了;
2、市场销售,物联网销售还是需要有点技术底子的,至少表面功夫得学一学,跟客户交流这是基本功了,还要有比较好的新知识的吸收能力,比如让你去给客户推销NB烟感,客户问你电池多大容量的,一天发送几次,大概能用几年,电信和移动的啥区别,用的谁家模组,报警声音几分贝,这些问题常规的销售应该是搞不定的,更何况还有更深入的问题,比如电池仓库放太久没安装,钝化了怎么办?物联网设备的销售主要还是以量取胜,谈一单往往出货量是比较可观的,够你吃一阵子了。
3、市场发掘,这个要求你是复合型人才,创业型选手,既要懂技术,又要懂产业,深入了解某个产业中的痛点和刚需,并分析出产品如何设计才能更好地适应当前产业,让用户乐意买单,这里面产业、技术、需求、成本、管理、产品各个环节缺一不可,这也是未来物联网发展的一个新契机。就目前来讲,物联网有点不温不火,风头早已经不能跟人工智能和机器人相提并论了,甚至很多物联网企业都快倒闭了,不过这在起初就可以预知的,2018年后的那几年,虽然概念火热,但是参与其中会发现物联网技术并未解决太多生活中的刚需问题,更多的是为了KPI而推行的项目。所以,要想让物联网真正改变生活,还是很需要这样的复合型人才来填补产业与技术之间的鸿沟,让物联网真正的成为一个市场驱动型的产业,这样整个行业才有未来。