1、IJtoa,由iewe自己动物联网黄峰达著J 田中国工信出版集团国信班在是丘;作者简介黄峰达毕业于西安文理学院电子信息工程专业,现就职于ThoughtWoks。长期活跃于开源软件社区GitHub,并编写有相当数量的物联网相关开源软件、维护物联网相关资料。专注于物联网和前端领域,长期为lnfoO编写物联网周报,著有电子书一步步搭建物联网系统、( GitHub漫游指南,被CSDN授予前端博客专家称号。曾作为技术专家,审阅英文版Packt出版社的物联网书籍(LearningInternet of Thiigs,并翻译该书。个人网站https:/ 个人微信公众号phodal自己动物联网黄峰达著需q.三
2、1.也蝇拮Publishing House of Electronics Industry 北京BEIID而J 内容简介物联网是一个跨领域的学科,涉及方方面面的知识,包括硬件、软件、网络、协议等,这些知识很难在一本书里详细展开。目前很多关于物联网的图书集中于射频、ZigBee、WiFi、蓝牙等硬件层级的构建。本书从自己动手打造一个物联网出发,旨在教会读者如何从系统级别、架构级别去设计物联网,从而掌握打造物联网系统的全过程。本书在讲解的过程中遵循循序渐进的思想。首先,设计一个基于文本文件的物联网系统,向读者展示一个基本的物联网体系。然后,实现以互联网为基础的物联网系统,即以HTTP协议与Web编
3、程为基础的物联网系统。最后,打造一个能结合多个物联网协议的物联网系统。在这个过程中,读者还将学会如何打造物联网的相关应用一一手机APP、温度趋势、网页端控制等,以及如何打造智能、安全的物联网系统的相关内容。本书适合对物联网感兴趣的创客、极客、程序员、设计师,对物联网感兴趣的大学、中学师生,以及想自己动手设计完整物联网的相关从业人员。未经许可,不得以任何方式复制或妙袭本书之部分或全部内容。版权所有,侵权必究。图书在版编目CCIP)数据自己动手设计物联网黄峰达著一北京:电子工业出版社,2016.7ISBN 978-7-121-29053-4 I .自II.黄皿互联网络一应用智能技术一应用IV.TP
4、393.4TP18中国版本图书馆CIP数据核字(2016)第131901号责任编辑:董英印刷:北京京师印务有限公司装订:北京京师印务有限公司出版发行:电子工业出版社北京市海淀区万寿路173信箱开本:7879801116 印张:15.75版次:2016年7月第1版印次:2017年4月第2次印刷印数:4001-5000册定价:59.00元邮编:100036字数:272千字凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010) 88254888 88258888。质量投诉请发邮件至,盗版侵权举报请发邮件至.本书咨询联系方式:010-5126
5、0888-819,。序很久之前读过一本关于芯片技术的书籍,在书的前言中作者讲述了一个故事。大意是这位教授在某次讲座中说到:“以后芯片的数量肯定是现在的几十倍,到时候我们都会享受到各种芯片强大的计算能力。”这时一位听众当场起来反驳他道:“难道这栋大厦也会安装几个芯片吗?”随后引来哄堂大笑。十年后当这位教授再次来到这栋大厦开讲座时,这里已经安装了不止几十个芯片。每个门侧都有一个门禁芯片,走廊里面各种传感芯片负责感应温度变化来检测火情等。反观现在,如果我们说“以后电视、协箱、空调甚至菜刀、锅碗、窗户都可以上网”,也一定会迎来不少人的嘲笑。但是我们依然有理由坚信一一这些正在慢慢成为现实。上过大学的人都
6、有感触,自行车、饭卡、女朋友,三者其一如果没有弄丢过,那么你的大学是不完整的。当手机不知道放在哪了,我们可以用朋友的手机拨通这个号码,这样就可以根据来电声音找到手机。但是当钥匙不知道放哪了,除了翻箱倒柜地找之外,貌似没有更好的办法了。如果钥匙也能够接入网络的话,那么我们就可以轻松地定位钥匙于千里之外。互联网的发展飞速地改变着世界,也改变着我们。而细看互联网的发展你会发现,之前我们使用互联网检索信息,这时的互联网连接的是“人与信息”,可以广义地称之为“人与物”。随着QQ、微信、人人网等社交网站的兴起,互联网连接的是“人与人”。而下一个互联网的发展方向则是连接“物与物”一一我们称之为物联网。iii
7、 小时候我们总会幻想有一个哈利波特那样的魔法世界,或者西游记那样的神话世界,而长大后我们则会畅想钢铁侠那样的科幻世界。下班后当你拖着疲惫的身体坐在地铁上,拿出手机更新自己的状态为下班路上,这时电饭褒会自动开启,里面的米饭进入蒸煮状态,窗户自动关闭,而空调自动打开并根据室内温度调整到最适合的温度不过最霸气的当然还是每天早上,你睁开朦胧睡眼,大喊一声“要有光”,于是整个屋子都亮了。虽然如此便捷,但是你是一个保守派,于是你并没有把root权限给它们,凡是都要亲自做决定,这时打开E-mail将是你最忙的时候。冰箱给你发来2封邮件,“牛奶不够了,我己经查询了各大商城和附近超市,建议从家乐福订购打折促销的
8、纯牛奶”,“提示:最新发现您的各项饮食指标不平衡,所摄取的食物中维生素C的含量偏低,是否购买半斤芹菜。”床发来1封邮件,“最近七天睡眠质量图表如下”就连菜刀都发来了l封邮件:“我该磨了。”而这一切天方夜谭似的故事正在工程师们的智慧和努力下成为现实。本书就讲述了如何设计并构建一个完善的物联网系统。最初在网上了解Phodal是那篇在GitHub连击300天的文章,按活跃度来讲Phodal应该是国内最活跃的开源贡献者了。当作者Phodal告诉我,他的书要出版了,让我写个序。我最初以为是Growth增长全枝,当他告诉我是关于物联网的时候,确实有些吃惊。当我再重读Phodal的编程之路时发现,他不仅仅是
9、一名前端加后端的全核工程师,更是一位软件加硬件的全能工程师。去年Phodal曾向我问Flarum接口API的情况,当时我正在国内为Flamm布道,遂给他介绍了一下Flarum的源码、接口、文档,以及中文社区的建设情况。没过几天Phodal告诉我,他用Growth为Flarum做了一个全平台的客户端一iOS、Android、lV WinPhone、Windows、Mac、其他。但愿有一天我家的微波炉也可以在Flamm论坛发帖。Phodal来写这本物联网的书,那么注定这本书将是一本科普与实战相结合的进阶读物。里面不会有太多的名词概念的解释,更多的是如何设计,如何实现。如果你是一名创客、极客,那么这
10、本书很适合你。Just enjoy it. jusrjavac Fl arum中国社区创始人2016年5月,天津v 目在最开始的时候,人们使用CGI来开发动态网页。在那个时候,人们也使用CGI来开发一些联网应用。早先及现有的物联网应用使用Web技术作为基础的技术,接着人们开始将一些不错的协议使用在物联网中,如MQTT。又有一些组织在制定一些协议,如CoAP。同时越来越多的国家和组织在出台自己的标准。幸运的是,这些技术都是依据现有的技术发展而来的。技术在过去的几十年里发生了快速的变化,但是它们的本质是解决问题。而问题并没有发生快速的变化一一还是一样的问题,只是我们有了更多可用的解决方案。本书目标
11、本书不是一本详细介绍物联网系统的书籍,也不会和国内的一些教程一样主要集中于射频、ZigBee、WiFi、蓝牙等。我相信这些知识你己经在其他书中学到过了,而这些书籍更多的是侧重于硬件层级的构建,没有从系统级别、架构级别对系统进行设计。设计这样一个完整的系统,则是本书的核心。本书旨在教会用户如何去设计的思想,以及如何打造物联网系统的过程。至于系统底层硬件的实现细节则需要用户去把握。本书遵循循序渐进的思想,从设计一个极其简单的物联网系统,再到基于以互联网为基础的物联网系统,最后打造了一个基于物联网协议的物联网系统。在这个过程中我们还将教会读者打造物联网的相关应用一一手机APP、温度趋势、网页端控制等
12、。由于设计这个物联网系统本身有太多的知识点,并且涉及方方面面的知识,本Vl 书将尽可能地向读者推荐一些扩展阅读资料,并且建议读者多多实践。同时,由于章节间是一步步加深的关系,如果你在这其中遇到什么问题可以及时与作者联系。目标读者:对物联网感兴趣的创客、极客、程序员、设计师;对物联网感兴趣的大学、中学师生;想自己动手设计完整物联网的相关从业人员。为什么是JavaScript在思考着用哪门语言来编写程序的时候,我考虑到了Python、Java、JavaScript。Python是我最喜欢的语言,JavaScript是我最擅长的语言,Java是我最常用(工作)的语言。它们都是非常不错的跨平台语言,它
13、们都有广泛的使用者。如果考虑将其商业化,我会考虑使用Java语言。Java语言是一门“正统”的语言,即在国内的计算机科学领域,各个院校都将之列为必学语言。除去JavaWeb的流行带来的需求,Android也增大了对Java语言的需求。由于Java语言是一门编译语言,并且经过二十多年的发展,积累了大量的技术和智慧,使得它相当稳定。因而多数企业都采用这门语言作为其主要语言。尽管Java语法简单,但是语法却比较烦琐、开发效率低,并不利于我们表述。如果仅仅是考虑学习服务端,我会考虑使用Python来写我们的物联网系统。Python是一门简单、易学、易懂的脚本语言,在科学计算领域非常受欢迎。并且,在书中
14、的一些例子里我会使用Python语言。Python语言富有表现力,可以更容易地让我们将自然语言转换为机器语言。然而,对于读者来说可能存在更多的学习成本。So, JavaScript有什么优点?无论我们使用Java还是Python语言来开发我们的物联网应用,凡是涉及到网页前端相关的内容,我们都需要JavaScript,这就足够了!那么,为什么我们不使用JavaScript来完成所有的这些工作呢?它有: Node.框架一一最流行的JavaScript服务端平台,可以创建Web应用。 Cordova框主一一最流行的混合应用框架,可以使用Web技术来开发手机应用CiOS、Android、Windows
15、Phone等)。vii 这就意味着,我们可以用这门语言完成所有的开发任务一一服务端、客户端、移动应用。如果你想,也可以用这门语言完成硬件端的开发。三星推出了可以适用于嵌入式设备的小型Je町rScript,谷歌的两名前员工推出了适用于物联网领域的软件平台Smart.js。并且已经有几个开发板,如Tessel2、Espruino,可以让你使用JavaScript为你的芯片编程。其他语言在服务端、客户端和移动应用的例子里,我们会用JavaScript、HTML、css来向读者展示其中的原理。在硬件部分,我们会用CIC语言。在RaspberryPi上编程的时候,会使用Python。其他部分,如Dash
16、borad和NodeMCU的介绍,会有一些Lua或者Ruby语言的例子。我们之所以在RaspberryPi上使用Python语言,不仅仅是因为使用Python语言更容易读懂,而且在这个领域中主要使用的也是Python语言。同理于Dashboard的示例,我们使用了Dashing这个流行的框架,只是因为它更容易上手,并且使用的人较多。这就意味着,在我们遇到问题的时候更容易解决。我们并不希望这些语言会阻碍你前进。在适当的时候你可以先跳过这一部分一一如Dashing,我们展示了如何自己去写类似的界面,使用这个框架只是为了开发更快。随后在真正使用它的时候去深入它们。为了用而学习是最有效率的学习。本书内
17、容如下所示,本书分为8个章节和4个附录。第1章概览本章介绍了物联网的历史背景和相关技术,以及其与互联网的关系。viii 第2章一个极简的物联网:hello,world 本章以一个文本文件的数据为中心,快速搭建一个极简的物联网原型。其中将向读者展示物联网的一些基础知识。第3章分解物联网系统本章将描述常用的物联网系统架构,并对每一个层级进行详细的描述和介绍。第4章基于Web的物联网系统本章将介绍常用API的模式RESTful,并将带领读者打造基于Hp协议的物联网系统。第5章连接设备本章将介绍一些容易上手的设备,并将这些设备连接到物联网。不仅可以控制LED,也可以上传传感器数据。第6章物联网应用示例
18、本章将介绍用趋势图来显示传感器的数据,还将展示如何打造一个跨平台的APP来控制物联网设备。同时,还有使用一些当前的云服务来降低开发难度。第7章实现超越互联网的物联网本章将介绍MQTT、CoAP等物联网协议,它们可以帮助我们更好地处理物联网系统中的消息通信。第8章智能与安全本章将关注于一些额外的话题,如安全、智能、私有化。附录附录提供了简单的JavaScript入门指引、Ionic的一些介绍、物联网资料及lX Raspberry Pi的初始化等。代码本书的代码都可以从Github上(https:/ 1. hts:句 hts:句 hts:/ h即s:/ https:/ https:/ design
19、iot-refs项目将包含本书的一些扩展阅读资料。7. https:/ hts:/ QQ群:3481005894.微信公众号:Phodal5. GitHub: phodal (读者如果在相关代码上有问题,可以直接使用GitHub的Issue来提问)。6.论坛:http:/ 目录第1章概览.1 1.1 物联网发展历史.1 1.2 物联网概念.3 1.3 联网一一各式各样的联网设备. .4 1.4 物联网系统的核心是网络 5 1.5 小结. .6 第2章一个极简的物联网:hello,world . 8 xii 2.1 数据的传输过程.9 2.1.1 将数据快递到用户手中.10 2.1.2 数据与服
20、务中心.14 2.2 一个文本的物联网16 2.2.1 从浏览器到服务器.17 2.2.2 获取数据与状态.22 2.3 设备状态改变.23 2.3.1 用RaspberryPi来读取数据.24 2.3.2 使用Raspbe町Pi控制LED. 28 2.4 小结.:.32 2.5 练习建议.33 2.6 问题回顾.33 2.7 相关阅读资料.33 第3章分解物联网系统. . . . .34 3.1 物联网的层级结构. . . . . . . . .35 3.1.1 一个常见场景下的层级结构. . . . . . .35 3.1.2 理想的物联网层级结构. . . . . . .38 3.1.3
21、 与真实世界交互的物理层 . .41 3.1.4 物联网的神经中枢一一一协调层. . . . .45 3.1.5 物联网的核心一一应用层.47 3.1.6 通信. . . . . . . .49 3.2 小结. . .51 3.3 相关阅读资料. . 但第4章基于Web的物联网系统 .53 4.1 Web应用架构. . . . . . . . . .54 4.1.2 领域与适配器层.56 4.1.4 RESTful API . 58 4.2 数据持久化 臼4.2.1 数据库简介. . .63 4.2.2 连接MongoDB数据库. .65 4.3 视图与应用层. . . . .76 4.3.1
22、视图. . .76 4.3.2 控制层界面. . . . . . . 78 4.5 小结. . . . . . . . . . . . .85 4.6 练习建议. .86 4.7 相关阅读资料. . .86 xiii 第5章连接设备.87 5.1 连接控制器.88 5.1.1 一个重复的示例以及仿造API. 89 5 .1.2 Rasp bey Pi + Arduino . 90 5.1.3 Arduino与网络模块. .94 5.1.4 NodeMCU . 98 5.2 连接执行器.103 5.2.1 直接控制示例. . . .103 5.2.2 间接控制示例. . . .106 5.2.3
23、 示例代码. .109 5.3 连接传感器.川5.3.1 让API支持上传传感器数据.112 5.3.2 土壤湿度传感器. .114 5.3.3 温度传感器. .115 5.3.4 数据合并. .121 5.4 小结.123 5.5 相关阅读资料.123 第6章物联网应用示例.124 6.1 数据可视化. .125 6.1.1 可视化用户数据.127 XlV 6.2 仪表盘类型示例:温度趋势图. .130 6.2.1 移动设备上查看. .139 6.2.2 使用Dashing. 140 6.3 创建手机应用.146 6.3.1 Ionic简介.147 6.3.2趋势图. . .153 6.3.
24、3 控制硬件. . . . 155 6.3.4 用蓝牙来与硬件通信. . . . . . . .158 6.4 使用AWS云平台构建物联网. .162 6.5 小结. . . . . . . . .167 6.6 相关阅读资料. . . . . . . . . .168 第7章真正的物联网:MQTI与CoAP协议. . . .169 7.1 MQTT . 171 7.1.1 MQTT消息订阅示例. . . . . . . . . . .171 7.1.2 创建MQTT服务. . . . . . .174 7.1.3 整合MQTT服务. . . . . .179 7.1.4 MQTSN . 18
25、9 7.2 CoAP . 189 7.2.2 创建CoAP服务. . . . .194 7.2.3 整合CoAP服务. .197 7.4 相关阅读资料. .200 第8章智能与安全. . . . . .201 8.1 回顾我们的物联网系统. . . . .202 8.2 智能化. 204 8.2.1 自然语言处理. . . . . . . . . . . .204 8.2.2 机器学习之贝叶斯分类器. . . . . . . . . . . . .207 8.3 安全与隐私. . . . . . .209 8.3.1 网络攻击.209 8.3.2 认证. . . . . . .211 8.3.
26、3 私有物联网. . . . . . . .212 8.3.4 隐私.212 xv 8.4 小结.213 8.5 相关阅读资料. .214 附录ARaspberry Pi快速指南.215 附录BJavaScript基础剖7附录CIonic简单帮助文档.22 8 附录D相关资源.23 3 xvi 第1章概览本章内容 学习物联网的概念及其背景. 物联网涉及的技术 物联网的未来在我初识物联网这个词时,我在网上、书上等资料上看到的很多字眼都是RFID无线射频识别,随后又看到了传感器网络等概念。这些词并没有告诉我们物联网是什么,而且它也有些以偏概全。我们所说的物联网来源于英语“II由metof Thin
27、gs”, 大意即事物的网络。这里就有疑惑了,什么才算得上这里的事物呢?我们日常用的纸、笔也算是事物,但是它似乎不属于这里的物一一因为我们没法拿它连接上网络。1.1 物联网发展历史讲物联网之前,我们也需要好好地介绍一下互联网。互联网诞生于20世纪70年代,是由美国国防部出于军事目的开始制定的。当时这个名为ARPA网的网络只连接了四台主机。随后在1974年,ARPA的罗伯特卡恩和斯坦福的温登泽夫提出TCP/IP协议。而到了1983年1月1日,ARPA网才将其网络核心协议由NCP改变为TCP/IP协1 自己用手设计韧联网议。1986年,美国国家科学基金会创建了大学之间互联的骨干网络NSFnet,这使
28、互联网走向了世界。紧接着在1991年8月,TimBemers和其他在欧洲粒子物理实验室的人创建了世上第一个网站。互联网从军用领域走向公用领域花了几十年的时间,而物联网的发展则更为快速。通常来说,人们所说的物联网(TheInternet of Things)的概念最早于1999年由美国Auto-ID公司提出,当时主要是建立在物品编码、盯B技术和互联网基础上。这也解释了为什么我们看到的很多物联网相关教材多数都在讲NFC、盯D技术。与此同时,中科院在当时开始了传感网的研究。传感网顾名思义是传感器组成的网络一一更多的是集中于收集传感器的数据,算得上是物联网的一个子集。在更早之前,1995年比尔盖茨的未
29、来之路一书也提出了物联网的概念。只是由于技术水平、硬件等的限制,在当时并没有引起重视。随后2005年,国际电信联盟发布了ITU互联网报告2005:物联网,报告中指出:无所不在的“物联网”通信时代即将来临。这时人们对于物联网己经有了新的认识一一不再仅仅局限于盯ID技术。只是由于当时技术的限制及应用的限定,并没有产生特别大的影响。在2009年1月,IBM首席执行官彭明盛提出“智慧地球”构想,其中物联网为“智慧地球”不可或缺的一部分。同年,奥巴马在就职演讲后己对“智慧地球”构想提出积极回应。温家宝总理在8月提出了“感知中国”,物联网被正式列为国家五大新兴战略性产业之一。根据美国权威咨询机构FORRE
30、STER预测,到2020年,世界上物物互联的业务,跟人与人通信的业务相比,将达到30: 1 。不过在今天,物联网己经使生活产生了翻来覆去的变化。开发人员现在也是尽他们所能去连接一切能连接的物。2 第1章”概览1.2 物联网概念在几十年前,能连接上网络的主要设备就是计算机。对于计算机来说,这个网络就是Internet,即互联网。而在十几年前,能连接上网络的设备就又多了一个手机一一一这完全改变了人类今天的生活。十几年前物联网也诞生了,只是当时的物联网是基于盯D技术的。由于十几年前对于物联网的定义是盯D技术,这也使得最近几年来的一些物联网书籍有一些不足。它们将主要精力放置于射频、Zigbee、蓝牙等
31、一些通信技术上,而这些技术多数则是用于区域内的设备通信的。换句来说,只集中于内部通信,在连接到网络的时候就会遇到种种困难。而这也是物联网需要解决的主要问题,连接到网络。物联网来源于Internetof Things一词,即世间万物的互联网。顾名思义,物联网的意思就是物物相连的互联网。这有两层意思:第一,物联网是建立在互联网之上的,是互联网的拓展和延伸:第二,其用户端扩展和延伸到了物品与物品之间,进行信息通信和交换。物联网有如下特征:. 首先,广泛应用了各种感知技术。在物联网中部署了大量的多种传感器,每个传感器都能从外界采集信息,不同类的传感器捕获的信息不同。而且获得的数据具有实时性,按照一定的
32、规律来采集数据,不断更新数据。 其次,它是建立在互联网上的网络。物联网技术的核心和基础仍是互联网,通过各种无线和有线网络与互联网结合起来,将物体的信息准确实时地传递出去,数据传输过程中必须适应各种网络协议。. 还有,物联网本身也具有一种智能处理的能力,能够智能控制物体。物联网从传感器中获得数据,然后进行分析,处理有意义的数据,来适应不同用户的需求。当前物联网己经在多方面开始应用,如远程抄表、电力行业、视频监控等。以3 自己却手设计韧联网及在物流领域和医疗领域也都日趋成熟,如物品存储及运输监测、远程医疗、个人的健康监护等。除此之外在环境监控、楼宇节能、食品等方面也开展了广泛应用。1.3联网一各式
33、各样的联网设备物联网的定义有些广泛,手机、计算机等都属于事物。互联网和物联网之间有相当多的交集。如我们在很多地方看到的一样,物联网的核心和基础仍将是互联网。而这仅仅只是在当前的环境下产生的一些技术。在可预见的未来,我们将会看到物联网和互联网的越来越多的不同之处。不同的环境、条件下,我们可能会使用不同于互联网的架构模型,但是其在大体上也是一致的。由于上网的设备不再仅仅局限于手机、电脑、平板,这也意味着越来越多的联网设备将被开发出来。在当前我们也可以通过现有的联网设备一一手机、电脑等,将我们的物连接到互联网中,使之成为互联网中的物联网。针对于不同的环境,我们就可能会组成由不同的设备构成的联网系统。
34、设备本身的一些特有属性的关系,限制了它们的连接方式,如: 当我们使用红外线遥控的时候,我们就需要使用红外线作为传输媒介。. 当我们使用于机来控制玩具的时候,我们就需要用蓝牙作为传输媒介。 当我们需要在电脑和手机之间传输资料的时候,我们就需要数据线或者WiFi作为传输媒介。使用特定的传输媒介,也会决定我们将使用不同的协议:如蓝牙协议、红外通信协议、NFC等。而这些不同的设备也需要借助于其他联网设备,来向服务中心通信。对于这些联网设备来说,它们可能会使用不同的传输协议: HTTP,即超文本传输协议,它是当今互联网的基础协议。 CoAP,受限制的应用协议,它面向那些资源受限制的物联网设备。4 第1章
35、概览 MQTT,即消息队列遥测传输,它被设计用于轻量级的发布订阅式消息传输。. 这些不同的协议、不同的设备连接到网络,也决定了整个系统看起来相当复杂。如图1-1所示的系统将是现在到未来几年内,家居联网系统的一个简化。图1-1物联网设备集现在我们己经连接了不同的设备一一手机、电脑、平板、摄像头、打印机,我们还可以连接上洗衣机、电饭锅、电暖器、空调等,我想不到未来有什么用电的设备不会连接到网络。1.4 物联网系统的核J山是网络过去我也花了大量的时间在硬件的软件开发上,硬件上的软件和服务端的软件开发有很多不同之处,最显著的特征是:服务端的软件开发是持续不断的。当我们这个版本里引入了一个Bug,那么我
36、们可以快速地修复这个B吨。而硬件上的软件5 自己动手设计韧联网开发的产出则是固件,通俗地来说就是固定的软件,这是一个很大的转变。同样,对于物联网系统设计来说也是如此。过去人们将主要的精力集中于硬件端的设计,而不是深入物联网的核心部分网络连接。在互联网普及之前,人们使用自己的PC在上面记录自己的数据,数据只能通过磁盘、光盘、U盘从一台计算机传输到另外一台计算机上。而互联网将不同的计算机连接到了一起,人们可以随时共享自己手上拥有的数据。网络不仅仅带来了令人喜悦的在线世界,还改变了人们的生活。对于物联网来说亦是如此,之前对于不同的电子设备,我们拥有不同的控制设备,如遥控。而近几年来的科技发展,使得我
37、们可以借由我们的手机控制大多数设备一一空调、电视、电灯等。而上面的设备多数都是借由互联网、蓝牙来完成的。为了连接不同的设备,我们需要将它们连接成一个网络。无论是工业中的物联网,还是智能家居,都离不开这关键性的连接。过去我们可以通过蓝牙、ZigBee等技术来构建一个本地的网络,而物联网的目的便是将这个本地网络连接到更大的网络中一一至少可以让你远程控制它们。我们需要这样一个网络来存储并分析我们的数据,并且当我们以网络为核心时,每一个小的硬件个体变得可更换。如果我们以单个硬件作为系统的核心,那么这个核心变得不可替换,也会改变整个系统的架构。而这样的硬件在未来可以作为协调这些设备的中心。同时,当这个硬
38、件将要被淘汰时,我们也可以使用最新的技术来开发我们的系统。因而你可以预见到,这是一个很复杂的领域。如果你是一个硬件开发人员,这里就需要结合你之前学习到的单片机的知识,同时你可能需要去了解Web开发的知识。作为一个软件开发人员,你需要去了解更多的物联网相关协议,以及硬件相关的通信知识。1.5 小结本章简单地对物联网的过去做了一些介绍,并且在可预见的未来它是一个非常重要的领域。而在这个领域中,涉及硬件、软件、Web开发等各种知识,这使得系6 第1章概览统变得尤为复杂。并且由于一些硬件设备的使用条件限制,使得连接不同的设备变得很复杂一一我们需要处理不同的通信设备、协议,以及不同的网络环境。而正是这些
39、复杂的设备环境,让我们可以认识到其实摆在我们眼前最难的问题是:把它们都连接到网络。下一章,让我们先做一个简单的网络以供它们连接吧。7 第2章个极筒的物联网:hello vvorld 本章内容 数据是以怎样的形式在Internet中传输的 HTTP协议的一些相关知识 对控制硬件有一个基本的了解起先,互联网是为了在不同计算机用户和通信网络之间进行常规的通信而开发的。而这里的通信,则是以互联网为媒介进行的信息交流与传递。因而,我们使用互联网的实质就是进行信息交流与传递。而信息实则加工处理后的有用数据。什么是有用的数据?有用是相对的,我们将一些饮料瓶当成了垃圾,但是在那些饮料厂看来,那就是有用的资源。
40、我们身处在IT这个行业中,除非我们所处的业务、领域与生物有关,否则类似于诺贝尔生物学奖这样的新闻,看上去便是无用的“垃圾”。今天,互联网也是以数据为中心进行传递的,物联网也是如此。两者稍有不同的是,后者更多的是将时间花费在处理数据上。因此,首先了解数据如何传输,然后才能对其进行处理。8 第2章一个极筒的韧联网:hello,woId在这一章中我们将理解如何以一个文本文件的数据为中心,快速搭建一个极简的物联网原型。开始阅读之前,先让我们看看这一章的架构图,如图2-1所示。- I 甲白白白白白由白白白白白自由明白白白白白白白白1服务器Nginx (HTIP疲劳amE L由”.J图2-1第2章程序架构
41、图这张图是这一章的核心,对于懂或者不懂两个极端的读者来说,这张图很简单。即一个用户的请求发送给服务器,最后由服务器返回一个文本文件中的内容。本章所需的软件清单: Mongoose是一个非常小巧的Web服务器,我们不需要编写任何代码便可以运行服务器。 Nginx是一款面向性能设计的HTTP服务器,也是主流的HTTP服务器之一。 Curl是一个在命令行方式下工作的开源文件传输工具。本章所需的硬件清单: Raspberry Pi或同等的带Linux操作系统的硬件。2.1 数据的传输过程或许你会问互联网的数据是从哪里产生的?这是一个有趣的话题,但不是本章讨论的核心。不过,我相信你己经知道了这个数据应该
42、是由传感器产生的。而且,我相信在9 自己司手设计韧联网你的手上己经有大量的传感器数据。也许你还使用过一些Web服务,并且将你的数据上传到某个API上:或许还在网页上打造你想要的温度趋势图。但是,你真的知道把数据从你的传感器上传到服务器的数据库中,并在你访问网页的时候又将数据取出来的过程吗?2.1.1 将数据快递到用户手中通常情况下,在我们访问一个网页的时候,我们看到的表面过程仅仅是我们敲入了一个网址,即URL。然后浏览器向服务器请求相应的HTML,接着根据HTML里面的内容,再请求其他资源,如图2-2所示。眩目ElementsConsole Sources f Network I Tlmeli
43、ne Profiles Resources Audits ObservePolnt I V VI制岳飞Prese附logDisable cache No throttling I Mer一一一一一一一寸JHide data URLs t!I) XHR JS CSS lmg Media Font D。cwsher SOOD ms lOOOOm lSOOOm 20000m 2SOOOms 30000ms 35000ms 4000叫1 x Headers Preview Resp。nseCo。klesTiming Ceneral l.,A.p川mln.css+g州哺叩。nsi盹min.css+ind
44、ex.css阳VWZn8tZ7.c且“lRequest URL; https:/www.phodal.四时, Request Method: GET U ga.Js I Status c。de:“209OK b xbg.jpg.pagospeed.ic.VvwfVNdMvJ.webp Remote Address: 54.69.23.11:443 LJ_utm.gi例tmwvS.6.7&utms3晶utmn 892685662晶时mh阳www.phod.Response Headers 1 , nr-686.min.目ache峭E。”tr。I:max-age笙e,n。cacheLJ lc9陶c
45、6e胁307阳蜘川!础,1tent幽language:en I c。”tent-type:text/html; charset=utf-S date: Tue, 13 Oct 2015 85:02:37倒Tserver: phodal/0.19.4 status: 200 vary: Accept-Language, Cookie vary: Accept-Enc。dingx-page-speed: Powered By Phoda t x-ua-compatible: IE=Edge, chrome=l 7陀questsI 9.5 KB transferred I Finish: 1.22
46、s I DOMC。ntentoaded:. 图2-2网站请求资源的网络过程图在这里,我们输入了笔者的网站地址到浏览器的地址栏中:https:/,接着在Chrome浏览器(即谷歌浏览器)的NetWork中可以看到这个过程(在其他浏览器中也可以看到相似的内容。在图2-2的左侧,我们可以看到我们10 第2章一个极筒的韧联网:hello,woId请求的所有资源。在图2-2右侧的General部分,我们可以看到我们请求的网址是https:仇IWW,方法是GET,返回的HTTP状态是200(即OK,代表这个URL可以正常访问,最后的RemoteAddress,即服务器的E。而ResponseHeaders
47、 则是服务器返回的一些信息,在这里就不做详细的介绍。这个请求过程看上去很复杂,实际上这就好比我们在亚马逊的网站上买商品:Cl)我们在网站上提交了我们的订单信息。(2)亚马逊的服务器看到了这条订单信息,放进队列中处理。(3)亚马逊的工作人员开始发出你想要的商品。而真实的请求过程和这个类似,我们发出了我们的请求,最后我们得到了想要的内容,如图2-3所示。Client Server 睛一问A田。+ + router伊t(/login飞function(req, res) use strict; lf(I用q.lsAu甘回ntcoted() es.render(login/index:你tie:Lon
48、 login1); e阳. 喝一在客户端浏览器渲染HTML。1笔墨立1.,阳., 。”chorHta”啊, 也咀庐室。ntac也ion-109氢.thod- 图2-3请求过程11 自己动手设计韧联网但是这个过程可能会稍微复杂一点,如果你的操作系统带有cURL1这个软件(GNU/Linux、MacOS都自带这个工具,Windows用户可以从ht:curl.haxx.se/download.html下载到),那么我们可以直接用下面的命令来看这个过程2(-v参数可以显示一次HTTP通信的整个过程):curl - v https: I / 我们会看到下面的响应过程:食RebuiltURL to: ht
49、tps:/ * Trying 54.69.23.11. . *Connected to (54.69.23.11) p。rt443 (#0) TLS 1 . 2 connection using TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384 * Server certificate: www.phodal. com * Server certificate: COMODO RSA Domain Validation Secure Server CA * Server certificate: COMODO RSA Certification Authority * Server certificate: AddTrust External CA Root GET / HTTP/1.1 Host: User-Agent: curl/7. 43. 0 Accept: */* HTTP/1.1 403 Forb工ddenServer: phodal/0.19. 4 Date: Tue, 13 Oct 2015 05:32:13 GMT c。ntent-Type:text/html; charset=utf-8 c。ntent-Length:170 Connection: keep-alive 403 Forbidden 403 Forbidden ph