物联网概念下的程序设计
各种生活中看似寻常的对象,正被尝试赋予连网的能力,而能和外在环境互动,提供许多有趣的应用可能性,然而,要建构出各种应用、落实在生活中,还是得倚靠软件。
物联网(Internet of Things)」是最近另一火红的名词。在市场上,有愈来愈多的装置、设备,打着物联网的名号,纷纷快速推出。什么是物联网呢?简单来说,传统的互联网,连上网的都是计算机,不论是大型还是小型,通通都是计算机,所以基本上是个计算机网络。
随着技术进步,大家都知道连移动电话也都具备上网能力了,这是因为现在的智能电话,里子其实也都是计算机,这都是拜计算机技术进步之赐。之后,连电视也上网,所以我们有了智能电视这个名词,而本质上,智能电视也是计算机。
透过各种装置连网的机会,已经大幅提升
即使这些外观上不是计算机的连网装置本质上都是计算机,也因此得到了连网的能力,但是在普遍的认知上,他们还是我们所熟悉的生活中的常见对象。透过一些对象渐渐获得了连网能力后,只有计算机才能连网的概念及界线逐渐变得模糊。
而接下来,几乎可以预测的是,会有更多更多在我们生活中的对象或装置,都会被赋予连网的能力,而且透过连网的能力,可以因此创造出更多有潜力的生活应用。
举例来说,在医院中做一些基本的健康检查,会需要量测身高、体重、血压、……等等数据。传统的方式,由护理人员量测后,记录于纸本之上。但是试着想象一下,当这些量测仪器都具备连网、连网传送数据的能力之后,当受检者完成检验的同时,这些数据已经自动传送至中央数据库中,并且和受检者的身份关联在一起。少去了人工操作,不但整个程序更快速、也不容易出错。
各种在我们生活中现在看似寻常的对象,像是电灯、电器开关,在获得了连网能力,并且足以和外在环境互动时,的确极有可能提供许多有趣的应用可能性。也因此,在「物联网」口号喊的震天价响的同时,也正有各种不同型态的对象,正被尝试赋予连网的能力,同时构思进阶的应用。
物联网的大方向看起来是确切了,在过去的几年里,连网手持装置数量的大幅提升,让在消费市场中为主的个人计算机,在消费者生活中逐渐的不再居于中心的位置。许多人除非工作,否则已经不太使用个人计算机,因为,他们的需求,绝大多数都可以被平板计算机或是手机所满足。这是使得平板计算机及手机销售数量持续提升的原因。
在过去,个人计算机是我们接触信息、操作所有设备的中心点,渐渐的,这个角色已经被手持连网装置所取代。
例如,假设你家里有 Apple TV,过去你的音乐档案可能储存在计算机里,然后想要播放时,再从计算机连至 Applet TV 播放出去。但现在,很有可能你常听的音乐都在手机上了,你会想直接从手机送至 Apple TV 播放,而不会再想打开计算机。
除了手持装置的数量大幅提升、而且愈来愈重要之外,另一个可以看到的变化是,连网装置的数量也会开始持续增加。伴随着个人计算机数量成长的消退,手持装置会成为用户要操作这些连网装置时的主要接口之一。
物联网对于软件应用架构的冲击
物联网的重心仅在硬件装置吗?其实,在物联网的应用里软件也很重要。虽然,物联网实体上必须倚靠诸般硬件装置部署到使用端去,但要建构出各种应用、落实在生活中,还是得倚靠软件。而在物联网的应用架构下,对于软件开发的生态,又会有什么样的改变呢?我想这是身为程序设计者会关心的议题。
首先,在连网的对象端,我想,初期许多小型的对象都不会拥有实际连上 Internet 的能力,而是透过另一个网关(gateway)装置来连网,这些小型对象并不直接连上 Internet,因为要连上Internet 所需的计算资源太过沉重了,所以真正连接 Internet 的能力,会被放在网关装置里,而诸般小型物件,则以一个更轻量级的通讯协议(例如,在蓝牙之上,再建构的应用层级协议),来和网关装置相互连接,并且透过网关装置对外连网。
在这种架构之下,一个网关装置可以对应多个小型对象,除了具备管理这些对象的能力之外,同时也提供了这些小型对象对外连网通讯的能力。
这个网关装置会是个运行典型操作系统的装置,我想实务上这几年可以看到的,会是以嵌入式 Linux 为主。接下来的短期内,网关装置应该还是会有重要的角色,因此,在建构一个物联网的应用里,在网关装置上开发软件,会是一个必要的工作。而这一块,就会和传统上开发嵌入式 Linux 软件差不多。
除了网关装置之外,一些比较「重量级」的装置、也就是具备较高阶计算资源装置,就不需要网关装置的辅助,自身即具有连网及计算的能力,像是机顶盒、智能电视、……等等,其操作系统除了 Linux 之外,也有可能是 Android 。
装置与云端上的软件应用,影响力大增
在物联网的软件组成里,还有一个重心是在手持装置端。
物联网中的对象,大多可能都不具备显示的接口,甚至也没太多输入的控制途径。那么,要怎么和它们互动,像是取得信息、以及做控制呢?手持装置会是最重要的途径,因为,手机或平板会成为使用者面对物联网中装置的最主要终端,个人计算机反倒不是。
因此,当我们在建构一个物联网的应用时,终端的界面应该都会先以手持装置上的 App 为主,个人计算机上的软件反而可有可无,即使是有,优先级可能也会比较低。
实际上,手持装置上的 App 凌驾于个人计算机应用软件的这个趋势,会是一个很重要的变化。之后和使用者互动的终端,势必以手持装置上的 App 为主流了。
在个人计算机上,不论是传统操作系统上的原生应用软件,或是网页型态的服务,都会因为个人计算机角色的弱化,而将部份重要性移转至手持装置上的 App。
除了手持装置 App 的重要性会再持续提升之外,云端上软件的重要性,在物联网的体系下,也只会显得更关键。
原因就在于,物联网中的对象,除了让用户透过手持装置和其互动之外,更多的时候,这些对象之所以要连网的原因,不单只是为了让用户透过手持装置与其联系,而且更重要的是,它们得以和云端上的服务交互运用。像是将它们所收集到的信息,上传到云端的「数据库」里,或者是从云端的服务取得它们被设置的组态,因而得以依据这些组态,控制它们自身的行为反应,以符合组态设定。
另一方面,即使物联网中的装置拥有连网的能力,但不意谓着他们必然拥有高阶的计算能力──在整个架构里,真正有计算能力的,是在云端服务这一层。
举例来说,若是有一套连网的人脸辨识门禁管理记录系统,在拍摄装置欲进入者的脸部图像后,拍摄装置可能即将图传传送至云端,由云端上的辨识系统从云端上允许进入的人脸数据库中进行比对,并且计算是否相符,最后,响应门禁装置是否授权进入。
从上述的例子就可以说明,云端的服务在对象网的架构中有多重要,因为,云端才是拥有大多数计算资源、提供大多数计算服务的所在。而手持装置也会透过云端的服务,得以和对象相连接,以进行状态取得及相关的控制。因此,整个云端,才是物联网的中心。
整体而言,物联网应用下的程序开发,手持装置的应用程序,以及云端服务的开发会扮演关键的角色。对于程序开发人员,若有志于此,更可把方向往此设定。