Qt提升您的物联网设备

作者:Richard Lin | Jul 31, 2018 11:18:02 AM

本文翻译自Boost your IoT Device with Qt 

原文作者:Michael Zanettiguh GmbH的高级软件工程师

翻译校审:Richard Lin

 

我们来自guh GmbH,是nymea物联网平台的开发者,从一开始我们就在使用Qt。您可能会想:这些设备没有UI,只是中间设备,用户也不会注意,在这些设备上使用Qt好像是一个奇怪的主意。下面请允许我解释一下为什么这一点也不奇怪。从本质上来看,之前的思路有三个误区。

不仅仅是UI框架

第一个,也是最大的误区:Qt只能用于UI项目的开发。很多年前,Qt的确凭借UI开发工具起家。但是打那以后,Qt已经进化为一套全功能的库和工具链,它能辅助开发者实现各种层面的功能。您甚至再也不需要使用其他库或工具包,Qt可以极大程度提高您的开发效率。稍后我会深入介绍这一点。

UI也有许多形式

接下来,请允许我阐明上述思想的第二个误区:没有显示设备,就意味着没有UI。即使您所开发的嵌入式设备没有显示器,也不能说它没有用户界面。在我们的例子中,用户界面由运行在物联网设备中的web接口以及客户端app组成。客户端app,可以运行在手机、PC甚至是嵌入墙体的显示器中,通常是一个瘦客户端与设备进行通信。这儿,可以使用Qt Quick技术开发出流畅的,能提供现代交互体验的app,还能获得“一次编码,到处运行”的便捷。最厉害的是:从Qt5.10开始,可以借助Qt WebGL特性,使得物联网设备中的Qt客户端app可以当作web接口,在网页中显示。

没有额外开销: 只发布您需要的

我常听到这样的评价:在嵌入式设备中引入Qt会产生较大的开销。的确,早期Qt曾经包含少量非常庞大的模块,但这一点早就得到了改进。在较新的Qt 5版本里,Qt高度模块化,针对低端硬件还实现了只安装必要的Qt组件的微调功能。而且,最近这个功能得到了强化,现在针对嵌入式开发,Qt可以将所需的组件简化到极小值,从而完全打消人们的疑虑。

Qt如何帮助我们提高开发nymea的效率

如前文提到的,接下来我会介绍一些Qt特性,以及它们如何帮助我们大大提升了开发nymea的效率。

这些特性非常多,在这里很难完整列出,但是对我们中间件技术栈而言,最重要的有:

  • 插件机制:Qt的插件机制完美适配动态插件加载,省去各种其他复杂的查找或加载插件的库。nymea的开发基于插件机制,这赋予它明显的优势。该平台的核心是一套软件系统,管理各种配置和“智能”设备。所有实际硬件和在线服务,都是“智能”设备,使用插件机制接入系统。
  • 传输协议:只需要调用几个Qt APInymea的中间件使用socketsTCP/IPlocal sockets)、WebSocketsREST和蓝牙RFCOMM作为设备接口。所有这些Qt都能信手拈来,包括使用SSL加密,提供证书并使用安全通信。
  • 基于JSONRPC APIQt支持JSON,可以轻松把内部数据结构转换为JSON对象。这对于我们是非常大的提升,因为nymea可以使用基于JSONRPC API协议与客户端通信。
  • 测试和调试框架:开发者非常方便地使用这些高度抽象的APInymea的代码仓库嵌入了使用Qt Test的自动化测试功能。这使得编写用例测试代码变得非常便捷,实现了测试报告的打印和各种形式的数据统计(如UnitXML)。另外,还可以与其他现有的测试和调试框架一起配合,如covertyValgrind或其他现有工具,说到底,过去C++时代的好东西。
  • 使用QDoc生成API文档:Qt本身在doc.qt.io上提供一套出色的文档。QDoc工具可以在CI阶段直接从代码中生成文档,允许使用灵活的自定义格式的同时,还能保持Qt文档整洁的观感。而对于像nymea (https://doc.nymea.io/) 这样的,向第三方开发者开放的平台,第三方开发者要基于此开发自己的硬件或服务,显然整洁完善的文档是必须的。
  • 各种小的提升:Qt提供各种数量繁多的便捷实用的特性,帮助开发无屏的应用。从命令行参数解析到log输出和过滤和在线通信log输出,以及各种进程间通信机制(例如D-Bus)等。使最小的劲,就可以使用各种特性功能。
  • 完整(几乎完美)的跨平台特性。尽管nymea主要运行于Linux设备上,但凭借了Qt,它可以编译到任何平台上去。当然,有些平台的特性无法运行,如D-Bus,但是这是少数的例外。当前,nymea有基于dpkg的仓库,支持所有Ubuntu和Debian发行版,同时支持snap包用于基于snap的系统。客户端app是针对桌面和Android而开发的。我们的团队同时还致力于开发iOS和WebGL的版本,让nymea用上完整的基于Qt Quick的web接口,而这些都是来自于同一个代码工程。

总结:Qt是一个理想的开发框架,不论您的项目有或者没有UI。其为数众多、经过完整测试的高质量API非常简单易懂,让每个开发者能更轻松使用。同时Qt还让您能充分发挥C++的优势。如您所见,Qt可以完美应用于物联网。

关于nymea : nymea让你的产品变得智能 。快速、可定制以及直观易上手。我们的设备间通信技术栈使您通过简单的API实现系统集成。我们打造强大的边缘设备的集成解决方案。