专业 靠谱 的软件外包伙伴

您的位置:首页 > 新闻动态 > 基于Android Things进行物联网IoT软件系统开发定制!

基于Android Things进行物联网IoT软件系统开发定制!

2017-07-18 19:46:04

2012 年 6 月,由 IoT-GSI(Global Standards Initiative on Internet of Things)发布的白皮书“ITU-T Y.4000/Y.2060”[1]中明确定义了物联网的概念。从技术标准化的角度来讲,物联网可以看作是信息社会中,基于现有或将来产生的信息通讯技术,对物体进行互联(物理或虚拟)的全球基础设施。

 

物联网融合了现有和将有的信息通信技术、数据处理技术,这些技术包括但不限于机器到机器的通信、自主网络、数据的挖掘和决策、安全和隐私保护、云计算以及先进的传感和驱动技术。而当前现有的物联网相关技术的研发,要么基于平台,要么基于设备。一般来说,硬件厂商会着力于传感器,还有物联网节点的开发,或是支持一些常见的通信协议;系统及软件开发厂商,会基于操作系统、云端做一些相应的技术开发。

 

而在此之中,Google 对于物联网相关技术的研发包括了云端、数据通信模型建立、数据搜集及处理的相关技术,基本完成了除硬件设计外的各个技术环节。因此,本文将从 Android Things 入手,具体来看如何构建一个完整的智能家居系统。

 

 

 

2

解析 Android Things 技术原理

 

 

 

Android Things 主要运用于物联网及嵌入式设备,可以说是 Android 平台的扩展,它和手机(Android Mobile)、电视(Android TV)、汽车(Android Auto)、穿戴式设备(Android Wear)一起组成了 Android 大家庭。

 

比起其他 Android 系统,它又有一些与众不同的特点,譬如物联网设备会带来一些软件资源的限制。但相对于移动端 Android 开发,Android Things 没有较为复杂的 UI 布局,开发周期能大大缩短。

 

同时,Android Things 为安全连接到云端的设备提供了强大的技术支持,比如我们需要搜集大量的传感器数据到云端,通过 Android Things 可以很方便地进行采集并将其发送至云端。由于 Android Things 可以借助云端处理音视频、图片、传感器数据等信息,我们可以用这个系统来做出库存控制、互动广告、自动售货机、智能电表等产品。

 

另一方面,Android Things 本身就属于 Android 生态系统,所以我们在所熟悉的 Android 开发环境中可以直接进行开发。其完全支持 Android SDK/NDK,以及 Android 中的第三方库,并完美集成了诸如 Google Play Services、Firebase、Google Cloud Platform 等的 Google Services。

 

其中,Firebase 和 Google Cloud Platform(简称 GCP)就是为云端服务而准备的。GCP 拥有如 Identity&Security、Machine Learning 等八大类功能,完全涵盖了数据的存储与分析的所有环节。但这些数据处理是异步的,为了完善同步的数据服务,便有了 Firebase 来做实时的网络数据库。而物联网的数据,很大程度上依赖于云才能将数据的性能发挥至最大化。目前,Android Things 官方相关的 Demo 已经完成了云端的基本连接,但功能才刚刚开始。

 

另外,如果需要对数据的处理做进一步扩展,还有 TensorFlow 做后援。

 

现在,我们拥有了数据相关的平台,完成了数据相关的各种处理,就完全解决了数据的存储及处理问题。接下来,便要解决数据的获取,以及数据传输的问题了。

 

 

 

2.1
数据传输

 

 

 

提到物联网的数据传输协议,我们都数不过来,各大门派,各大路数,全汇集在一起。

 

  • 有线协议:包括各种串行、并行通信协议,以及强大的有线网络;

  • 无线协议:从低频到高频,数不胜数,2G 至 4G 的网络协议、蓝牙、红外、ZigBee 等等,以及现在的业界新宠 NB-IoT 和 LoRa。

 

有这么多的协议传输,就会依赖各自的硬件。各种数据协议组成了战国时代,没有胜负,只有哪些协议适合哪些场景。

 

