自己动手设计物联网
  • 推荐0
  • 收藏9
  • 浏览1.5K

自己动手设计物联网

黄峰达 (作者) 

  • 书  号:978-7-121-29053-4
  • 出版日期:2016-07-20
  • 页  数:252
  • 开  本:16(185*235)
  • 出版状态:上市销售
  • 维护人:董英
物联网是一个跨领域的学科,涉及方方面面的知识,包括硬件、软件、网络、协议等,这些知识很难在一本书里详细展开。目前很多关于物联网的图书集中于射频、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/

目录

第1章 概览 1
1.1 物联网发展历史 1
1.2 物联网概念 3
1.3 联网——各式各样的联网设备 4
1.4 物联网系统的核心是网络 5
1.5 小结 6
第2章 一个极简的物联网:hello,world 8
2.1 数据的传输过程 9
2.1.1 将数据快递到用户手中 10
2.1.2 数据与服务中心 14
2.2 一个文本的物联网 16
2.2.1 从浏览器到服务器 17
2.2.2 获取数据与状态 22
2.3 设备状态改变 23
2.3.1 用Raspberry Pi来读取数据 24
2.3.2 使用Raspberry 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 与真实世界交互的物理层 41
3.1.4 物联网的神经中枢——协调层 45
3.1.5 物联网的核心——应用层 47
3.1.6 通信 49
3.2 小结 51
3.3 相关阅读资料 52
第4章 基于Web的物联网系统 53
4.1 Web应用架构 54
4.1.1 MVC 55
4.1.2 领域与适配器层 56
4.1.3 最小的HTTP API 57
4.1.4 RESTful API 58
4.2 数据持久化 63
4.2.1 数据库简介 63
4.2.2 连接MongoDB数据库 65
4.3 视图与应用层 76
4.3.1 视图 76
4.3.2 控制层界面 78
4.4 部署 84
4.5 小结 85
4.6 练习建议 86
4.7 相关阅读资料 86
第5章 连接设备 87
5.1 连接控制器 88
5.1.1 一个重复的示例以及仿造API 89
5.1.2 Raspberry 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 示例代码 109
5.3 连接传感器 111
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
6.1.2 仪表盘 129
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.3 控制硬件 155
6.3.4 用蓝牙来与硬件通信 158
6.4 使用AWS云平台构建物联网 162
6.5 小结 167
6.6 相关阅读资料 168
第7章 真正的物联网:MQTT与CoAP协议 169
7.1 MQTT 171
7.1.1 MQTT消息订阅示例 171
7.1.2 创建MQTT服务 174
7.1.3 整合MQTT服务 179
7.1.4 MQTT-SN 189
7.2 CoAP 189
7.2.1 CoAP协议示例 191
7.2.2 创建CoAP服务 194
7.2.3 整合CoAP服务 197
7.3 小结 200
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.3 私有物联网 212
8.3.4 隐私 212
8.4 小结 213
8.5 相关阅读资料 214
附录A Raspberry Pi快速指南 215
附录B JavaScript基础 217
附录C Ionic简单帮助文档 228
附录D 相关资源 233

读者评论

相关图书

AI魔法绘画:用Stable Diffusion挑战无限可能

陈然 (作者)

本书以实际操作为导向,详细讲解基于Stable Diffusion进行AI绘画的完整学习路线,包括绘画技巧、图片生成、提示词编写、ControlNet插件、模型...

 

职业抉择:产品和运营求职实战攻略

陈军 (作者)

本书主要讲解了与求职者密切相关的主题,内容包括求职者如何建立选择意识,如何通过“利弊分析法”和“因素加权法”选择适合自己的职业,如何使用“START 法则”打磨...

¥62.30

AI赋能——AI重新定义产品经理

连诗路 (作者)

剖析AI技术的发展历程和发展前景,讲述学习AI技术的资料、路径,提出AI时代挖掘需求的方法,总结打磨AI产品的观点、思路,助力产品经理转型和升级成为AI产品经理...

¥69.00

领域驱动设计精粹

(美)Vaughn Vernon(沃恩·弗农) (作者) 覃宇 (译者)

...

¥65.00

产品经理进化论:AI+时代产品经理的思维方法

连诗路 (作者)

本书以人工智能时代产品经理的思维与方法为主线,讲述了产品经理在人工智能浪潮中,从一般互联网产品的产品经理升级到AI+产品的产品经理应该思考的问题、应该具有的产品...

¥59.00

小白学产品:互联网产品经理快速成长手记

彭程远 (作者)

本书介绍了互联网产品经理工作中所需的基础知识和职业技能,包含用户需求、数据分析、原型设计、项目管理等方面的内容。通过讲解理论知识和翔实的案例让读者理解互联网产品...

¥49.00