一文理清散乱的物联网里开发者必须关注的技术

标签: dev | 发表时间:2017-06-15 08:00 | 作者:
出处:http://itindex.net/admin/pagedetail

作者 | 罗未

编辑 | 贾维娣

微信公众号ID | csdn_iot


不管是从商业模式导出的业务模型,还是从技术发展的角度看,文本都倾向于将物联网技术构架看作是互联网技术构架的延展。而与这个观念对立的,是传统嵌入式软件开发的视角。


1

在互联网技术基础上长出来的物联网构架


简单来说,目前的互联网技术构架主流是大前端与后端两个世界:大前端包括Web的JavaScript技术、Android和iOS技术,着眼于解决用户交互;后端包括数据库、服务构架、运维等,着眼于解决存储、业务逻辑、安全与效率等。当然,现在前后端技术争相更新,比如业务逻辑前置化、微服务构架、JavaScript全栈化等新的解决方案也开始模糊前后端的差异。


而物联网设备端的引入,着实让这些技术有点难以归类,从业务性质上物联网是另外一种前端或是前端的延伸,比如共享单车应用中,自行车端的应用显然是跟人交互的另一个业务场景,也在为后端源源不断地提供着数据,但是自行车又不像网页或者App完全是在解决可视化UI的事情。


而且,现在的设备端开发技术跟前端技术太不像了,由于目前设备端的开发技术都还偏底层,一般来说计算资源如处理能力、本地存储都非常有限,反而像后端一样要考虑资源效率。


那么,我们只好为物联网单独命名一个端,不如我们暂时就叫它设备端。

图1 整体架构图


2

新后端2.1MQTT


新后端核心问题在于加入了面向设备的接入服务,实际上在这里,除类似视频对讲或是安防监控的多媒体实时通道外,这个接入服务已经基本事实化为MQTT。


消息队列遥感传输协议是在TCP/IP协议之上使用的,基于发布/订阅的“轻量级”消息协议,目前为ISO标准(ISO/IEC PRF 20922)。它被设计用于轻量级和低带宽的远程连接,发布/订阅消息传递模式需要消息代理,消息代理负责根据消息的主题向需要的端发布消息。


如果需要连接的设备没有超过10万台,使用8GB内存的云主机跑Mosquitto就可以;如果设备量是几十万台,可以考虑Mosquitto做集群负载均衡;如果设备量是大几十万台乃至百万台以上,那你需要专业的团队或专门的投入来维护这件事情,这个细节就不在本文讨论范围了。


2.2OTA


固件组件在线升级是必须要做的事情,MQTT传大文件不靠谱,所以一般传过去一个带Token的URL,设备端去下载就好,HTTP或者HTTPS都可以。业务比较简单,设备端几十万以内没有什么特别的地方。


2.3数据存储与服务


Mosquitto作为MQTT的引擎,需要后端按照业务逻辑去调用,这里按照业务需求写好后端逻辑即可。在各种后端语言中调用Mosquitto都非常简单。


3

设备端


设备端是物联网领域最五花八门并且正在发展中的地方。其他领域,后端或者前端,经过十几年的发展,已经出现每个细节的主流技术,基本没有碎片化的情况,但是在设备端,开发技术的碎片化是应用发展还不到位的充分表现。


举例讲,选用不同的芯片,就要用不同的操作系统,不同的C库封装,各家IDE也不尽相同,编译工具链更是从芯片原厂给出。开发起来呢,寄存器、内存分配、硬件中断都要深入进去。这就是传统嵌入式开发的现状,也是物联网设备端开发的现状。


到目前为止,真正生产环境中用到的语言就是C/C++,极个别会在设备端用到Python,基本没有其他语言。操作系统超过50种,主流的也有10种以上,其中嵌入式Linux份额并不大,各种实时操作系统各具特色,各有一片天地。


