阅读 451

如何基于TencentOS tiny,快速打造属于自己的IoT小应用?

  • 导语 | 近日,云+社区技术沙龙“腾讯开源技术”圆满落幕。本次沙龙邀请了多位腾讯技术专家,围绕腾讯开源与众多开发者进行探讨,深度揭秘了腾讯开源项目TencentOS tiny、TubeMQ、Kona JDK、TARS以及MedicalNet。本文是叶丰老师的演讲整理,编辑:涛涛。
本文要点:
  • TencentOS tiny开源项目简介
  • TencentOS tiny loT解决方案
  • TencentOS tiny开发实践
近期会有物联网相关活动上线,大量开发板免费领!扫码关注「云加社区」,及时获知最新动态。


一、TencentOS tiny开源项目简介

什么是TencentOS tiny呢?TencentOS tiny是腾讯开源的面向物联网领域的精简实时操作系统。可能在大家的传统印象中,腾讯都是做社交和游戏,解决的是人与人之间的连接,其实腾讯在物联网领域也有完整的布局。
从下图中可以看出,在腾讯物联网全栈产品矩阵中,TencentOS tiny位于整个产品矩阵底层最关键的一环,起着为云侧海量数据平台引流的作用。我们也希望TencentOS tiny能够降低设备端开发门槛,提升开发效率,帮助物联网的终端设备和业务能够快速地接入到腾讯云。
如下图所示,从TencentOS tiny的产品架构来看,目前TencentOS tiny已经适配了主流的芯片和模组,提供了一个最精简的RTOS内核、包括任务管理、内存管理、IPC通信、异常处理等。基于RTOS,它还提供了非常丰富的物联网组件,包括低功耗框架、OTA升级、KV存储、调试工具链等等。
在网络连接方面也集成了一些主流的物联网协议,包括:MQTT、CoAP、LoRaWAN等。同时我们提供了非常丰富的应用案例,用户可以基于这些案例做扩展,快速实现物联网应用。
总体来说,TencentOS tiny有下面几个优势:小体积,低功耗,丰富的IoT组件,可靠的安全框架,良好的移植性和便捷的调试手段,可以满足物联网终端侧的差异化的需求。
TencentOS tiny是在今年9月18日正式开源的,发布一周就上了GitHub的热榜排名第二,目前获得star 3500+,Fork 800+,和国内外主流的MCU和硬件厂商合作,目前支持的硬件平台数已经超过了50+。

二、基于TencentOS tiny系统的落地解决方案

在与公司内外的合作之中,TencentOS tiny已经有了一些落地的物联网的解决方案,这里以两个典型的解决方案为例,来为大家说明。
第一个是智能货柜解决方案。TencentOS tiny提供了控制能力,配合中控系统和云端AI,完成了扫码开柜、取物、自动结算流程,实现了无人售货的场景。针对在真实场景中可能会出现一些不可控的情况,比如说货品的遮挡导致AI识别率低的情况,TencentOS tiny提供了重力感应能力,来辅助AI决策,提高了AI的识别率。
第二个解决方案是AI智慧农业种植的方案。在这个方案中,TencentOS tiny主要服务于两个环节,在环境感知侧,通过采集温湿度、酸碱度、含氧量、光照强度等环境数据,上报到IoT云平台,云端AI再根据环境数据作出一系列温室调节的指令。
比如说如果光照强度不够的话,决策算法会下发预期的光照强度值,调节控制侧接受到指令后,通过补光灯来调控。最终在资源使用最优的情况下,达到农作物增产的效果。TencentOS tiny提供的低功耗能力,延长设备寿命,使设备能长期稳定的运行。同时提供的多方案网络设备和安全链路的能力,保证了数据的安全。

三、基于TencentOS tiny的开发实践

接下来以一个小的的开发实践为例,让大家更好地了解TencentOS tiny。基于上文提到的农业解决方案,我们这次也做一个小型的端到端的农业场景的解决方案。
实现内容包括:环境感知功能,采集会场的温度、湿度和光照强度,以及做简单的设备控制。比如说开灯、打开电机,然后将数据上传到云端,同时会有一个小程序实现环境状态的查询和远程的控制。
这个实践的功能非常简单,主要是想让大家了解到:TencentOS tiny是如何从端侧到云端,最后到小程序?中间具体是如何打通的?以及使用这些产品能够给开发带来什么便利?
在实践之前,有必要先把整个实践的流程还有一些准备的工作给大家介绍一下。

