第一阶段 - 物联网简介:是什么,为什么以及怎么样






4.81/5 (53投票s)
物联网入门指南:从未得到解答的常见问题!
Content
1. 背景
已经有很多文章、信息图和教程定义和解释了物联网。但问题是为什么要再写一篇关于这个主题的文章。作为一名开发者,当我在互联网上寻找关于物联网的更多信息时,我找到了大量关于物联网“概念性”的文章,但很少有从开发者角度详细阐述的文章。此外,哪些硬件和设备、软件和服务属于物联网的范畴也并不清晰。基础文章也没有明确指出开发者在物联网领域需要哪些基本技能和转型技能。所以在这篇文章中,我将重点从开发者视角阐述物联网,并尝试将这个更宽泛的话题具体化。我还会详细说明开始物联网开发所需的基本工具。所以,如果你是一位想了解物联网的开发者,这篇文章可能正是你值得收藏的。但如果你是一位想为演示文稿找些信息的市场营销人员,还是省省你的时间吧。
2. 什么是物联网(IoT)?
2.1 嵌入式系统
维基百科说
引用物联网(IoT)是指将唯一可识别的嵌入式计算设备互连在现有的互联网基础设施内。
所以,物联网或IoT基本上就是将嵌入式系统连接到互联网。因此,在理解物联网之前,让我们先稍微了解一下嵌入式系统。
嵌入式系统的核心是RISC系列的微控制器,如PIC 16F84/Atmel 8051/Motorola 68HC11等。这些微控制器与像8085这样的微处理器最重要的区别在于它们内部有可读写的存储器(EPROM)。所以你可以开发你的轻量级程序(用汇编语言或使用像Keil这样的软件编写嵌入式C语言),然后将程序“烧录”到硬件中。这些程序会一直循环运行。
有趣的是,在大多数嵌入式系统中,只烧录一个包含多个子程序的单一程序。所以,与你的个人电脑不同,嵌入式系统中的微控制器设备会无限地运行一个单一的程序。
你可以将多个输入和输出设备连接到这些微控制器上,这些设备要么是内存映射的,要么是IO映射的。这些简单的硬件包括LCD显示屏、蜂鸣器、键盘(数字键盘)甚至打印机。你可以通过A/D接口连接多个传感器。这些设备可以通过驱动设备(如继电器-光耦)来控制更高功率/电压/电流等级的设备,比如风扇、马达、灯泡等。
图2.2展示了一台典型的可乐自动售货机及其内部的嵌入式系统。
在右边的图中,你可以清楚地看到开关、LCD和继电器。
从简单的DIY机器人到更商业化的系统,如洗衣机、烤箱、空调控制器、汽车、手持票据打印机、酒店迷你账单打印机,嵌入式系统无处不在。
那么,为什么这类嵌入式系统如此有吸引力呢?
1) 自主性:这意味着你可以针对特定应用构建一个系统。例如,一些标准外设和一个专门的程序就可以将一个微控制器单元变成洗衣机控制器或烤箱控制器。此外,嵌入式系统可以根据需求定制。不像个人电脑离了显示器就无法工作,嵌入式系统不一定需要显示单元。
2) 低成本:微控制器单元的成本比一台功能齐全的电脑要低几个数量级。
3) 占用空间小:显然,图2.2显示,与即使是最轻薄的笔记本电脑相比,嵌入式系统占用的空间也要小得多。因此,你可以非常高效地将这样的系统放入你的硬件系统中。
4) 低功耗:市面上大多数常见的、作为嵌入式系统热门选择的微控制器都在5V电压下工作,通常需要5V稳压电源,这可以通过一个简单的带电压调节器的9V标准电池提供,或者直接通过使用带滤波电路的电压整流器从主电源获取。
还有许多其他因素,包括I/O速度和成本、每条指令的能耗等等。所以我们对什么是嵌入式系统以及嵌入式系统的构成有了相当的了解。
但是当你看到图2.2右边的微型嵌入式系统时,你看不到键盘。那么这样的微控制器是如何编程的呢?这通常是通过将微控制器与个人电脑连接来完成的。这个套件通常被称为“编程器套件”或“烧录器”。图2.3展示了一个典型的Atmel套件。
图 2.3:用于Atmel微控制器的编程器套件
不同的设备,用于在微控制器中烧录程序的套件或硬件会有所不同,但它们的总体结构保持不变。将系统的微控制器放入插槽中,并与个人电脑连接。然后使用一个像Keil这样的MC烧录工具。我们可以使用汇编程序或嵌入式C语言来编写和烧录程序到微控制器中。最后,我们可以将其他组件连接并焊接到最终的PCB上,使系统工作起来。
嗯,这就是一个通用嵌入式系统的工作方式,并且很可能会继续这样工作。
从上面的讨论中可以得出的重要结论是,嵌入式系统中的微控制器需要通过PC接口来烧录程序。但是程序本身能否与PC通信呢?
大多数现代微控制器都具备串行通信能力。也就是说,它们可以通过RS-232串行端口与PC进行半双工通信,或者如果添加了USB驱动电路,则可以通过USB端口通信。这种连接的优势在于,可以记录来自微控制器的数据,而且微控制器现在可以与更高级的程序(如Java或C#.Net)通信,因为大多数这些高级编程语言都支持串行通信。
例如,假设你正在构建一个带有火警功能的简单温度显示嵌入式系统。一个LM-35传感器通过8位ADC连接到微控制器。微控制器连接到一个16针双行LCD,如图2.2所示。所以它会持续测量温度并在LCD上显示。一旦温度超过某个阈值,它就会触发警报。
借助PC接口,温度现在可以显示在PC显示器上,并且可以定期记录到文件或数据库中,以便日后分析这些数值。
所以,即使是让一个裸嵌入式系统工作这样的基本操作,也需要额外的硬件,因为核心微控制器只是一个单芯片。这个微控制器需要电源电路、ADC电路、接口电路等等。
因此,人们开发了标准的套件,将这套标准的硬件嵌入到一块板子上,可以直接使用,无需任何外部硬件。
2.2 嵌入式板
为了标准化硬件和相关软件,并提供让嵌入式系统工作所需的基本和最简硬件单元,人们开发了标准的嵌入式板。这些板上集成了硬件组件,如电压调节器、USB FTDI芯片、A/D转换器等。不同的板支持不同的微控制器和不同的CPU架构。这些板是为特定应用量身定做的,比如医疗电子、游戏等。请看下图中的一些示例板。
图 2.4 一些常见的嵌入式板(来源:www.eurotech.com)
为了便于为生产级系统烧录、调试和开发软件及固件,人们开发了IDE(集成开发环境)。所以,你现在可以拥有更紧凑的套件来满足更复杂的需求,而不是处理单个微控制器单元并在芯片级别调试和维护硬件。
然而,真正彻底改变了嵌入式套件并为DIY爱好者插上翅膀的,是Arduino。虽然在本文中我们不打算教任何关于Arduino的东西,但我们会对Arduino有一个基本的了解,这将帮助我们宏观地理解物联网嵌入式板。
2.3 Arduino板通用介绍
引用Arduino是一个基于易于使用的硬件和软件的开源电子平台。
Arduino是一个将Atmel微控制器系列与标准硬件结合到一块板上的架构,它内置了引导加载程序(bootloader),可实现即插即用的嵌入式编程。Arduino软件附带一个IDE,可帮助编写、调试和烧录程序到Arduino中。该IDE还带有一个串行通信窗口,通过它你可以轻松地从板子上获取串行数据。
图 2.5 一块典型的Arduino板(Dicimilia)
这块板子拥有一切,从ADC到USB控制器再到PWM端口。所以你现在可以将继电器或LCD连接到顶部的数字端口,并将传感器的输出引脚直接连接到底部的模拟端口。驱动不同传感器所需的5V或3V电源可以直接从左下角的电源端口获取。该板可以通过USB供电,也可以通过在Vin引脚上连接9V电池来供电。你还可以用标准的9V适配器来驱动该板。这些引脚的设计使得你可以无需任何焊接,只需将导线或传感器/设备引脚插入Arduino的引脚孔中,就可以连接多种硬件。
Arduino可以使用USB线与PC通信,并被配置为从设备。多个Arduino可以通过串行通信连接在一起(见右上角的引脚0和引脚1,它们使Arduino能与其他设备进行串行通信)。Arduino还可以作为其他外设的主设备,比如可以连接到Arduino的Tx-Rx引脚的指纹传感器。
我用Arduino开发了几个业余和原型项目。你有空可以看看我的YouTube频道的Arduino播放列表。
由于其开放的硬件和软件架构,你完全可以根据自己的需求构建自己的板子。然而,市场上已经有各种不同尺寸、架构、功率需求和用途的板子。请看图2.6中各式各样的Arduino板。
图 2.6 不同的Arduino板
我们并不是真的想在本教程中学习Arduino,我们的目标是借助Arduino来理解物联网。
所以,有了基础嵌入式系统可以作为一块具备某些即插即用功能的板子来提供的知识,我们基本上已经准备好从整体上理解物联网了。
2.4 物联网的正式介绍
回想一下,我们将物联网定义为可以连接到互联网的嵌入式设备。在理解了什么是嵌入式系统以及现代嵌入式板是什么之后,理解物联网的概念就不太难了。
考虑以下将温度传感器连接到Arduino的示意图
图 2.7 温度传感器LM-35与Arduino连接示意图
所以,使用Arduino的IDE,我们可以与设备建立串行通信并读取温度值,对吗?或者我们可以连接一个LCD显示屏来显示温度。但是如何通过互联网从世界任何地方查看温度呢?
如何在你的手机上获取温度信息?或者每隔一段时间就收到一条关于温度的推文?
这个方案看起来是不是很有吸引力?是的,当然是。如果你能将你的嵌入式设备连接到互联网,你就可以在线获取传感器信息,这些信息可以在包括平板电脑和手机在内的各种设备上查看。你还可以通过互联网控制设备。你实际上可以将多个家用电器连接到你的嵌入式系统,而这个嵌入式系统则通过唯一的IP地址连接到互联网。然后你就可以通过在线生成指令来指示设备打开或关闭某些外围设备。
所以,物联网(IoT)是一个包含专门的硬件板、软件系统、Web API、协议的架构,它们共同创造了一个无缝的环境,允许智能嵌入式设备连接到互联网,从而可以通过互联网访问传感数据并触发控制系统。
此外,设备可以通过多种方式连接到互联网,如WiFi、以太网等。再者,设备可能不需要独立连接到互联网。相反,可以创建一个设备集群(例如一个传感器网络),然后将基站或簇头连接到互联网。这就导致了从高层到低层的更抽象的通信协议架构。
下图解释了物联网到底是什么。
最有趣的是,这些设备必须能被唯一地发现。为了在网络中唯一地发现设备,它们需要有唯一的IP地址。由于在线的物联网设备数量预计将超过200亿,而IPv4只能支持最多40亿个唯一地址,因此物联网设备基本上采用IPv6寻址方案。所有这些设备要么有固定的v6类型IP地址,要么有子网掩码的v6类型IP地址。
唯一的IP地址使得物联网设备可以作为独立的节点在互联网上被发现。这是理解物联网最重要的概念。
3. 哪些设备属于物联网
在我们看哪些设备属于物联网之前,我们还需要在这里澄清几件事。到目前为止,我们已经看到物联网本质上是连接到互联网的嵌入式系统和智能对象,它们具有唯一的IP地址,可以在互联网上被发现和通信。我们还看到,物联网设备可能有外部外设,如执行器和传感器。
3.1 手机是物联网设备吗?
我们日常生活中最常见的设备之一是手机。手机本质上是一个嵌入式系统,核心是处理器,配有显示屏和键盘。它们支持各种传感器,如环境光传感器、加速度计、陀螺仪等。它们连接到互联网。手机有IP地址,可以访问互联网。换句话说,它几乎符合物联网的所有描述。那么我们可以称手机为物联网设备吗?
这个疑问在2011年9月巴塞罗那世界移动通信大会的一场主题演讲中得到了澄清,由高通公司董事长兼首席执行官保罗·雅各布斯博士(Dr. Paul Jacobs)阐明。
保罗·雅各布斯谈到,移动技术可以用来将非手机、非平板的设备(称为物联网设备)和物体连接到互联网。在这个万物互联的未来,手机将作为物联网的中心枢纽或遥控器。
所以,物联网是指除手机外的智能对象和嵌入式系统的互联网连接,这些设备可以与外部硬件连接,而手机、平板电脑、笔记本电脑和个人电脑则是物联网的远程控制/访问中心。
3.2 什么是智能对象?
在关于物联网的一般定义和描述中,我们经常看到“智能对象”和“智能设备”与嵌入式系统的网络连接性一起被提及。但究竟什么是智能对象?
引用智能对象是指能够描述其自身可能交互的对象。
任何对象,如果不仅有状态,有与状态相关联的特定数据,而且还能决定连接的性质、连接的持续时间和连接协议,那么这个对象就被称为智能对象。
射频识别(RFID)、低功耗蓝牙(BLE)和近场通信(NFC)使得我们可以用手机作为读取器。我们只需轻触某个物体或将设备靠近它,就可以从中提取信息。RFID标签没有嵌入式系统,NFC标签也没有。但数据仍然可以通过读取器读取并上传到互联网。这些被称为智能对象。那些没有处理器,但其数据可以被获取并迁移到互联网上的实体,就属于这一类。
短距离低功耗传感器技术催生了智能对象。比方说,一件T恤带有一个智能标签。我们可以用手机轻触它,就能得到关于布料质量、尺寸、其他颜色款式、染料信息等,这有助于我们做出购买决定。一旦获取了这些信息,就可以将其作为搜索查询,以获得类似的结果,从而比较类似标签的价格和质量。
3.3 物联网设备
如果你关注硅谷的新闻,你肯定知道物联网是最近的热门话题。因此,现在许多初创公司都专注于物联网。所以当我们谈论物联网时,我们实际上是在谈论无限的可能性、硬件和软件平台。因此,当你在互联网上试图寻找一份物联网设备清单时,你可能会感到沮丧,纯粹是因为提供这样的清单很困难。
因此,这一小节的研究花费了大量时间。最后,我整理了一些物联网中最常见和最流行的技术,让你对我们到底在谈论哪些设备有一个概览。
我们将物联网设备分为两大类:可穿戴设备和由微控制器/微处理器驱动的嵌入式物联网设备。一些嵌入式设备,如Arduino Lillypad,非常小巧,你可以进一步利用它们来制作自己的可穿戴解决方案。但在可穿戴设备部分,我列出的是相当标准的硬件,对开发者而言,物联网的范围主要在软件层面。
我还列出了一些在嵌入式层面使用物联网硬件时可能需要学习的常见外围硬件。
图 3.1 常见的物联网设备和技术
所以,如果你不是硬件极客,你可以从可穿戴设备开始,为流行的可穿戴平台开发应用。如果你是硬件爱好者,你可以从嵌入式物联网平台开始。你可以选择任何一种更广泛的技术,比如树莓派(Raspberry Pi)、Arduino或Galileo,然后开始物联网开发。
我个人是Arduino的粉丝,用它做过大量的业余和商业项目。我也用过树莓派。我可以说,如果你的应用更“以核心硬件为中心”(意味着使用执行器和传感器),Arduino是一个很好的选择;但如果你的应用更以数据为中心(比如创建一个文件服务器或媒体服务器),那么树莓派无疑是最佳选择。Galileo使用与Arduino相同的IDE。所以如果你能学会Arduino,迁移到Galileo很容易。我不 стыдно承认,我对其他硬件平台几乎没有任何经验。
4. 物联网平台
在这个阶段,我们将我们的物联网开发分为两种并行的技术:可穿戴和嵌入式。开发者可以为像Peeble、三星Gear这样的定制可穿戴设备构建应用程序,或者选择使用嵌入式解决方案创建自己的平台,然后为该平台开发应用程序。
4.1 可穿戴平台
Tizen正迅速成为移动和可穿戴设备最受欢迎的平台之一。Tizen SDK附带了可穿戴设备模拟器,这使得为Tizen平台开发可穿戴解决方案变得更加容易。
如图3.1所示,现在有大量的Android Wear设备正在制造和销售。智能手表日益普及。Android Wear应用可以在Eclipse中开发和测试。这份Android开发者指南可以帮助你在Eclipse中设置Android Wear开发环境。
Salesforce是另一个正在推出令人惊叹的开发环境和API的可穿戴技术平台。他们的解决方案从Peeble延伸到Google Glass。如果你打算将可穿戴技术作为职业选择,Salesforce真的值得一试。请查看Salesforce Wear页面。
4.2 嵌入式平台
Arduino可能是开始基于嵌入式的物联网开发的最佳起点。基础的Arduino板不带以太网扩展板,要让Arduino能够作为物联网设备工作,你需要选择带以太网扩展板的Arduino。另一方面,Arduino Yun是一款自带以太网扩展板的板子。你实际上可以订购一块像Arduino Decimilia或Duemilanove这样的基础板,学习硬件基础知识,比如连接传感器、使用执行器、串行通信,然后你可以购买以太网扩展板,并为Arduino寻找更多基于Web的应用。
树莓派(Raspberry Pi)可能是DIY物联网领域最棒的事情之一。从家庭自动化服务器到家庭多媒体服务器、文件服务器,各种数据驱动的应用都可以用树莓派来开发。树莓派和Arduino一样有通用IO引脚。但在树莓派上与传感器无缝协作会有点繁琐。
另一款高效的物联网板是英特尔Edison,它集成了低功耗蓝牙(BLE)、WiFi以及众多其他功能。它通过一个70针的接口支持超过30种行业标准硬件。重要的是,它支持包括Arduino和Node.js在内的多种平台。
英特尔Galileo是英特尔推出的另一款优秀产品,它支持与Arduino Uno相同的扩展板。所以可以说它是第一款兼容Arduino的英特尔驱动设备。它和其他功能一样,拥有一个像树莓派一样的USB主控制器,这使它成为一个很有吸引力的硬件。Galileo也内置了以太网扩展板。
曾几何时,微软主导着技术和趋势,行业都紧随其后。但现在情况不同了。随着多家公司争夺可穿戴设备领域的市场份额,微软似乎在努力追赶,目前看起来并不太令人印象深刻。尽管如此,Netduino是一个基于.Net Micro Framework的平台,其硬件与Arduino相似。但Netduino拥有12位的ADC,而Arduino的ADC通道是10位的,并且Netduino使用32位控制器。还有一些其他的区别。但对我来说,Arduino比Netduino更好的原因是,我可以用不到10美元的价格买到一个Arduino Duemilanove,而Netduino大约要60美元。虽然Netduino在多任务处理方面确实更好,但对于DIY爱好者来说,成本是一个很大的因素。
4.3 物联网云平台
让我们再次从纯粹可能性的角度,重新讨论一下饮料自动售货机。在传统的自动售货机中,你需要按下一个按钮或投入一枚硬币来触发液体流出的过程,这个过程在流出一定量后停止。现在,如果将PayPal或Google Money与售货机集成会怎么样?如果一个顾客可以像发现一个“网站”一样发现这台售货机及其位置,然后在线支付一杯饮料的费用呢?支付成功后,他会得到一个访问令牌。他可以通过NFC将这个令牌传递给机器,然后,瞧,他就拿到了他的饮料。
现在,这个逻辑上的可能性对于理解物联网非常重要,物联网确实可以将多种服务(如在线支付网关)、多种硬件平台(如售货机的嵌入式板)以及智能对象和数据(如NFC、GPS)整合到一个无缝的环境中。
现在,如果你能将在线支付集成到饮料自动售货机中,为什么不能用于社区洗衣机呢?如果你能为饮料机使用定位服务,那为什么不将定位和支付服务用于收费站呢?为什么不将医疗诊断数据,如心电图(通过另一块属于医疗电子领域的嵌入式板获取),上传到云端,以便多位医生可以查看并对患者的状况形成全面的意见呢?
嗯,事实上,所有这些都是可能的。对Web和软件设计稍有了解,你的思路就会转向云。就像机器的互联网一样,在机器对机器(M2M)或机器对对象(M2O)或任何类似的通信中,许多模块是通用的,并且许多模块要求数据可供共享。云API在这方面就派上了用场。
例如,当你需要让一个设备在网络上可被发现时,你必须分配一个固定的IP地址,维护一个路由器,并遵循多种网络技能。你可能没有维护一个商业级复杂物联网网络所需的知识和基础设施。
Yaler是服务和云能带来什么价值的一个很好的例子。它提供连接即服务,使你的设备可以轻松地在Web上被发现和通信,而无需太多麻烦,并负责底层的安全问题。
Axeda为M2M架构提供基础设施。
OpenIoT是一个开源的物联网平台,除其他服务外,它还提供独特的传感即服务(Sensing as a Service)。
谷歌已经将其定位服务与云集成。从你的设备中提取的位置信息会悄悄地出现在你的Facebook和Twitter状态更新中,并用于更个性化的搜索。
因此,云API在物联网的各个架构层面都有巨大潜力,从固件到硬件,再到更顶层的架构。
5. 物联网对开发者意味着什么
计算机行业经历了几次范式转移。从文本操作系统到Windows 3.1,然后是Windows 95,再到互联网革命、谷歌搜索引擎革命、电子商务、手机、iPhone、安卓。每一次技术变革都为那些渴望适应变化的人开启了许多新的机遇。物联网就是这样一次敲响我们大门的范式转移。它在硬件和软件层面都带来了大量机会,并将在未来几年催生更多标准。硬件将最终精简为少数几款优秀的开发板,可穿戴设备将包含一些杀手级设备,而平台将有其自己的流行选择,就像当前计算平台中的Visual Studio.Net和Eclipse一样。
所以,物联网的真正意义在于,它不是停滞不前的,一些酷炫的机会正在呼唤那些能预见其到来,并能在物联网实现下一次巨大飞跃时做好准备的聪明人。