简单总结一下相对于物联网开发,传统嵌入式开发的方式主要有以下几个问题:


  1. 需要考虑中断、寄存器、内存分配等过于底层的工作;

  2. 编译、烧写、观察、借助调试设备进行调试的开发生命周期;

  3. 不同SoC和系统的差异过大;

  4. 缺乏代码复用与开源的习惯;

  5. 开发者在开发环境和固件编译上花费的时间过多。


所以我们看到设备端的开发是基于芯片选型完成的。当设备端产品面临一个需求时,现有的流程是判断产品的各项技术参数,从而确定一个芯片,进而使用这个芯片的一整套开发技术。这也是早期嵌入式场景使用的芯片自生技术特性所决定:计算资源(CPU主频、存储)、外围接口、使用温度、通讯协议等核心参数的不同导致芯片碎片化,芯片碎片化导致嵌入式开发碎片化。


目前这个领域的大趋势是:物联网芯片有望走向趋同,物联网开发环境与技术有望趋同。


3.1物联网芯片


早期由于成本所限,物联网领域使用的芯片总是表现得非常缺资源,很难找到一个各方面(计算资源、外围接口、使用温度、通讯协议等)都比较合适的芯片去适应普遍的场景。随着半导体门槛逐步降低,中国半导体制造业逐步成型,芯片资源开始走向富余,其中的代表芯片是MTK的MT7697、MT7688和乐鑫的ESP32。


MT7697主要参数为:ARM Cortex 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中完成应用开发,与需求和产品设计汇合的流程完全相反,希望从需求和产品设计入手,通过公开统一的软件构架完成开发,再根据开发使用到的资源去落地芯片和外围设备。这样做的好处主要在于提高开发效率和形成可以复用的应用代码。


操作系统


虽然市场上存在的设备端操作系统有数十种之多,但是我们看到活跃的,明显向“软件定义物联网”方向发展的有三家:


  • Zephyr


Zephyr是Linux基金会于2016年2月发布的物联网操作系统,背后主要的支持力量来自于ARM和Linaro,具有目前嵌入式小型实时操作系统的普遍特征,比如:轻量到KB级的最小系统内存占用,支持多种芯片构架:从ARM Cortex-M、Intel x86、ARC(DSP 内核)、NIOS II(FPGA 软核)到开源的RISC V等,跟Linux一样的模块化内核组织方式,如图2所示。


图2 Zephyr物联网操作系统


Zephyr目前已经升级到V1.7版本,逐步向一个可以用到生产环境的系统靠拢了。Zephyr最大的特色并不在于其完备性而在于其开发理念完全来自于“软件定义物联网”,并且有很好的资源支持,在未来应该会有自己的位置。


  • RTthread


RTthread是纯国产的小型操作系统,植根于中国的各种使用场景,10年来已经确立了自己的地位,在很多行业有自己的一席之地,目前社区非常活跃,核心团队以创业公司的形式推进,非常专注。技术上的特征作为一个成熟的系统,没有什么可以吐槽的地方。Zephyr有的技术优势RTT都有,而且RTT在生产环境的装机量较为可观。


  • 华为LiteOS


华为是全球范围内物联网技术的根源厂商之一,LiteOS是一个华为内部很多产品都在用的系统,目前也以开源的形式在全力推广。LiteOS最大的优势在于华为很多根源技术将利用LiteOS进行输出,目前最大的例子就是即将全面商用的NB-IoT技术,设备端的开发包将会用LiteOS输出。


以上几个系统一致的特点包括小型化、芯片适应范围广、通信协议适配比较广泛等,他们也都是开源的系统,研发或推动力量比较活跃。有可能在物联网领域里的类似Linux地位的主流操作系统会是其中某个,也或许会一直都存在下去但是在技术上越来越趋同。


开发框架


首先解释一下开发框架,开发框架可以小到是一个细节的工具,也可以大到规定开发的全部边界。最典型的例子是Android,纯粹操作系统意义上,Android是Linux的一个分支,但是从App开发角度,除NDK之外,没有任何与Linux打交道的地方,所以也把Android叫做操作系统。