1. 定制开发板

首先这个实践是基于TencentOS tiny的定制开发板,这个开发板是有很好的扩展性。如下图所示,左边的传感器扩展可以根据需要选择传感器。我们要选择的是一个农业场景的扩展板,它包括了温湿度和光照强度传感器,刚好可以模拟我们的场景。
右边你可以选择你需要的通信模组,支持NB-Iot, 2G,WiFi等,这里我们选择esp8266的WiFi模。我们的TencentOS tiny是跑在一个STM32L4的MCU上,我们希望TencentOS tiny可以从传感器这边采集到数据,再通过通讯模组上传到云端。
2. TencentOS tiny启动流程
为了让TencentOS tiny在这个开发板上跑起来。需要了解一下启动的流程:芯片上电之后,会做板级的初始化,然后进行内核的初始化;接着创建任务,编写任务逻辑;最后启动内核,开始任务调度。
TencentOS tiny的创建任务流程非常简单,需要先配置一下任务优先级,还需要配置一下它的任务栈大小,也支持使用ARM的接口标准CMSIS来创建任务。
这里有个问题,其实我们这个功能可能很简单,写个大循环或者裸跑的形式也可以实现,为什么一定要使用RTOS呢?
在简单场景下其实都可以,但设备端会有一些实时性的要求。如下图所示左边的这个例子,我们需要实现一个控制功能:在光照强度太低的时候,可以实时地打开补光灯。
这个例子可能还不够极端,假设这是一个烟雾传感器,它检测到了潜在的火灾,就需要立即报警,大循环顺序执行。如果这个时候有延迟的逻辑,这个实时性就无法保证了。
如果我们使用RTOS的多任务,将实时性要求比较高的业务逻辑抽取到高优先级的任务,让RTOS的高优先级抢占的调度来保证实时性。TencentOS tiny默认是高优先级强占的调度策略,意味着只要高优先级的任务不主动放弃CPU,它永远是强占CPU的
当然TencentOS也支持基于时间片的调度策略。使用多任务我们还可以享受一些异步同步的机制,比如说互斥锁、信号量、事件和队列,可以让业务逻辑解耦合,同时还可以享受RTOS提供的组件等等,这些都可以减少开发量。

3. 通信模块实现联网

物联网的解决方案,最重要的是要联网。我们使用的开发板是基于模组通信,复杂的网络协议是通过专业的模组来处理,业务逻辑也是跑在MCU上。如果业务逻辑需要用到网络通信的话,可以通过串口的AT指令来控制通行模组实现。
这样的好处是:业务开发不需要去关注底层复杂的网络协议栈,可以聚焦于业务的逻辑。可能存在的问题就是:因为通信模组的AT指令集可能不一样,假如更换模组的话,需要重新适配,而适配的过程也没有统一的标准,而且面向业务的通信接口也没有统一的约定。
TencentOS tiny针对这些问题,提供了一个AT的适配框架,AT框架实现了MCU和模组异步收发的一个通用的交互逻辑,面向业务的SAL层提供的一个简单统一的接口,这样的话,如果你需要适配一个新的模组,实际上就是基于AT的框架去实现SAL层的抽象接口。
通过这个适配之后,就为应用开发提供了简洁统一的类似Socket接口(connect, send, recv),无需关注底层的细节。另外我们在产品开发中,有可能会替换其他的通信模组,经过接口抽象后,下面的业务逻辑你都不用修改了,只需要重新适配好另外一个模组就可以了。

4.. 数据上云

通过通信模组实现联网之后,下一步我们就能够将这些数据上云。TencentOS tiny现在也集成了主流的一些物联网协议,包括腾讯云的SDK,只需要在端侧和云端做一些配置,数据上云后就可以享受腾讯云提供的云产品和服务,包括:设备管理,设备影子(保存设备的最新状态,和应用层隔离)等。还可以通过规则引擎将数据转发到腾讯云其他的服务,包括云数据库,消息队列,大数据处理等,产生更多的价值。
端到端的最后一环就是APP应用,主要指的是移动应用。对于物联网应用来说,小程序其实是非常好的选择,因为对于物联网应用来说,往往会有一个设备交互的需求。比如说一个没有联网的音箱你希望它连上WiFi的话,你需要提供WiFi热点、WiFi密码等信息,但是物联网设备是没有输入的入口的,这个时候就需要APP有蓝牙的能力。小程序依托于微信提供的接口,非常方便地调用手机的蓝牙、WiFi、NFC等硬件能力,实现设备交互的场景。
另外小程序本身易传播、无需安装,触手可得,用完即走等等这些灵活轻便的特性也是lot非常好的入口。此外现在小程序结合云开发可以降低很多开发成本,比如说云开发可以提供一些基础能力,包括云数据库、云存储、云函数,还免除了域名注册与备案流程,提供云的弹性伸缩、天然的CDN加速,原生集成微信SDK、微信开放接口免鉴权等,免去了很多接口开发的工作量。
所以总的来说,小程序&云开发依托微信提供的设备能力,以及腾讯云提供的云端资源,可以助力物联网应用高效,低成本的上线和迭代。

