Skip to main content

Qt提升您的物联网设备

Comments

本文翻译自Boost your IoT Device with Qt 

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

翻译校审:Richard Lin

 

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

nymea1

不仅仅是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可以将所需的组件简化到极小值,从而完全打消人们的疑虑。

nymea3

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可以完美应用于物联网。

guh-logo

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

Comments

Subscribe to our blog

Try Qt 6.11 Now!

Download the latest release here: www.qt.io/download

Qt 6.11 is now available, with new features and improvements for application developers and device creators.

We're Hiring

Check out all our open positions here and follow us on Instagram to see what it's like to be #QtPeople.