摘要:物聯网系统涉及软件、硬件及网络等诸多技术,开发难度大。如何在技术及资金有限的条件下,设计与实现物联网系统,是不少创业公司面临的难题。云计算技术、开源软件及开源硬件将有助于降低物联网系统设计与实现的难度与成本。
关键词:物联网;云计算;开源软件;开源硬件
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)29-0129-03
Abstract: The Internet of things system involves many technologies such as software, hardware and network, so it is difficult to develop. How to design and implement the Internet of Things under the condition of limited technology and capital is a difficult problem faced by many start-ups. Cloud computing technology, open source software and open source hardware will help reduce the difficulty and cost of the design and implementation of the Internet of Things system.
Key words: internet of things; cloud computing; open source software; open source hardware;
物联网是一门新兴的交叉学科,是国家创新驱动发展战略重要的组成部分。物联网系统的设计和实现,牵涉到软件、硬件及网络通信等诸多技术。目前软件工程师往往对硬件不是很了解,硬件工程师往往又对软件不甚精通,同时精通软件、硬件、网络通信等技术的工程师少之又少,从而造成不少创业公司设计和实现物联网系统步履维艰。
云计算技术风起云涌,国外知名的云计算服务平台主要有亚马逊AWS、Google云和微软Azure,国内主要有华为云、百度云、阿里云和腾讯云。云计算服务平台提供服务器、数据库、安全防护、大数据分析、视频直播点播、人工智能等诸多服务,助力中小企业发展。开源软件汇聚了世界各地程序员的心血,其中有少开源软件代码质量相当高;开源硬件则将硬件设计的原理图、电路图、IDE及核心库文件等开源,供人们学习和参考。创业公司可以参考和使用开源软硬件进行设计开发,降低成本。
物联网系统的应用非常广泛,比如对火灾、大气污染等监控。以火灾监控为例,如果仅以现场的温湿度、烟雾数据判断火灾通常不够准确,辅以现场的音视频进行判断,将会提高准确率。火灾发生时,若能够在第一时间采取措施进行灭火,将会减少损失。本文尝试利用云计算、开源软件及开源硬件等技术,以火灾监控为例,设计并实现物联网系统,力求简化技术难度,降低成本。
1 系统架构
本文的物联网系统主要分为三个部分:物联网终端、网络和物联网服务平台。物联网终端主要负责各类数据的采集、将数据传输给物联网服务平台及执行物联网服务平台发出的指令;网络作为物联网终端和物联网服务平台的数据传输通道,将两者连接起来;物联网服务平台主要负责物联网终端设备的接入服务、直播服务、数据分析、报警及发出控制指令等。温湿度、烟雾等传感器的数据和控制指令传输选用MQTT协议,音视频传输采用RTMP协议,系统架构如图1所示。
2 相关技术
2.1物联网终端
物联网终端包含传感器、控制器和执行器。各类传感器负责采集数据,将数据传输给控制器,控制器通过网络将数据传输给物联网服务平台。物联网服务平台对采集的数据进行分析处理,通过网络发出控制指令给物联网终端的控制器,控制器通过执行器完成指令动作。火灾监控中,传感器选用温湿度传感器、烟雾传感器、麦克风和摄像头,执行器选择灭火器。
常用的开源控制器主要有Arduino及树莓派。Arduino平台是非常方便的开源硬件平台,其硬件原理图、电路图、IDE及核心库文件都是开源的[1]。Arduino是一个微型控制器平台,可以用类C的语言进行编程。温湿度、烟雾等传感器通过串口与Arduino相连,Arduino将传感器的数据转发到物联网服务平台,并接收物联网服务平台发出的指令,通过执行器完成指令。音视频直播对硬件要求较高,Arduino无法胜任。
树莓派有一个完整的ARM处理器,性能更强。树莓派是为了帮助年轻人学习编程而设计的只有信用卡大小的电脑。树莓派通常采用一种叫Raspbian的Linux系统。在Raspbian环境下,可以利用Python、C、C++、Java或汇编语言进行编程[2]。在树莓派上安装开源直播软件OBS,可以完成音视频数据的编码并利用RTMP协议推送至腾讯云直播服务接口。
2.2网络
网络是物联网终端和物联网服务平台数据传输的通道,网络类型和通信协议两个方面均需考虑。
1)网络类型
物联网在部署时,为了降低成本,有时会选用电池供电。如果网络的功耗低,电池的寿命会更长,物联网的维护成本会降低。常用的功耗低、覆盖面广的网络主要有LoRa和NB-IOT。LoRa是Semtech公司力推的一种低功耗广域网通信技术,为用户提供一种能够简单实现距离远、功耗低、组网节点多的传感网络。LoRa主要运行在免费频段,用户可以自行组网。NB-IOT主要运行在授权频段,由运营商组网,支持低功耗设备在广域网的蜂窝数据连接,支持待机时间长、对网络连接要求较高设备的高效连接。NB-IoT的覆盖更广,功耗更低,仅为2G的1/10 [3]。
LoRa和NB-IOT网络均能满足Arduino的数据传输要求,但其速率无法胜任音视频数据的实时传输。直播需要采用4G等移动通信网络或者WiFi网络,本文利用普通无线路由器接入以太网或者4G无线路由器接入4G网络为树莓派和Arduino提供WiFi网络。
2)通信协议
物联网通信协议主要有MQTT和CoAP。MQTT是基于TCP/IP协议构建的一种轻量灵活的网络协议,已成为物联网通信标准。MQTT采用的是Pub/Sub方式的协议,解除应用程序耦合,对负载内容屏蔽消息传输,开销小、协议交换最小化,提供客户端异常中断机制,提供三种质量等级的消息发布服务。MQTT适用于设备间消息通信或需要反向控制的场景。
对有些小型设备而言,实现TCP协议要求过高,为了让这些小型设备接入互联网,设计了CoAP协议。CoAP是一种应用层的协议,运行在UDP协议之上,传输的内容小巧精简。CoAP适用于纯数据上报的场景,对资源的要求更低。由于需要实时反向控制,本文选择MQTT作为Arduino与物联网服务平台的通信协议。
RTMP实时信息传输协议是Adobe公司提出的一种基于TCP的应用层协议,主要用来在流媒体及交互服务器之间进行音视频和数据通信。音视频数据采用RTMP协议推流至腾讯云的视频直播服务接口。
2.3物联网服务平台
物联网服务平台是物联网的大脑,分为服务层和应用层。服务层主要负责物联网终端设备的接入,直播服务,存储和分析采集到的数据;在服务层提供的基础功能之上,应用层实现具体的业务。构建物联网服务平台,一般需要购置服务器、存储设备、交换机、防火墙、IPS、WAF等,需要建设服务器机房,这对创业公司是不小的负担。借助于云计算技术,利用云服务平台的服务器及音视频直播服务,不仅可以得到专业的技术支持,也可以降低成本。
本文的物联网终端设备接入选用MQTT协议。MQTT Broker主要有Mosquitto、Apollo、Mosca、emqttd及hbmqtt等。Mosquitto是Eclipse基金会的一款轻量级的开源消息代理软件,采用C语言编写,实现MQTT协议 3.1和3.1.1,由MQTT协议创始人之一的Andy Stanford-Clark开发[4]。Mosquitto用来搭建MQTT Broker,作为订阅者与发布者的消息中介,支持可发布可订阅的消息推送模式。 Mosquitto接受来自客户端的网络连接、发布信息、处理客户端的订阅或取消订阅请求,转发消息给符合条件的订阅客户端,如图2所示。消息在设备间流转不需要流经数据库,所以实时性很强。如果需要保存消息,MQTT客户端则负责将消息写入数据库。
通过简单的配置,音视频数据即可通过RTMP协议推流至腾讯云视频直播服务接口。利用Django2.0、Ajax及MySql5.6,构建物联网管理系统。在物联网管理系统的网页中嵌入腾讯云Web直播播放器代码,就可以在物联网管理系统中观看直播。腾讯云视频直播服务还可以将直播内容录制下来用于点播。在管理系统的网页上可以展示物联网终端采集的温湿度、烟雾等数据,以及现场的音视频直播,并可以向物联网终端发送控制指令。
3 平台实现
物联网服务平台的服务器选用腾讯云服务器,服务器的配置为2核CPU、4G内存、30Mbps带宽、100G硬盘,操作系统选用CentOS 7.4 64位,采用Django 2.0框架结合Ajax构建物联网管理系统,Web服务器选用nginx 1.4,应用服务器选用uwsgi 2.0,数据库选用MySql 5.6 64位,开发语言选用Python 3.6。在服务器上安装Mosquitto 1.5,完成MQTT Broker的构建。
参照Eclipse Paho Python,开发物联网服务平台的MQTT客户端,完成MQTT客户端的消息订阅、发布并将消息存入MySQL数据库。通过Python调用腾讯云短信API,实现物联网服务平台的短信发送功能。
选用带WiFi功能的Arduino 开发板,参照GitHub上的Arduino Client for MQTT,开发Arduino的MQTT客户端, 通过WiFi网络连接物联网服务平台。
在树莓派上接入摄像头和麦克风,并在树莓派上安装OBS,OBS是用于音视频编码并推送直播视频源到服务器的免费开源直播软件[5]。采用RTMP推流至腾讯云直播服务接口,在物联网服务平台的网页中嵌入腾讯Web直播播放器代码,就可以将音视频直播。
在物联网管理系统中查看物联网终端各传感器的数据及音视频直播。当温湿度及烟雾传感器探测到火灾,将会自动发送短信报警,监管人员通过音视频判断无误后,向物联网终端发送灭火指令,执行器自动进行灭火。
4 结束语
本文借助于腾讯云服务器、直播服务及短信服务,Mosquitto、Paho及Django等开源软件,Arduino及树莓派等开源硬件,设计并实现了物联网系统,完成对火灾的监控,降低了物联网开发的技术难度,压缩了成本,有利于创业公司进行物联网技术开发。本文的传感器数据在传输过程中没有加密,将来可以对数据进行加密传输,采用时序数据库来存储传感器数据,并利用人工智能对采集到的数据进行分析,提升物联网应用水平。
参考文献:
[1] 施金磊,高谷刚. 基于LoRa技术的家庭物联网安防系统设计[J]. 电子技术与软件工程,2017,10:218-220.
[2] Wolfram Donat.Python树莓派编程 [M]. 韩德强,译.北京:机械工业出版社,2016.
[3] 安翔. 物联网Python开发实践 [M]. 北京:电子工业出版社,2018.
[4] 黄峰达. 自己动手设计物联网 [M]. 北京:电子工业出版社,2016.
[5] 宋永生. 基于HTML5及云计算的高职院校移动学习平台设计与实现[J]. 电脑知识与技术,2016,12(29):59-61.
【通聯编辑:梁书】