Preface分析家预测,到了2020年,会有超过500亿的联网物(设备),在物联网领域的总营收会轻松超过1.5万亿美元。
数字看上去巨大,但是物联网究竟是什么呢?是不是就只是把东西连接到互联网上呢?为什么连接后的东西就有意义了呢?物联网远不止是把东西连接到互联网上那么简单。物联网给沉默呆滞的东西加上感知、通信和响应的能力,从而把它们变得更加智能。人有五官——我们可以看、听、尝、闻和触摸。同样,如果把这些传感器加到东西身上,它们也就可以有同样的感知了。比如,加上摄像头,东西就能看见;加上声音传感器,东西就能听见;加上扬声器,东西就能说话。东西能用的传感器比我们的多多了。把这些东西连接到互联网上,就能与我们交流,与其他东西交流。接下去,下一个前沿方向就是它们也可以运用人工智能来思考了。物联网有大量的应用,下面举两个例子来说明物联网是如何改善人类生活的:
监视用于监测生命体征的腕带,发现任何异常,就立刻通知你和你的医生。
监视你家房子的保安系统,发现任何入侵行为,就通知你和安保机构。
本书的内容本书来自于我开始接触物联网的个人体验。本书包含两个部分,第一部分介绍构建物联网应用的基础知识,而第二部分采用基于项目的方法介绍物联网应用开发方法。在每一章的最后,你会得到一个物联网应用的可用原型。
第一部分:基础第1~3章覆盖了物联网的基础知识。
第1章介绍本书所用的Arduino原型平台。
第2章讨论了把东西连入互联网的几个方案。
第3章介绍通信协议,哪些是物联网能用的协议。
第二部分:原型第4~12章用了第一部分的资料来构建物联网应用的原型。
第4章介绍Node-RED,这是一个可视化的设计软件,用来减少物联网应用所需的代码量。
第5章讨论的是可以实时给用户提供数据的物联网应用的构建,教你如何构建一个入侵检测系统。
第6章讨论可以遥控东西的物联网应用,比如灯光控制系统。
第7章展示了用来构建点播物联网应用所需的各种元件。本章要构建一个智能停车系统。
第8章教你适合网页应用的场景,所用的例子是温度监视系统。
第9章讨论位置感知装置的重要性。在本章中,你将学习如何开发一个牲畜跟踪系统。
第10章是关于需要人的响应的场景,在本章中,你将构建一个废物管理系统。
第11章讨论了物联网的一种模式,当东西越来越智能时,这种模式会非常常见。该章的示例是一个节能系统。
第12章介绍有助于加速进入物联网领域的一些平台。这一章的例子是构建一个土壤水分控制系统。
阅读本书前的准备工作物联网应用需要硬件和软件,可以涉及很多不同的技术,所以本书用到了不少技术。不过,我们已经尽力让所用的技术简单、精简。
硬件需求请参考每一章所提供的完整的说明,因为基于不同的作品,某些元器件不是必需的。
ArduinoUno或ArduinoYu?n以太网盾板WiFi(无线)盾板面包板跳线(面包线,针连针或针连孔的)光线传感器运动传感器(HC-SR501)LED220Ω电阻接近传感器(超声波测距HC-SR04)温度传感器(TMP36)GPS模块(NEO6MV2)土壤水分传感器软件需求ArduinoIDENode-REDMQTT代理(本书用了EclipseFoundation提供的免费公开的代理)AndroidStudioXcode/SwiftPHP服务器MySQL服务器文本编辑器EffektifBPM(基于云的,需要免费账户)Xively(基于云的,需要免费账户)Zapier(基于云的,需要免费账户)为了能更好地帮到你,我们还专门为这本书建立了一个网站(http://codifythings.com)。这个网站有书中所开发的原型的各种变化和增强版本,还有其他的原型作品。
本书的读者对象本书是为想要进入物联网世界的爱好者和专业人士所写的。本书所述的知识需要读者掌握一些Arduino或类似的元器件的基础知识,也需要读者具备一些编程经验。我们用了基础的硬件元器件,而且给出了逐步搭建电路的说明。我们保持代码简单、可读和简洁,以帮助新手理解概念、开发出可用的原型。全书的代码风格是一致的,在需要的地方,都加入了详细的代码注释。
TheTranslator’sWords?译者序这是一本角度独特的书。
大多数和Arduino相关的书会把重点放在Arduino编程或各种外部传感器、动作器的使用上;大多数和物联网相关的书会把重点放在各种外部传感器的使用和通信模块的编程上。这本书确实是讲物联网的原型开发的,确实是用Arduino来做原型开发的,也涉及通信模块和传感器、动作器,但是这本书志不在此。
那么,这本书到底讲了哪些东西呢?这得从下面四条线来讲。
通信线物联网总是需要一定的通信方式来联网的,本书关心的通信方式只是:
通信手段:WiFi或以太网。这两者的一致之处就是TCP/IP网络,这本书并不涉及蓝牙、ZigBEE、LoRa、NB-IoT这些通信手段,它只关心WiFi或以太网这些在家居条件下最容易部署和实现的方式。
通信协议:HTTP或MQTT。物联网设备用HTTP协议配合JSON格式来向服务器发送数据已经是常见的手段了,而MQTT则可能是更为轻巧的方式。MQTT(http://mqtt.org)是一种物联网连接协议,用于实现非常轻量级的发布/订阅方式的消息传输,只需要很少的代码和很小的网络流量就可以实现。本书并没有介绍如何自行搭建MQTT代理服务器,而是使用免费开放的Eclipse基金会所架设的MQTT服务器(iot.eclipse.org)。
流程线很多作者只关心如何把传感器的数据送到服务器上,之后就不管了。而本书还关心数据到服务器之后再怎样做:要不要存储进数据库?要不要发邮件或推特通知?要不要发给其他物联网设备来形成对应的动作?一个数据从传感器采集到最后被某个应用或设备处理,这中间怎么走,也就是物联网应用的流程问题。这样的流程是在服务器上运行的,但是并不需要写专门的服务器程序来实现,现在有一些专门的流程服务来替你完成,你只需要配置就可以了。这本书介绍的流程服务包括:
Node-RED(http://nodered.org)。Node-RED是IBM新兴技术服务团队创建的物联网流程配置可视化工具。这是一个出色的拖曳式的可重用代码的工具集,每个任务流从收到一个或多个输入开始,比如HTTP、MQTT和TCP;在一个或多个输出任务上结束,比如HTTP回复、MQTT发布、推特等。
SignavioWorkflow(https://www.signavio.com/products/workflow/)。这是一个云端的平台,能自动快速地把工作流和过程导入应用。同样的功能过去常常需要一条企业数据总线和几名开发人员,而现在非技术人员都能可视化地部署消息的转发过程。
Xively(https://www.xively.com)。这是一个开放的通用物联网平台,通过这个PaaS云平台,可将应用、设备、虚拟电子物体、数据及用户链接在一起,从而创建方案,与物理世界的物体交互。
传统的Apache+PHP+MySQL:本书还介绍了传统的LAMP模式,解释了如何构建自己的服务器来接收通过HTTP方式传输的数据,并保存在MySQL数据库中,之后可以通过PHP脚本来查询和访问。
终端线物联网的两端,可能是机器——传感器和动作器,也可能是人。本书介绍了连接在物联网的两端的四种终端:
Arduino安卓iOS网页模式线物联网应用虽然千变万化、纷繁复杂,但是万变不离其宗,作者总结了几种常见的模式:
实时模式:传感器的数据实时地推送到终端。
点播模式:终端需要的时候才会拉取传感器的数据。
遥控模式:从终端控制动作器。
位置感知:利用GPS获得地理位置,将坐标实时发送给服务器,并形成后续的流程动作。
机器->人:传感器的数据需要人工介入来完成数据的处理和后续流程。
机器->机器:传感器的数据直接发给动作器实现相应的响应。
本书分成了两个部分:第一个部分适合对Arduino及其网络通信还不熟悉的读者;第二部分则是具体展开各种模式。阅读本书时,不需要从头到尾逐章地读,它不是连续剧而是系列剧,你完全可以直接阅读自己感兴趣的章节。
翁恺2017年2月