
无论从商业模式衍生的商业模式,还是从技术发展的角度,文中都倾向于将物联网的技术框架视为互联网技术框架的延伸。与这个概念相反的,是传统嵌入式软件开发的视角。
简单来说,目前互联网技术架构的主流是大前端和大后端:大前端包括Web的JavaScript技术、Android和iOS技术,重点解决用户交互;包括后端数据库、服务架构、运维等。侧重于存储、业务逻辑、安全和效率等。当然,前端和后端的技术都在更新,新的解决方案,比如业务逻辑前置、微服务架构、JavaScript全栈,开始模糊前端和后端的区别。
物联网设备的引入确实让这些技术有点难以归类。从业务性质来说,物联网是另一个前端,或者说是前端的延伸。比如自行车共享应用,自行车的应用显然是与人交互的另一个业务场景,也在源源不断地为后端提供数据。然而,与网页或app不同,自行车完全是在解决视觉UI的问题。
而且现在的设备端开发技术和前端技术差别很大。由于物联网云平台在设备端的开发技术还处于底层,一般来说,处理能力、本地存储等计算资源非常有限,但要像后端一样考虑资源效率。
然后,我们要为物联网单独命名一个终端。我们暂且称之为设备终端吧。
2.新后端
2.1 MQTT
新后端的核心问题在于增加了面向设备的访问服务。其实在这里,除了像可视对讲或者安防监控这样的多媒体实时通道,这个接入服务基本上已经变成MQTT了。
在TCP/IP协议之上使用消息队列遥感传输协议,这是一种基于发布/订阅的“轻量级”消息协议。它是当前的ISO标准(ISO/IEC PRF 20922)。它是为轻量级和低带宽远程连接而设计的。发布/订阅消息传递模式需要一个消息代理,它负责根据消息的主题将消息发布到所需的终端。
如果要连接的设备不超过10万台,一台8GB内存的云主机就可以运行Mosquitto如果设备数量是几十万台,考虑Mosquitto进行集群负载均衡;如果设备量是几十万甚至上百万台,那么你需要一个专业的团队或者专门的投入来维护这件事情。这个细节超出了本文的范围。
2.2在线旅行社
需要在线升级固件。MQTT传输大文件不太靠谱,一般需要用Token传输一个URL,设备可以下载。可以使用HTTP或HTTPS。业务比较简单,几十万以内的设备没什么特别的。
2.3数据存储和服务
Mosquitto作为MQTT的引擎,需要后端根据业务逻辑进行调用。这里根据业务需求写后端逻辑。用各种后端语言调用Mosquitto非常简单。
3.设备侧
设备是物联网云平台开发领域最多样化、最具发展性的地方。其他领域,后端还是前端,经过十几年的发展,每个细节的主流技术都出现了,基本上没有碎片化。但是在设备端,开发技术的碎片化是应用开发不到位的充分体现。
比如选择不同的芯片,就必须使用不同的操作系统,不同的C库包,不同的ide。编译器工具链是原芯片厂给的。说到开发,寄存器、内存分配、硬件中断都要深入其中。这是传统嵌入式开发的现状,也是物联网设备开发的现状。
到目前为止,真正的生产环境中使用的语言是C /C,在设备端很少使用Python,但基本没有其他语言。操作系统有50多种,主流的有10多种,其中嵌入式的份额林
考虑中断、寄存器和内存分配等底层工作;
用调试设备编译、编写、观察、调试的开发生命周期;
不同SOC和系统差异太大;
缺乏代码重用和开源的习惯;
开发人员在开发环境和固件编译上花费了太多时间。
所以我们可以看到物联网云平台在设备端的开发是基于芯片选择的。当一个设备端产品面对一个需求时,现有的流程是判断产品的各种技术参数,从而确定一个芯片,然后使用这个芯片的一整套开发技术。这也是由早期嵌入式场景使用的芯片自生成技术的特点决定的:计算资源(CPU频率、存储)、外设接口、运行温度、通信协议等核心参数的差异。导致芯片碎片化,芯片碎片化导致嵌入式开发碎片化。
目前该领域总的趋势是:物联网芯片有望趋同,物联网云平台开发环境和技术有望趋同。
3.1物联网芯片
由于早期的成本限制,物联网领域使用的芯片总是缺乏资源,很难找到一款各方面(计算资源、外设接口、工作温度、通信协议等)都合适的芯片。)来适应常见的场景。随着半导体门槛的逐渐降低,我国半导体制造业逐渐成型,芯片资源开始过剩,其中代表芯片有MTK的MT7697、MT7688和乐心的ESP32。
MT7697的主要参数是:ARMCortex M4 CPU,带浮点单元,最大频率192Mhz,256KB SRAM存储器,可配置存储空间超过4MB,芯片内置WiFi和BLE 4.2,足够的外设接口,能够适应工业级工作温度。
MT7688主要参数为:MIPS 580Mhz CPU,最大内存支持256MB,可配置16GB存储空间,芯片内嵌WiFi,接口除模拟接口外数字接口丰富,价格几十元人民币,高功耗不适合长时间电池使用。
但是非常有利的是,它提供的Linux开发环境能够让开发者有一个在普通x86机器上使用linux CLI的体验。如何使用Node.js,MySQL,OpenCV,Nginx等。在阿里云上,以及物联网的这几十个小模块上。超级稳定,几年不死机很正常。
ESP32的主要参数为:Tensilica LX6 CP,主频240 MHz,520KB SRAM内存,4MB以上可配置存储空间,芯片内置WiFi、蓝牙和ble,外设接口充足,能够适应工业级工作温度。
这些芯片的共同特点是计算资源、通信能力、接口资源相对于传统的MCU有足够的富余,并且保持相同的价格。所以在这样的芯片上有足够的资源进行抽象封装和开发框架实现。我们看到,除了这些芯片的原始制造商提供的传统嵌入式开发套件,社区和其他制造商也加速了新开发技术在这些芯片上的实现。
3.2开发技术
目前物联网云平台的开发技术有两大发展方向,一是统一的物联网操作系统,二是统一的物联网云平台开发框架。他们的共同目标是形成“软件定义的物联网”,这与传统的从芯片选型开始,在原有SDK中落地,完成应用开发的流程完全相反。他们希望从需求和产品设计入手,通过开放统一的软件框架完成开发,然后根据开发中使用的资源来落地芯片和外设。这样做的好处主要是提高开发效率,形成可复用的应用代码。
操作系统
虽然市面上的设备端操作系统有几十个,但是我们可以看到活跃的有三个,明显是在向“软件定义的物联网”方向发展:
泽法
ZER RISCV Linux基金会于2016年2月发布的物联网操作系统。背后的主要支撑力量来自ARM和Linaro。它具有目前嵌入式小型实时操作系统的共同特点,如:最小系统内存占用从轻量级到KB,支持多种芯片架构:从ARM Cortex-M、Intelx86、ARC(DSP内核)、NIOS II(FPGA软核)到
目前,ZER已经升级到V1.7版本,逐渐向可以在生产环境中使用的系统靠拢。ZER最大的特点不在于它的完备性,而在于它的发展理念来自于“软件定义的物联网”,并且有很好的资源支撑,所以未来应该会有自己的一席之地。
RTthread
RTthread是一个纯国产的小操作系统,根植于国内的各种使用场景。10年来确立了自己的地位,在很多行业都有自己的一席之地。目前社区非常活跃,核心团队以创业公司的形式推广,非常敬业。技术特点作为一个成熟的系统,没什么好吐槽的。ZER所有的技术优势都是RTT的,RTT在生产环境上的装机量是相当可观的。
华为LiteOS
华为是全球物联网技术的根厂商之一。LiteOS是华为内部很多产品使用的系统,现在正以开源的形式全面推广。LiteOS最大的优势就是华为的很多根技术都会通过LiteOS输出。目前最大的例子就是即将全面商用的NB-IoT技术,设备端的开发包将由LiteOS输出。
上述系统具有相同的特点,包括小型化、芯片适配范围广、通信协议适配范围广等。它们都是开源系统,它们的R&D或驱动力相对活跃。有可能在物联网领域拥有类似Linux地位的主流操作系统会是其中之一,也有可能一直存在但在技术上越来越相似。
发展体系
首先说明一下开发框架。开发框架可以小到一个详细的工具,也可以大到开发的整个边界。最典型的例子就是安卓。从纯操作系统的意义上来说,Android是Linux的一个分支,但是从App开发的角度来说,除了NDK,没有任何地方可以和Linux打交道,所以Android也叫操作系统。
更广义地看,除了移动应用的开发框架,Android还准备了类似Google play的应用分发渠道,这是开发者的生态建设。同理,我们可以看到Node.js在后端的各种开发模式,也是将所有的后端资源封装到JavaScript中。在开发过程中,NPM可以随时安装各种需要的包,从而解决了代码重用的问题。
所以在我看来,开发框架以及背后的代码复用和开发者生态才是真正的操作系统。
目前在物联网领域,正在尝试向生产环境演进的开发框架基本都是基于JavaScript的,小型实时操作系统使用的JavaScript运行时基本都集中在JerryScript上。JerryScript是三星开发并开源的小型资源密集型引擎。内存需要64KB,存储需要200KB。可以实现完全的事件驱动,符合ECMAScript 5.1。
如前所述,开发框架或操作系统出于代码重用的目的,甚至是应用分发,都需要包含开发者生态,所以我们可以看到,在JerryScript的基础上,有两个团队在做这类工作,值得关注:
上述设备端物联网云平台开发的一些新进展,目前,这些新的设备端开发技术已经逐渐转向交付。有理由相信,经过一段时间的发展,以效率为导向的商业模式驱动的物联网云平台开发技术将迎来一大波更新,从而引领物联网应用的真正发展。审计唐子红