而现在我们对协议的要求通常是,延时最短(即反应最快)、稳定性好、安全性高,且功耗要特别小。理想状况当然是想要马儿快点跑,又要马儿不吃草。但现实只能努力接近理想,我们总会在协议的各种性能上有失有得。特别是现在 2.4G 频段处于拥堵的状态,所以从低频到高频,增加了许多频段的选择。

 

对于物联网的操作系统来说,一个关键的考量,便是其数据传输方式要灵活、适配性强、便于开发。现在有两条路可走,要么是做个统一的协议,去包揽其他的所有协议;要么是提供一个更通用、更灵活的方法,让用户去适配协议。对于前者,Google 推出了 Weave 协议用以统一蓝牙、ZigBee 等,它独立于物联网操作系统,致力于解决各种数据传输协议的统一性问题(网上有相关文章,读者可自行阅览)。而另一种让用户去适配的办法,就是 Android Things 关于数据传输协议的处理。

 

对于数据传输,USB、蓝牙、Wi-Fi 可以说是最常用的方法,但还有许多模块以及专用的数据传输是不匹配的。对于这一类数据传输,该如何搞定呢?Android Things 提供了一个万能的通道,支持 I2C、SPI 和 UART 的数据传输。可别小瞧这三种数据传输方式,从通用角度来说,这三种串行接口,可以直接外接各种传感设备。同时,又能外接各种数据传输协议的模块,极大地加快了产品原型设计。这三种接口,既可用来捕获数据,又可以用来支持数据传输,可谓一举两得。

 

 

 

3

上手 Android Things

 

 

 

经过上面的分析,我们才发现,Android Things 只是代表物联网中的一个环节,它并不是物联网的全部。Android Things 对于云端和传感器,起着至关重要的连接作用,并且规定了数据的采集及传输的规则。

 

接下来,我们就以在树莓派 3 上运行 Android Things 为例,来具体看看 Android Things 的 ROM 相关信息。

 

从官网上下载下来 Android Things 在树莓派 3 上的镜像之后,我们可以看到,SD 卡被划分多达 16 个分区,这些分区里,有一部分是树莓派的文件信息,有一部分是 Android Things 中的相关分区。

 

我们用 mount 命令查看开发板的分区,发现总共挂载了 5 个分区,其中 gapps、 _type、oem、data 主要是 Android Things 使用 PRIBOOT 用于树莓派 3 启动时的一些运行和配置文件的分区。

 

用 ADB Shell 命令进入终端之后,我们可以看到,整个根文件系统与 Android 的根文件系统没有太大的区别。如果想知道系统运行时,启用了哪些服务,一般先会去看/etc 文件夹下的内容。通过了解/etc 下面的文件,我们可以看到,Android Things 对于音视频、蓝牙、Wi-Fi、蜂窝网络等都有支持。另外一部分,便是安全以及升级的管理了,包括事件日志、崩溃日志等。值得一提的是,与音频相关的配置文件/etc/audio_policy.conf 是支持 USB 声卡的输入输出的。关于 ROM 的文件构成,可以用此方法查看,如果熟悉 Android 的 ROM,会更省事地把 Android Things 的功能厘清。

 

Android Things 是完全支持 Android 调试工具的,而 Android Studio 也是开发 Android Things 应用很好的工具。需要注意的一点是,Android Things 只支持单应用,所以在调试时,要保证系统中只有一个应用在运行。这时可以用 ADB Uninstall 命令卸载掉原来留存的安装包,然后再加载新的应用。

 

 

 

4

搭建物联网解决方案

 

 

 

当我们了解了 Android Things 本身,以及与之相关的技术后,搭建一个物联网系统的技术路线,也变得十分明确了。这回我们挑一个复杂的系统去构建,比如提出这样一个需求——上班一族的智能家居。 基本的功能如下:

 

  • 门口有一个摄像头,用于捕捉是否有可疑人出入,进行动态识别;

  • 出门后,自动关闭微波炉等家用电器的电源;

  • 如果室温低于 5℃,远程设定打开热风;温度高于 26℃,远程设定打开冷风;

  • 如果室内有烟雾,发出报警;

  • 晚上睡觉时,关闭所有的灯光,夜间起身上卫生间时,点亮卫生间的灯。

 

