我的物联网成长生涯

四年前,因为学校比赛的缘故开始制作物联网相关的作品。当时做的作品在现在看起来,仍然很具有代表性。从那时起到今天也在接触不同的相关技术:从网络层的HTTP协议,到UPnP,又或者是MQTT协议、CoAP协议,再到应用层的Android开发到使用混合应用框架开发物联网应用,又或者是从当时的Django作为服务层,到今天的Node.js,这些都是一个相当有意思的旅途。

让我从最开始的故事及技术栈开始讲起。

硬件比赛

大学学的是电子信息工程,当时由于参加比赛可以抵消挂科的学分,我开始参加学校的比赛来赚取这些学分。当时做的第一个东西是一个“智能家居”的产品,和同班的三个小伙伴一起完成的。这个产品的架构是我在《自己动手设计物联网》一书中所画的架构图的一种实现:

我的物联网成长生涯_第1张图片

整个系统的核心可以分为四部分:

  • 硬件层。硬件层主要采用Arduino和Zigbee模块来进行数据传输
    • 传感器方面使用烟雾传感器、红外传感器、温湿度传感器等等
    • 执行器方面则只使用一个灯泡来执行用户的操作
  • 协调层。主要依赖于Raspberry Pi来处理上传数据到服务器,并获取服务器中的相关指令
  • 服务层。由于当时我的博客是拿Django写的,于是我拿Django REST Framework搭了一个简单的REST服务,开放式的API,也没有授权管理。
  • 应用程序层。除了在网页上提供了一个控制界面,我们还提供了一个手机APP,可以在烟雾报警或者红外报警的时候发短信、拨打电话等等。

在比赛期间,由于服务器性能的原因。我曾经花了一段时间在玩路由器,即OpenWRT,我在期待这个操作系统可以作为本地的家庭网关。当时我使用的是DB120路由器,在上面运行Django,详细可见我在2013年1月写的一篇博客《Openwrt,路由器上运行Django,基于DB120》。

不过由于经费限制,我使用的这个路由器性能不足以流畅进行开发,我便放弃了。

写作与开源项目

在大四上学期快结束的时候,我选择了物联网作为毕业设计的主题——《基于REST的最小物联网系统设计》。由于Django在部署上比较麻烦,并且这么一个复杂的CMS系统不利于我展示原理。于是,我转向了PHP,并使用Laravel框架来完成服务层及应用层的开发,然后用其来控制LED。

随后,我将上述作品的内容先是整理成了专栏《物联网系统设计》博客放在我的CSDN博客上,后来发现这些文章的阅读量还是蛮高的。我便将其整理成电子书放在GitHub上,取名为《教你设计物联网系统》,这本电子书到现在已经有806个star了。

其配套的源码iot在GitHub上也已经有了391个star。上面还搭配有当时用Graphviz画的一个简单的原理图:

我的物联网成长生涯_第2张图片

审校、翻译以及Lan物联网

在工作后的某一天里,我接收到英语Packt出版社的邮件,关于Review物联网书籍《Learning Internet of Things》。后来我问了一下才知道,原来是因为我在GitHub上有几个物联网的项目很不错。所以,他们觉得我可以作为一个技术专家来审校这本书。完成Review后,我的名字就在这本书上了:

我的物联网成长生涯_第3张图片

后来我在想如果有国内的出版社想引进这本书的话应该是会找我的,果不其然,不久我就接到 机械工业出版社 的翻译邮件。虽然我在一年前已经翻译完了这本书,但是它到现在还没有出版。

在这本书里,我开始了解到物联网的更广阔的世界。原来不止有HTTP,还有CoAP、MQTT,还有其他的协议,如UPnP、XMPP。并且在之前的内容里,我一直忽略了一个很重要的话题,安全。

于是,我便开始学习CoAP和MQTT,我在GitHub上创建了多个CoAP和MQTT相关的项目,直至后来创建了一个比较完整的项目:Lan,我才感觉我入了门。其系统的架构图如下:

我的物联网成长生涯_第4张图片

他使用Node.js实现的,拥有一个认证系统,可以在上面注册、登录,创建Token等等。在协议方面,还可以支持CoAP、MQTT协议。使用NoSQL数据库MongoDB,作为数据源。

混合应用以及One JavaScript

在我翻译书的期间,我开始尝试使用混合应用框架Ionic来开发一些应用。我便想着,如果只是这些简单的功能的话,那么我应该也可以用Ionic来开发这些功能,如开关控制、温度曲线、定时,以及后来做的BLE应用。

由于Raspberry Pi的实时性较差,以及Arduino的处理能力问题,我便开始寻找一些比较好的解决方案,如NodeMCU,又或者是Ruff等等。

在我完成了大部分的工作后,我就收到 电子工业出版社的 邮件——对,就是写书。于是,就有了今天的《自己动手设计物联网》,一本鼓吹JavaScript能力的书。不过,主要是因为这种书是在讲述原理及设计,对性能要求并没有特别高。
选择JavaScript的很大一部分原因是:一种语言可以实现大部分功能。因为在学校的经历里,我需要使用C、Arduino、Java、Python、JavaScript五种语言才能完成一个物联网系统。而到了今天使用JavaScript,就可以完成硬件端、移动端开发、服务端开发等等。

收获和体会

尽管整个过程看上去就是我在打各种软广告,但是串起后来的这些故事的原因,就是因为我在我的GitHub上写了一个物联网的电子书、放了一个物联网的项目。写作可以传播自己的知识,开源项目可以传播自己的思想,而这些都可以反过来促进我们更好的成长。

最开始的时候我在CSDN上写了一系列的物联网相关文章,并将相关的代码放在GitHub上。随后,我又将这些文章整理成了电子书,放在了GitHub。

接着,因为在GitHub上的项目,我就开始Packt的Review生涯。正是这次Review,让我发现了我在知识上的诸多不足,便深入了解各种物联网协议,才意思到服务层才是物联网的核心。我便继续练习,在GitHub上创建相关的开源项目。

积累到了一定的程度,这些项目就变成了一本书。

这一些都是良性的循环,我们做得好了,别人认可了,那么我们就可以做得更好。

你可能感兴趣的:(最小物联网系统设计)