再广泛地看,Android除了面向手机应用的开发框架,还准备了Google play这样的应用分发渠道,这是开发者生态建设。同理,我们看Node.js在后端的种种开发模式,也是将所有后端资源都封装到JavaScript里,开发时可以随时npm install各种包来require,解决了代码复用问题。


因此我的观点是,开发框架以及背后的代码复用和开发者生态才是真正的操作系统。


目前在物联网领域,正在尝试向生产环境演进的开发框架基本都基于JavaScript,而在小型实时操作系统上使用的JavaScript runtime目前也基本集中到了JerryScript上。JerryScript是三星开发和开源的一个小资源占用的引擎,内存需要64KB,存储需要200KB即可,能够实现完整的事件驱动,符合ECMAScript 5.1。


如同前文所说,开发框架或是操作系统在当下需要包括以代码复用为目的的开发者生态,甚至需要包括应用分发,所以我们看到在JerryScript的基础上,有两家做这类工作的团队值得关注:


  • WRTnode


WRTnode是一个北京的开源硬件团队,提供从开发到硬件交付的全流程服务。他们最近开放的node.system和noyun.io即是着眼于实现物联网JavaScript的开发框架和开发者生态。在WRTnode的实现里,设备端的JavaScript开发已经变得像cloud9.io一样全案在线开发,为开发者屏蔽了嵌入式开发的繁琐编译烧写工作。


  • Ruff


Ruff是位于上海的创业公司,2015年开始一直在演进基于物联网设备端JavaScript的开发者生态,提供了较为可行的代码复用框架。目前他们已经开始服务商业客户,为物联网应用的快速实现提供了可能。


同时,Zephyr和华为LiteOS也都有各自的JavaScript runtime发布计划。


以上我们看到了设备端开发的一些新的发展,目前这些新的设备端开发技术,已经逐步面向交付转移了。有理由相信经过一段时间的发展,面向效率的商业模式驱动下的物联网开发技术将迎来一大波更新,从而导向物联网应用的真正大发展。

罗未,WRTnode 创始人,致力于物联网新硬件的技术孵化和输出,为全球的各类物联网和新硬件创业者提供研发、工程、供应等服务,是多家创新公司背后的支持者,也是开源硬件运动中的重要人物。


2017年7月1日(星期六),「 一天掌握物联网全栈开发之道」物联网主题线上峰会将在 CSDN 学院召开,罗未将与其他六位专家将一起从整体架构、技术栈、应用开发平台到实战经验与安全方案,希望通过一天的时间,帮助开发者快速掌握物联网全栈开发之道,目前峰会正在7折优惠中, 点击「阅读原文」立即报名

相关 [物联网 开发 技术] 推荐:

一文理清散乱的物联网里开发者必须关注的技术

- - IT瘾-dev
微信公众号ID | csdn_iot. 不管是从商业模式导出的业务模型,还是从技术发展的角度看,文本都倾向于将物联网技术构架看作是互联网技术构架的延展. 而与这个观念对立的,是传统嵌入式软件开发的视角. 在互联网技术基础上长出来的物联网构架. 简单来说,目前的互联网技术构架主流是大前端与后端两个世界:大前端包括Web的JavaScript技术、Android和iOS技术,着眼于解决用户交互;后端包括数据库、服务构架、运维等,着眼于解决存储、业务逻辑、安全与效率等.

物联网开发最佳实践

- - ITeye资讯频道
假设您已经决定开发一个 IoT 产品. 首先,您可以了解许多从移动开发演变而来的实践. 具体地讲,考虑以下这些实践:. 迭代式地设计解决方案的原型. 化身 (avatar)、服务和解耦的 API. 如果您创建过任何类型的 Web 应用程序,那么您可能已经熟悉服务的概念. 服务是应用程序提供的能力,是一个系统的传统视图,比如天气数据服务.

物联网核心协议,消息推送技术演进