5. 最终实践

接下来开始实践,中间使用的源码工程,编译环境等都已经准备好了。首先实现第一个功能,我们采集数据,做实时的设备控制的反馈。基于读取传感器的值,我们要做一个控制逻辑:如果光照强度过低的话,我们打开灯,打开风扇;如果光照强度恢复的话我们把灯关了,再关闭风扇。
接下来我们做第二个任务,把这些传感器的数据快速地上传到云端,这是一个端云对接的例子。这里面的业务逻辑也很简单,首先是通过模组进行联网,联网成功之后,会进行一个MQTT的连接。我们选择对接到腾讯的IoT Hub,然后订阅设备主题,用于接受下行消息,下面是一个收发的逻辑。
因为设备接入云端需要设备鉴权和认证,所以有一些配置需要在云端配置好,打开腾讯云的控制台,对接到的是腾讯云的物联网通讯平台,需要先创建一个产品,然后还要新建设备,可以获取到设备的密钥,然后把密钥复制过来,在端侧配置。
此时AT模组已经开始联网了,再连接WiFi,连接成功以后,就开始向云平台上报现在的环境状态。打开云平台,可以看到设备已经在线了,能够看到设备影子里已经接收到上报的环境信息,同时腾讯云的物联网平台还提供了调试的工具,我们可以试一下下行是不是通的。我们再使用一个简单的json做交互,来控制灯的打开。
到这里,我们就已经通过TencentOS tiny提供的物联网组件非常方便的上云了。
接下来再对接小程序,将小程序打开,小程序主要实现两个非常简单的功能:第一个是刷新查询,然后实现简单的控制。主要是要实现两个云函数,一个是查询的云函数,需要我们事先先建一个。
对于APP来说,不需要关注整个设备的链路,因为设备已经上传到设备影子了,我们需要关注的只是如何来用腾讯的API,也即是如何调用API的设备?如何跟设备交互,那是腾讯云物联网平台做的事情。
阅读API的文档,腾讯云已经提供了非常完整的API,同时腾讯云提供了一些更方便的工具,它可以生成一些主流的语言的API SDK。对于小程序,我们使用Node JS,需要一些请求的参数,请求OK就意味着这个API可以直接用,自动生成API SDK代码,然后就可以直接用到小程序云函数了,同样的方式我们也可以实现控制。
通过TencentOS tiny和物联网通信平台以及小程序云开发可以快速实现了端到端的小应用,它的功能是非常简单的。还有一个好处是可以作为开发的一个解耦,对于APP开发来说,只需要关注云API;对于嵌入式开发来说,我只需要把数据上传到云就可以了,同时也是非常低成本的。
TencentOS tiny本身是开源免费的,云开发,包括腾讯云的物联网产品都有免费的配额。对于一些初创团队来说,这是一种快速上线而且低成本的开发方式。

四、Q & A

Q:老师你好,我想问一下对于开发者来说,是否可以基于TencentOS tiny的开发模板,直接设计好它的任务和程序用来做一些其他的解决方案和小程序?您一开始所说的TencentOS Tiny的易移植性是指的哪些方面?
A:TencentOS tiny对用户层提供了很多丰富的物联网的案例,用户可以直接用这些案例作拓展,只要硬件支持就可以了,目前国内外的主流芯片模组都已经支持了。即使不支持的话,因为TencentOS tiny的组件是松耦合的,移植起来也是很方便的,如果你有相应的嵌入式经验的话,半个小时就可以完成内核移植,而且GitHub上面有详细的移植文档,也可以参考一下。

讲师介绍

叶丰,腾讯工程师,目前主要负责基于TencentOS tiny的IoT解决方案相关项目,包括智慧零售、智慧农业等。