物联网是一个跨领域的学科,涉及方方面面的知识,包括硬件、软件、网络、协议等,这些知识很难在一本书里详细展开。目前很多关于物联网的图书集中于射频、ZigBee、WiFi、蓝牙等硬件层级的构建。本书从自己动手打造一个物联网出发,旨在教会读者如何从系统级别、架构级别去设计物联网,从而掌握打造物联网系统的全过程。
本书在讲解的过程中遵循循序渐进的思想。首先,设计一个基于文本文件的物联网系统,向读者展示一个基本的物联网体系。然后,实现以互联网为基础的物联网系统,即以HTTP协议与Web编程为基础的物联网系统。最后,打造一个能结合多个物联网协议的物联网系统。在这个过程中,读者还将学会如何打造物联网的相关应用——手机APP、温度趋势、网页端控制等,以及如何打造智能、安全的物联网系统的相关内容。
内容不专在某一方面知识,专在“系统设计”
运用目前的主流技术,将不同的领域联通
循序渐进,一步一步搭建一个完整的物联网系统
作者是物流网领域“全栈”工程师
清晰展现了实际物联网系统设计和实现思路
序
很久之前读过一本关于芯片技术的书籍,在书的前言中作者讲述了一个故事。大意是这位教授在某次讲座中说到:“以后芯片的数量肯定是现在的几十倍,到时候我们都会享受到各种芯片强大的计算能力。”
这时一位听众当场起来反驳他道:“难道这栋大厦也会安装几个芯片吗?”随后引来哄堂大笑。
十年后当这位教授再次来到这栋大厦开讲座时,这里已经安装了不止几十个芯片。每个门侧都有一个门禁芯片,走廊里面各种传感芯片负责感应温度变化来检测火情等。
反观现在,如果我们说“以后电视、冰箱、空调甚至菜刀、锅碗、窗户都可以上网”,也一定会迎来不少人的嘲笑。但是我们依然有理由坚信——这些正在慢慢成为现实。
上过大学的人都有感触,自行车、饭卡、女朋友,三者其一如果没有弄丢过,那么你的大学是不完整的。当手机不知道放在哪了,我们可以用朋友的手机拨通这个号码,这样就可以根据来电声音找到手机。但是当钥匙不知道放哪了,除了翻箱倒柜地找之外,貌似没有更好的办法了。如果钥匙也能够接入网络的话,那么我们就可以轻松地定位钥匙于千里之外。
互联网的发展飞速地改变着世界,也改变着我们。而细看互联网的发展你会发现,之前我们使用互联网检索信息,这时的互联网连接的是“人与信息”,可以广义地称之为“人与物”。随着QQ、微信、人人网等社交网站的兴起,互联网连接的是“人与人”。而下一个互联网的发展方向则是连接“物与物”——我们称之为物联网。
小时候我们总会幻想有一个哈利?波特那样的魔法世界,或者西游记那样的神话世界,而长大后我们则会畅想钢铁侠那样的科幻世界。
下班后当你拖着疲惫的身体坐在地铁上,拿出手机更新自己的状态为下班路上,这时电饭煲会自动开启,里面的米饭进入蒸煮状态,窗户自动关闭,而空调自动打开并根据室内温度调整到最适合的温度……不过最霸气的当然还是每天早上,你睁开朦胧睡眼,大喊一声“要有光”,于是整个屋子都亮了。
虽然如此便捷,但是你是一个保守派,于是你并没有把root权限给它们,凡是都要亲自做决定,这时打开E-mail将是你最忙的时候。
冰箱给你发来2封邮件,“牛奶不够了,我已经查询了各大商城和附近超市,建议从家乐福订购打折促销的纯牛奶”,“提示:最新发现您的各项饮食指标不平衡,所摄取的食物中维生素C的含量偏低,是否购买半斤芹菜。”
床发来1封邮件,“最近七天睡眠质量图表如下……”
就连菜刀都发来了1封邮件:“我该磨了。”
而这一切天方夜谭似的故事正在工程师们的智慧和努力下成为现实。本书就讲述了如何设计并构建一个完善的物联网系统。
最初在网上了解Phodal是那篇在GitHub连击300天的文章,按活跃度来讲Phodal应该是国内最活跃的开源贡献者了。
当作者Phodal告诉我,他的书要出版了,让我写个序。我最初以为是Growth增长全栈,当他告诉我是关于物联网的时候,确实有些吃惊。当我再重读Phodal 的《编程之路》时发现,他不仅仅是一名前端加后端的全栈工程师,更是一位软件加硬件的全能工程师。
去年Phodal曾向我问Flarum接口API的情况,当时我正在国内为Flarum布道,遂给他介绍了一下Flarum的源码、接口、文档,以及中文社区的建设情况。没过几天Phodal告诉我,他用Growth为Flarum做了一个全平台的客户端——iOS、Android、WinPhone、Windows、Mac、其他。但愿有一天我家的微波炉也可以在Flarum论坛发帖。
Phodal来写这本物联网的书,那么注定这本书将是一本科普与实战相结合的进阶读物。里面不会有太多的名词概念的解释,更多的是如何设计,如何实现。
如果你是一名创客、极客,那么这本书很适合你。
Just enjoy it.
justjavac
Flarum中国社区创始人
2016年5月,天津
前 言
在最开始的时候,人们使用CGI来开发动态网页。在那个时候,人们也使用CGI来开发一些联网应用。早先及现有的物联网应用使用Web技术作为基础的技术,接着人们开始将一些不错的协议使用在物联网中,如MQTT。又有一些组织在制定一些协议,如CoAP。同时越来越多的国家和组织在出台自己的标准。
幸运的是,这些技术都是依据现有的技术发展而来的。技术在过去的几十年里发生了快速的变化,但是它们的本质是解决问题。而问题并没有发生快速的变化——还是一样的问题,只是我们有了更多可用的解决方案。
本书目标
本书不是一本详细介绍物联网系统的书籍,也不会和国内的一些教程一样主要集中于射频、ZigBee、WiFi、蓝牙等。我相信这些知识你已经在其他书中学到过了,而这些书籍更多的是侧重于硬件层级的构建,没有从系统级别、架构级别对系统进行设计。设计这样一个完整的系统,则是本书的核心。本书旨在教会用户如何去设计的思想,以及如何打造物联网系统的过程。至于系统底层硬件的实现细节则需要用户去把握。
本书遵循循序渐进的思想,从设计一个极其简单的物联网系统,再到基于以互联网为基础的物联网系统,最后打造了一个基于物联网协议的物联网系统。在这个过程中我们还将教会读者打造物联网的相关应用——手机APP、温度趋势、网页端控制等。
由于设计这个物联网系统本身有太多的知识点,并且涉及方方面面的知识,本书将尽可能地向读者推荐一些扩展阅读资料,并且建议读者多多实践。同时,由于章节间是一步步加深的关系,如果你在这其中遇到什么问题可以及时与作者联系。
目标读者:对物联网感兴趣的创客、极客、程序员、设计师;对物联网感兴趣的大学、中学师生;想自己动手设计完整物联网的相关从业人员。
为什么是JavaScript
在思考着用哪门语言来编写程序的时候,我考虑到了Python、Java、JavaScript。Python是我最喜欢的语言,JavaScript是我最擅长的语言,Java是我最常用(工作)的语言。它们都是非常不错的跨平台语言,它们都有广泛的使用者。
如果考虑将其商业化,我会考虑使用Java语言。Java语言是一门“正统”的语言,即在国内的计算机科学领域,各个院校都将之列为必学语言。除去Java Web的流行带来的需求,Android也增大了对Java语言的需求。由于Java语言是一门编译语言,并且经过二十多年的发展,积累了大量的技术和智慧,使得它相当稳定。因而多数企业都采用这门语言作为其主要语言。尽管Java语法简单,但是语法却比较烦琐、开发效率低,并不利于我们表述。
如果仅仅是考虑学习服务端,我会考虑使用Python来写我们的物联网系统。Python是一门简单、易学、易懂的脚本语言,在科学计算领域非常受欢迎。并且,在书中的一些例子里我会使用Python语言。Python语言富有表现力,可以更容易地让我们将自然语言转换为机器语言。然而,对于读者来说可能存在更多的学习成本。
So,JavaScript有什么优点?无论我们使用Java还是Python语言来开发我们的物联网应用,凡是涉及到网页前端相关的内容,我们都需要JavaScript,这就足够了!
那么,为什么我们不使用JavaScript来完成所有的这些工作呢?它有:
? Node.js框架——最流行的JavaScript服务端平台,可以创建Web应用。
? Cordova框架——最流行的混合应用框架,可以使用Web技术来开发手机应用(iOS、Android、Windows Phone等)。
这就意味着,我们可以用这门语言完成所有的开发任务——服务端、客户端、移动应用。如果你想,也可以用这门语言完成硬件端的开发。三星推出了可以适用于嵌入式设备的小型JerryScript,谷歌的两名前员工推出了适用于物联网领域的软件平台Smart.js。并且已经有几个开发板,如Tessel 2、Espruino,可以让你使用JavaScript为你的芯片编程。
其他语言
在服务端、客户端和移动应用的例子里,我们会用JavaScript、HTML、CSS来向读者展示其中的原理。在硬件部分,我们会用C/C++语言。在Raspberry Pi上编程的时候,会使用Python。其他部分,如Dashborad和NodeMCU的介绍,会有一些Lua或者Ruby语言的例子。
我们之所以在Raspberry Pi上使用Python语言,不仅仅是因为使用Python语言更容易读懂,而且在这个领域中主要使用的也是Python语言。同理于Dashboard的示例,我们使用了Dashing这个流行的框架,只是因为它更容易上手,并且使用的人较多。这就意味着,在我们遇到问题的时候更容易解决。
我们并不希望这些语言会阻碍你前进。在适当的时候你可以先跳过这一部分——如Dashing,我们展示了如何自己去写类似的界面,使用这个框架只是为了开发更快。随后在真正使用它的时候去深入它们。
为了用而学习是最有效率的学习。
本书内容
如下所示,本书分为8个章节和4个附录。
第1章 概览
本章介绍了物联网的历史背景和相关技术,以及其与互联网的关系。
第2章 一个极简的物联网:hello,world
本章以一个文本文件的数据为中心,快速搭建一个极简的物联网原型。其中将向读者展示物联网的一些基础知识。
第3章 分解物联网系统
本章将描述常用的物联网系统架构,并对每一个层级进行详细的描述和介绍。
第4章 基于Web的物联网系统
本章将介绍常用API的模式RESTful,并将带领读者打造基于HTTP协议的物联网系统。
第5章 连接设备
本章将介绍一些容易上手的设备,并将这些设备连接到物联网。不仅可以控制LED,也可以上传传感器数据。
第6章 物联网应用示例
本章将介绍用趋势图来显示传感器的数据,还将展示如何打造一个跨平台的APP来控制物联网设备。同时,还有使用一些当前的云服务来降低开发难度。
第7章 实现超越互联网的物联网
本章将介绍MQTT、CoAP等物联网协议,它们可以帮助我们更好地处理物联网系统中的消息通信。
第8章 智能与安全
本章将关注于一些额外的话题,如安全、智能、私有化。
附录
附录提供了简单的JavaScript入门指引、Ionic的一些介绍、物联网资料及Raspberry Pi的初始化等。
代码
本书的代码都可以从Github上(https://github.com/phodal/iot-code)或者CSDN Code上(https://code.csdn.net/designiot/code)下载到。
代码以MIT协议公开,你可以将其中的代码用于你的开发或者项目中。如果你在这个过程中遇到一些问题,请在网页上创建一个相关的Issues,以便我们能收到这个问题,并能帮助其他遇到同样问题的人解决问题。
下面是代码的一些简介,你也可以在相关的网页上看到。
目录 功能
手机APP 目录下是Hybird应用相关代码
仪表盘 仪表盘相关代码
第2章 Nginx示例、Python基础
第4章 基础Web服务器代码、RESTful服务代码
第5章 硬件、传感器示例、RESTful服务代码
第6章 RESTful服务器代码、Dashboard代码
第7章 MQTT、CoAP协议的服务器代码
第8章 自然语言处理示例
希望读者没有被上面的知识点所困扰到,知识点越多就说明越有挑战性!难道不是吗?
在线资源
由于笔者本身是开源的重度参与者及物联网的爱好者,并且这些资源可以时时更新。下面是一些在我的GitHub上关于物联网的相关资源。
1. https://github.com/phodal/awesome-iot 项目收集了各式各样的物联网资料——如框架、库、操作系统、API、平台、硬件等,大约每周会更新一次。
2. https://github.com/phodal/designiot 项目是笔者之前写的《一步步搭建物联网系统》,也是这本书的前身。
3. https://github.com/phodal/lan 项目是本书的物联网系统中的原型,但是含有更多的知识点和模块。
4. https://github.com/phodal/iot 项目是一个基于PHP语言的Laravel框架的最小物联网系统。
5. https://github.com/phodal/iot-document 项目内容已经收录到了本书的附录中。
6. https://github.com/phodal/designiot-refs 项目将包含本书的一些扩展阅读资料。
7. https://github.com/phodal/designiot-images 项目包含了本书的所有图片——由于打印出来的是黑白版的,可能会影响阅读。
8. https://github.com/phodal/growth 项目则包含了读者需要的Web开发的相关资料。
遇到问题
在阅读本书的过程中,如果读者遇到一些问题,可以通过以下方式与我联系:
1. 邮箱: h@phodal.com
2. 微博: @phodal
3. QQ群: 348100589
4. 微信公众号: Phodal
5. GitHub: @phodal(读者如果在相关代码上有问题,可以直接使用GitHub的Issue来提问)。
6. 论坛: http://bbs.designiot.cn/