首先须要说明的是本人只是一名普通的研究生,在学校的研究方向和物联网系统也没半点毛线关系,关于这个项目只是业余时间的一点尝试,至今也没作出能让我有资格得瑟的产品。说不定这个系统对于专业人士来讲简直是小儿科,但对我这个业余选手来讲,却断断续续尝试了两年。php
故事得从我大三下学期(2013年)提及,话说我当时只是一个一心一意搞学习的好学生,反正就是社会上说的关于大学生的恶心在我身上是找不到半毛,对,我就是这样一个好学生,我也就打算这样浑浑噩噩混到毕业了,若是运气好,可以凭好成绩保上研究生也是极好的。某日,室友找到我说某某人有一个大学生创业项目缺人,他推荐了我。其实一开始我是拒绝的,由于我清楚本身除了能考个好成绩肚子里可真心没多少货,一会儿来了一个听起来这么高大上的项目,我哪里敢接手,可是后来一想,本身在团队里也不是主要负责人,只是去打个下手吧,只要作好力所能及的事就行了,也就答应了下来。好久之后,我才明白,其实项目里的全部人基本都是菜鸟,都是在摸索,找队员的时候,并非看我的都对这种项目了解多少,看中的是你这我的的自学能力有多强,如今我也发现,技术这么多,项目换来换去,一我的能掌握多少,一流的公司招人的时候就应该适当多考虑那种自学能力强、潜力巨大的人,说的就是我这种人哈!
不能废话了,介绍一下那个大学生创业项目,国家为了培养大学生的创新创业能力,政策上仍是给了不少支持的,(我会告诉你,国家的钱大部分都打了水漂吗?固然,也只能靠钱砸了),首先是学院的一个老师知道这个项目,就联合校外一个咱们前几届学长的小的初创公司想找几个本科生来申请这个项目,(我会告诉大家,咱们只是用来套国家钱的吗,哈哈,可是事情每每从不靠谱开始)。由于是创业项目,申请项目时须要有完整的商业计划书,就是吹吹咱们的技术有多么牛逼,之后发展前景多么广大,记得当时咱们的初稿只有20多页,老师非要咱们扩充到60业以上,咱们东拼西凑,因而就有了:
大三暑假,咱们须要实习,小伙伴们都跟着学院的安排去了葛洲坝,咱们就钻空子去了学长的公司实习,恰好有那个老师当实习指导老师,顺便去把这个项目也给作了,真是一箭双雕,整个暑假咱们都在公司那边,那是一个初创的公司,还没一个像样的产品,不过有一个经验比较丰富的学长也是极好的,咱们满怀期待的开始作项目了,你觉得咱们是作前面申请的那个项目吗,都说了那个只是用来套钱的。咱们的第一个的工做室花一个星期翻译了这个:
这个是yeelink公司出的,产品的创意应该也是参照了飞利浦hue。整个暑假咱们的目标就是参考
TI Zigbee Light Link 试图设计出一款这样高大上的灯泡。借用学长的一句话,”别看这个系统,麻雀虽小,五脏俱全“,确实,不管多么大的智能家居系统,基础原理和这个都是相同的,咱们的方案是设计一个带ZigBee通讯功能的灯,用STM32作网关,在STM32上也带一个Zigbee模块和灯通讯,而后将网关连上路由器和远程的云平台通讯。而后咱们就开始分工了,一我的负责网关的芯片设计,一我的负责网关的程序开发,一我的负责终端灯的程序,一个负责灯的硬件,一个负责远程控制须要的云服务。我对硬件一窍不通,因此负责了网关的程序开发,参考
TI Zigbee Light Link 参考设计硬是啃了两个多星期,才差很少弄清楚里面网关程序的设计,写了三篇文档:
- 主机接口的信息处理流程
- 网关程序分析
- 本地局域网通讯过程
这个程序原本是运行在Linux嵌入式系统的,个人任务就是把它移植到STM32中,这里我固然不能具体的分析里面的程序了,不得不说,那时从没有接触过这么大型的程序,分析透彻事后才发现,网关里的程序设计的真心规范,对灯的控制流程程序写的至关巧妙高超。有兴趣能够本身研究。那年暑假咱们都在作
TI Zigbee Light Link,最后的成果咱们顺利实现了局域网内灯的控制,开关、亮度、颜色都能实现了,这个貌似比yeelink还早作出来。暑假结束后,由于要准备保研的事情,因此项目暂时放下了,直到保研结束,咱们又捡起了这个项目,这个时候,原来的团队已经散掉了,有出国,有工做的,有保研的,看着这个半成品,我仍是想把远程控制继续作完,所以须要搭建一个云平台(请原谅我说的这么高大上)完整的系统大概是这样的
云平台设计好事后,我就开始兴奋的测试个人灯了,到底能不能实现传说的远程控制呢,结果我发现云平台设计有一个缺陷,不能推送数据到终端设备。终端设备必须轮询云平台才能知道数据有没有变化,这样的控制却是测试成功了。这样对服务器和终端设备性能就会产生很大影响,只有两种解决方案,要么用第三方推送(如,极光推送),要么本身搭建,鉴于应用的特殊性,第三方可能不知足要求,因此我决定本身搭建一个。最后参考了
基于 HTTP 长链接的“服务器推”技术也就是comet,从新编译了服务器的nginx,让其支持
Comet技术,测试事后勉强能用推送,远远没到能适用的程度,这种技术用在浏览器终端却是很实用,可是让
服务器推送到
一个嵌入式的终端设备,倒以为很不适用。作到这里,个人研究生生涯开始了,我就辞掉了公司的工做,开始学习和实验室的项目,很久没过问了。
前不久,学长又找到我,让我帮他们的智能家居控制APP作一个后台,我觉得仍是接着那个云平台作,后来他告诉我,设备控制走的是
机智云。只须要作一个app自己的后台就好了。一个偶然的机会我发现他们在调试与机智云的通讯时错误提示中出现了MQTT的字眼。忽然想起我以前收藏的一篇文章:
Android实现推送方式解决方案中提到了一个MQTT协议,我就猜测像机智云这样的云平台与设备间的通讯协议是否是应该是MQTT协议而不是http协议。我赶忙万能的百度,果不其然,搜索”机智云mqtt“和”yeelink mqtt“肯定这两个平台如今都用到了MQTT协议,再搜索MQTT,如:
例说“MQTT协议”,才发现这个协议在物联网上如今用的不少,当时作的时候这类信息尚未,
惋惜设计云平台的时候yeelink仍是
基于HTTP RESTful的轮训方式,否则我早就发现了。不过如今也有了思路,若是接下来有时间我就会加上MQTT服务,一个高大上的简单的智能家居云平台就完整了。看来小公司打造本身的智能家居生态系统也不是不可能的事。