导语 | 近日,云+社区技术沙龙“腾讯开源技术”圆满落幕。本次沙龙邀请了多位腾讯技术专家,围绕腾讯开源与众多开发者进行探讨,深度揭秘了腾讯开源项目TencentOS tiny、TubeMQ、Kona JDK、TARS以及MedicalNet。本文是叶丰老师的演讲整理,编辑:涛涛。算法
本文要点:数据库
TencentOS tiny开源项目简介json
TencentOS tiny loT解决方案小程序
TencentOS tiny开发实践安全
近期会有物联网相关活动上线,大量开发板免费领!扫码关注「云加社区」,及时获知最新动态。微信
1、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+。
2、基于TencentOS tiny系统的落地解决方案
在与公司内外的合做之中,TencentOS tiny已经有了一些落地的物联网的解决方案,这里以两个典型的解决方案为例,来为你们说明。
第一个是智能货柜解决方案。TencentOS tiny提供了控制能力,配合中控系统和云端AI,完成了扫码开柜、取物、自动结算流程,实现了无人售货的场景。针对在真实场景中可能会出现一些不可控的状况,好比说货品的遮挡致使AI识别率低的状况,TencentOS tiny提供了重力感应能力,来辅助AI决策,提升了AI的识别率。
第二个解决方案是AI智慧农业种植的方案。在这个方案中,TencentOS tiny主要服务于两个环节,在环境感知侧,经过采集温湿度、酸碱度、含氧量、光照强度等环境数据,上报到IoT云平台,云端AI再根据环境数据做出一系列温室调节的指令。
好比说若是光照强度不够的话,决策算法会下发预期的光照强度值,调节控制侧接受到指令后,经过补光灯来调控。最终在资源使用最优的状况下,达到农做物增产的效果。TencentOS tiny提供的低功耗能力,延长设备寿命,使设备能长期稳定的运行。同时提供的多方案网络设备和安全链路的能力,保证了数据的安全。
3、基于TencentOS tiny的开发实践
接下来以一个小的的开发实践为例,让你们更好地了解TencentOS tiny。基于上文提到的农业解决方案,咱们此次也作一个小型的端到端的农业场景的解决方案。
实现内容包括:环境感知功能,采集会场的温度、湿度和光照强度,以及作简单的设备控制。好比说开灯、打开电机,而后将数据上传到云端,同时会有一个小程序实现环境状态的查询和远程的控制。
这个实践的功能很是简单,主要是想让你们了解到:TencentOS tiny是如何从端侧到云端,最后到小程序?中间具体是如何打通的?以及使用这些产品可以给开发带来什么便利?
在实践以前,有必要先把整个实践的流程还有一些准备的工做给你们介绍一下。
首先这个实践是基于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提供的组件等等,这些均可以减小开发量。
物联网的解决方案,最重要的是要联网。咱们使用的开发板是基于模组通讯,复杂的网络协议是经过专业的模组来处理,业务逻辑也是跑在MCU上。若是业务逻辑须要用到网络通讯的话,能够经过串口的AT指令来控制通行模组实现。
这样的好处是:业务开发不须要去关注底层复杂的网络协议栈,能够聚焦于业务的逻辑。可能存在的问题就是:由于通讯模组的AT指令集可能不同,假如更换模组的话,须要从新适配,而适配的过程也没有统一的标准,并且面向业务的通讯接口也没有统一的约定。
TencentOS tiny针对这些问题,提供了一个AT的适配框架,AT框架实现了MCU和模组异步收发的一个通用的交互逻辑,面向业务的SAL层提供的一个简单统一的接口,这样的话,若是你须要适配一个新的模组,实际上就是基于AT的框架去实现SAL层的抽象接口。
经过这个适配以后,就为应用开发提供了简洁统一的相似Socket接口(connect, send, recv),无需关注底层的细节。另外咱们在产品开发中,有可能会替换其余的通讯模组,通过接口抽象后,下面的业务逻辑你都不用修改了,只须要从新适配好另一个模组就能够了。
经过通讯模组实现联网以后,下一步咱们就可以将这些数据上云。TencentOS tiny如今也集成了主流的一些物联网协议,包括腾讯云的SDK,只须要在端侧和云端作一些配置,数据上云后就能够享受腾讯云提供的云产品和服务,包括:设备管理,设备影子(保存设备的最新状态,和应用层隔离)等。还能够经过规则引擎将数据转发到腾讯云其余的服务,包括云数据库,消息队列,大数据处理等,产生更多的价值。
端到端的最后一环就是APP应用,主要指的是移动应用。对于物联网应用来讲,小程序实际上是很是好的选择,由于对于物联网应用来讲,每每会有一个设备交互的需求。好比说一个没有联网的音箱你但愿它连上WiFi的话,你须要提供WiFi热点、WiFi密码等信息,可是物联网设备是没有输入的入口的,这个时候就须要APP有蓝牙的能力。小程序依托于微信提供的接口,很是方便地调用手机的蓝牙、WiFi、NFC等硬件能力,实现设备交互的场景。
另外小程序自己易传播、无需安装,触手可得,用完即走等等这些灵活轻便的特性也是lot很是好的入口。此外如今小程序结合云开发能够下降不少开发成本,好比说云开发能够提供一些基础能力,包括云数据库、云存储、云函数,还免除了域名注册与备案流程,提供云的弹性伸缩、自然的CDN加速,原生集成微信SDK、微信开放接口免鉴权等,免去了不少接口开发的工做量。
因此总的来讲,小程序&云开发依托微信提供的设备能力,以及腾讯云提供的云端资源,能够助力物联网应用高效,低成本的上线和迭代。
接下来开始实践,中间使用的源码工程,编译环境等都已经准备好了。首先实现第一个功能,咱们采集数据,作实时的设备控制的反馈。基于读取传感器的值,咱们要作一个控制逻辑:若是光照强度太低的话,咱们打开灯,打开风扇;若是光照强度恢复的话咱们把灯关了,再关闭风扇。
接下来咱们作第二个任务,把这些传感器的数据快速地上传到云端,这是一个端云对接的例子。这里面的业务逻辑也很简单,首先是经过模组进行联网,联网成功以后,会进行一个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自己是开源免费的,云开发,包括腾讯云的物联网产品都有免费的配额。对于一些初创团队来讲,这是一种快速上线并且低成本的开发方式。
4、Q & A
Q:老师你好,我想问一下对于开发者来讲,是否能够基于TencentOS tiny的开发模板,直接设计好它的任务和程序用来作一些其余的解决方案和小程序?您一开始所说的TencentOS Tiny的易移植性是指的哪些方面?
A:TencentOS tiny对用户层提供了不少丰富的物联网的案例,用户能够直接用这些案例做拓展,只要硬件支持就能够了,目前国内外的主流芯片模组都已经支持了。即便不支持的话,由于TencentOS tiny的组件是松耦合的,移植起来也是很方便的,若是你有相应的嵌入式经验的话,半个小时就能够完成内核移植,并且GitHub上面有详细的移植文档,也能够参考一下。
讲师介绍
叶丰,腾讯工程师,目前主要负责基于TencentOS tiny的IoT解决方案相关项目,包括智慧零售、智慧农业等。