- - 博客 - 伯乐在线
消息触达能力是物联网(internet ofthings, IOT)的重要支撑,而物联网很多技术都源于移动互联网. 本文阐述移动互联网消息推送技术在物联网中的应用和演进. 从开发的角度,无线接入是物联网设备端的核心技术,身份设备管理和消息推送技术是物联网云端的核心技术. 而从场景体验的角度,除了前者,还要包括手机的前端开发技术.

2 年内必火的 10 项顶级物联网技术

- - TECH2IPO
高德纳(Gartner)公司预测,2025 年,低耗能、短距离网络将成为物联网无线连接的主流,使用数量将远超广域物联网网络. 采用这项技术,且希望发挥这项技术最大优势的企业,需增加培训方面的资金投入. 高德纳研究指出的物联网科技前 10 强,快速了解用户最关心的 10 大物联网技术. 物联网(IoT)技术将拓展现有的商业模式,由于企业不断挑战数据、分析以及智力情报方面的极限,新型产业模式将如雨后春笋涌现出来.

IBM 发布开源物联网应用开发工具 Quarks

- - 开源中国社区最新新闻
IBM最近为人们带来了一个名为“Quarks”的全新开源开发者工具,这套工具将帮助制造商与程序员开发出高效的基于物联网感应数据的应用. Quarks实际上是基于IBM Streams的一款产品,它可以传输大量的实时数据,同时又是为程序员与制造商设计的开发联网设备所用的应用的开源工具. 这可以帮助程序员与制造商们以简单高效的手段利用好设备带来的实时数据.

Android Things 物联网应用开发初体验

- - DiyCode - 致力于构建开发工程师高端交流分享社区社区
创客日记 同时首发,关注作者的. DiyCode帐号 或者 微信公众号「造物邦」可第一时间收到新文章推送. 现在大家都变得好奇怪,有了“技术红利期”的概念,一旦有哪个大佬推出什么新技术,第一时间跟上,越往后就越没有你什么事了. “小程序”一开始之所以能那么火,我想应该跟很多人不想错过可能的“红利期”是有关系的,像我这个小白不也跨界凑热闹注册了个小程序的号.

使用JavaScript和MQTT开发物联网应用

- - CSDN博客移动开发推荐文章
如果说Java和C#哪个是最好的开发语言,无疑会挑起程序员之间的相互怒怼,那如果说JavaScript是动态性最好的语言,相信大家都不会有太大的争议. 随着越来越多的硬件平台和开发板开始支持JavaScript,JavaScript在硬件端以及物联网领域有了新的机会. 图1是一个智能家居物联平台的数据链路.

Spark 团队推出19美元的物联网开发套件Spark Photon

- - TechCrunch 中国
原先的物联网开发套件 Spark Core 在 Kickstarter上红极一时,但它有一个致命的缺点:你必须是一名彻头彻尾的电子极客才能弄明白怎么玩这东西. 不过现在,有了 Spark Photon,门槛就没那么苛刻了. Photon 和 原先的Core 十分类似,只不过速度稍微更快一些,而且更加紧凑.

迭代式开发技术

- - CSDN博客研发管理推荐文章
    迭代是一开发种技术,用来把系统功能传递到一系列的增量的完整版本,每个版本一个特定固定的时间段被开发,该时间段称之为迭代. 图中颜色代表每次开发每项活动所占的比重不同. 1、在进行大规模的投资前,就解决了关键的风险问题. 2、使的早期用户反馈在初始迭代中就能出现. 4、各个目标里程碑提供了短期的焦点.

基于物联网技术和RFID电子客票的铁路自动检票机

- - CSDN博客推荐文章
RFID电子客票具有检阅速度快、信息量大、安全性高和快速物理定位的独特优势,随着标准的统一和成本的降低,它在铁路上有着巨大的应用前景,同时鉴于车站对物联网化的需求,我们设想出新一代的检票机,它有着比已有检票机更广泛、更安全的信息采集和处理,帮助检票厅实现物联网化. 1) 多个检票口只需一台检票机:.