首先,根据产品需求进行分析,需要的硬件如下:

 

  • 摄像头,用于图像捕捉及图像识别;

  • 红外感应器,检测房间是否有人,如果人离开,检测大门是否关好;

  • 温度感应器,需要 2-3 个,放在不同位置,从而综合出室内的温度;

  • 智能空调,可以远程设置冷风、热风及开机时间;

  • 烟雾探测器;

  • 触摸板,一个用于卫生间的灯,一个用于关闭所有灯;

  • 智能锁,检测大门是否关闭;

  • 树莓派 3,用作控制中心,与云端连接,保存一些数据,以及日常生活行为的优化。

 

软件需求:

 

  • Google Cloud,云端的数据存储及优化;

  • Firebase,实时数据的保存;

  • Android Things 及其应用,物联网系统的组建,以及各模块的自组网;

  • 手机客户端,完成一些状态及控制操作。

 

网络形态组成,对于树莓派 3 到云端的数据传输,可以用家用网络直接传输数据。但对于各个节点,一般来说,用 ZigBee、蓝牙 Mesh 或 Wi-Fi 模块。其中控制中心完成数据的搜集及转发工作,根据物联网网络的不同,所选的硬件,很好带网络模块,有自组网设备。系统的整体框架如图 1 所示。

 

图 1 系统框架

 

智能家居中,家用网关连接 Google Cloud,同时 Android Things 成为智能家居的控制中心,并通过室内局域网连接所有的智能电器。在室内的局域网中,两个触摸板可以用来控制智能灯泡。其它的电器传送状态至服务器,然后服务器下发控制命令给电器,手机客户端可以查看室内的各个电器的状态。

 

 

 

5

关键技术及解决

 

 

 

  • 网络组建:树莓派有线网和 Wi-Fi 接口,其中有线接口连接外部网络,Wi-Fi 完成室内网络组建。如果不考虑功耗,在当前的室内网络布局下,Wi-Fi 的连接还是最简单的。那么 Android Things 上的应用,在网络管理这一个模块,应具有自组网、网络状态查询与管理、不同节点之间的数据包的发送与接收,以及简单的数据处理功能。

 

  • 人像识别:主要识别门外是否有陌生人出没,可以由摄像头每隔一段时间拍摄照片,然后利用 TensorFlow 识别人像,把照片保存并记录在云端。利用 Google Cloud 的云端存储技术,通过人像记录时间、次数等信息,判断这个人是否可疑并记录。

 

  • 人是否在房检测:利用红外感应,检测房间是否有人,如果不在房间,且摄像头检测人确实离开,则检测门是否完全关闭。如果没有关闭,控制智能锁自动关门。用红外传感器,去检测人是否在家。一般来说,有人是短时间出门,不需要关一些电器,所以关电器的时间很重要。一般来说,个人居家,会有定时的出门习惯,所以 Android Things 对于这一部分代码的处理,可以利用机器学习,从而分析出适合个体的开关门时间,再结合传感器数据做处理。

 

  • 人离开房间,关闭电器,利用智能插座关闭电器。

 

  • 空调自动打开,场景用于人回家前 30 分钟。如果有打开空调的命令,则检测房间的温度是否需要开空调,如果需要,下发命令到智能空调。

 

  • 烟雾报警,一旦检测到烟雾,便把状态记录到 Firebase 数据库中,然后手机获得报警的通知。

 

  • 晚间灯光,这里有两个功能,一是床头触摸,关闭所有灯光的触摸板,可装在床头稍远的位置。另一功能是打开卫生间灯光的触摸板,可以放在床头。当人起身或夜间上卫生间时,触碰相应的触摸板,即可以完成灯光关闭。由于数据是实时的,也需要用 Firebase 的实时数据存储功能。

 

那么,我们把这些功能需求转化为技术点之后,怎么在 Android Things 中实现呢?

 

返回首页] [打印] [返回上页]   下一篇