开发者学习笔记【阿里云物联网助理工程师认证(ACA):AliOS Things组件功能介绍(一)】
课程地址:https://edu.aliyun.com/course/3112060/lesson/18971
AliOS Things组件功能介绍(一)
课程目标
学习完本节课程后,你将能够:
1.了解AliOS Things有哪些常见的组件
2.了解AliOS Things常见的组件功能
一、AliOS Things组件功能介绍
1、键值对存储模块
在嵌入式系统应用中,经常会涉及到参数存储、过程变量存储等操作。如何有效、高速的实现这类操作,AliOS Things为此提供了一套更加直观、易于理解的解决方式及基于键值对的存储方式。
比如,要存储一个报警温度50度,可以通过定义一个键值对“Alarm temp”:50来进行存储。Alarm temp为关键字,50为值,组成了一队键值对。用户通过Alarm temp这个关键字即可快速的实现值的获取和重新写入。
KV模块将用户指定片内flash上区或EP pro虚拟为有一个存储空间,并且帮助用户管理键值对之间的映射关系,用户不需要关心具体值的去向,只需要通过对键的操作即可完成数据的存取。即用户直接通过key就可以快速的对值进行获取和重新写入,内部具体是如何实现用户不需要关心。这种方式相对于传统的读、修改、写的flash操作方式,为用户提供了近100倍的效率提升。
信用值对存储模块常用功能:
第一个是更新某个键的值,比如需要把Alarm temp的值50改成100,如果键不存在,就需要创建一个新的键。例如,修改Alarm temp50时,不小心写成了alarm,就会使alarm和100生成一个新的键值队存储到存储空间中。
第二个是获取某个键的值,可以通过key来快速的获取它对应的值;第三个是删除键值对,即删除一对键值对,删除后这个键值对不能进行访问和恢复,除非重新将这个键值对放入存储空间中。
第四个是以固定前缀删除键值对,如set/,有时不知道某个键的全称,只知道有一个前缀,就可以根据前缀来删除键值对。
第五个是加密、更新或者创建某个键的值。这个操作方式需要在menuconfig配置选项里面开启KV安全存储。
第六个是获取某个加密的键的值,加密存储后可以获得加密的值,否则只能存储,不能获取,这种操作方式同样需要在menuconfig配置选项中开启KV安全存储。
menuconfig选项中可以进行KV垃圾回收任务的优先级,默认的优先级是32,第二个是设置KV垃圾回收任务的栈大小,默认值是1024,也可以改成2048、4096等等。第三个,可以通过设置一条KV的key存储大小,默认的值是128个字节,即key的长度最长是128个字节,一旦超过就不能正常存放。第四个是可以设置一条KV中的value存储大小,默认大小是512个字节,如果实际应用中值比较大,需要占更多的空间,我们可以将配置调高。如果实际使用中不需要512个字节,比如只需要36个字节,我们可以改为36,否则会浪费空间。最后一个是设置开启KV安全存储,默认是不开启,开启之后,就可以加密、更新或者创建某个键的值,获取某个加密的键的值。
2、命令行交互模块
在日常嵌入式开发中,经常会用一套类似于Linux shell的交互工具来实现通过串口命令控制设备进入某种特定的状态,或者执行某个特定的操作,比如系统自检、模拟运行或者进入手动模式进行设备点动等。
AliOS Things中针对此类情况,原先实现了一套名为CLI(command-line interface)的命令交互工具。在提供基本的系统交互命令的基础上,额外支持用户自定义命令。即通过命令行交互模块,可以直接手动输入命令来执行特定的操作,这些命令可以是系统提供的命令,也可以是用户自定义的命令。
命令行交互模块常用功能有:
第一,初始化CLI模块,只需要系统启动时执行一次。
第二,停止并释放CLI模块系统资源。
第三,获取特殊的CLI打印标识符。
第四,CLI命令绑定,绑定需要执行的命令。
第五,CLI命令解除,解除之前绑定的命令。
第六,命令集绑定。可将多个命令合成一个命令集,绑定到CLI中去执行。
第七,解除命令集绑定,最后一个是更改CLI登录密码,修改密码前需要先打开CLI密码登录功能。
3、虚拟文件系统
随着嵌入式设备功能的发展,需要存储的数据也越来越多,数据的存放形式、数据的格式也越来越复杂,需要一种应对繁琐复杂数据的管理方式,即文件系统。
现有的一些文件系统,如FATFS、SPIFFS等都是不同类型的文件系统,具体的文件系统,都实现了一套数据的存储、分级组织、访问和获取等操作的抽象数据类型,向用户提供了一种底层数据访问的机制。数据的存储基本单位为文件,但在实际的物联网设备中,外接的扩展存储设备支持的文件系统不同,需要能够将多个具体的文件系统接口统一起来,用户通过统一的接口来实现底层不同文件系统的操作,减少产品的研发时间,提高代码的可移植性。
这个方式就是虚拟文件系统,它提供了一种对具体文件系统类型的一个抽象,可以将具体的多个文件系统接口统一起来。用户可以通过虚拟文件系统屏蔽各个底层具体文件系统的操作接口、数据类型差异。此外,用户也可通过注册接口将自己的文件系统挂载到VFS上面进行操作访问。虚拟文件系统的风格与UNMIX/Linux类似,根目录及目录分隔符都用斜杠来表示。
AliOS Things中虚拟文件系统的位置如下图所示。虚拟文件系统的API只供系统内核来内部使用不直接向用户提供。用户如何来通过虚拟文件系统访问底层不同类型的文件系统设备,AliOS Things系统给出的操作方案是,在虚拟文件系统上层再封装一套API,用户通过封装的这套API,间接的去使用虚拟文件系统来对底层不同文件系统的存储设备进行操作。常用的功能有虚拟文件系统VFS模块初始化、申请需要的系统资源、打开文件、关闭文件、文件内容读写、文件位置访问、文件及目录的增删改查、文件状态信息获取、挂载文件系统或者卸载文件系统等。
4、OTA组件
OTA组件主要实现远程对物联网设备升级,以前的物联网设备如果需要升级,需要重新在现场把升级代码刷写到设备的存储空间中才能完成设备的升级。
现在成千上万的物联网设备连接到物联网平台,如果还是使用人工方式对每一台物联网设备进行升级,所花费的人力物力成本非常巨大。如果能够远程对物联网设备进行升级的话,可以减少公司的很大开支,也使真正的物联网能够到来。所以OTA这种升级方式已经成为物联网设备的刚需功能, AliOS Things OTA组件有完备的升级方案,对于各种场景都能很好支持。除一般的整包升级外,还有高阶能力,比如压缩升级、差分升级和安全升级。
整包升级是对设备的是固件进行整体的升级,拆分升级对固件的某个模块或者某个功能进行升级,它的复杂性更高,它支持的升级通道有http、https、BLE、3G/4G、NB-IoT等。AliOS Things集成了https或者http模块,可以使用https协议将升级的数据安全的传送到物联网设备来实现升级。也可以通过不同的网,比如蜂窝网、蓝牙、NB-IoT实现设备和物联网平台的连接,打通二者之间的数据传输通道,实现物联网设备远程升级。此外,还支持网关及子设备支持、连接型模组升级以及非连接主设备的间接升级。
OTA还有完备的配套工具,比如差分工具、本地签名工具、y modem辅助升级工具、多固件打包工具等。
OTA组件的接口第一个是初始化OTA模块。第二个是固件下载接口,是完成OTA固件的主要流程。第三个是OTA hal层初始化,主要完成的工作是OTA flash下载分区的初始化等操作。第四个接口是写固件到OTA存储区,第五个是读取OTA存储区固件数据,第六个可以设置保存bootload相关的固件及升级状态信息。第七个检测OTA升级是否升级成功。第八个接口功能是获取固件版本号。
5、阿里云物联网平台连接
阿里云物联网平台连接模块是提供一个link SDK,它是由阿里云提供的设备厂商,由设备厂商集成到设备上,再通过SDK将设备安全的接入阿里云IoT物联网平台,继而让设备可以被阿里云IoT物联网平台进行管理。
设备需要支持TCP/IP协议栈才能集成link SDK。像Zigbee、433、KNX这样的非IP设备,需要通过网关设备接入到阿里云IoT物联网平台,所以需要在网关设备上集成link SDK。
观看下图,不同的设备可以根据具体的物联网需求选择不同语言的SDK,有C语言、Note JS、安卓,通过SDK将设备接入到阿里云IoT物联网平台,快速实现云端一体化开发,阿里云IoT物联网平台在云端提供智能生活、智能制造、智能城市、智能人居等多个行业解决方案或者服务。
通过link SDK接入到阿里云IoT物联网平台的设备,就可以被这些行业解决方案管理。有的行业解决方案为了实现简化设备接入的难度或者在设备端增加了特殊的业务逻辑,比如在设备端需要边缘计算等,会将link SDK集成之后输出针对行业的设备端SDK,比如针对生活场景的飞燕设备SDK,以及针对工业场景的linkdge SDK。这种情况下,使用行业解决方案或者服务提供的设备端SDK进行设备开发。
此外,还提供了linkkitapp,它是一些例子程序。设备商可以利用历程开发诸如灯、插座之类的智能单品,也可以使用该历程开发具有此设备接入能力的网关,比如Zigbee网关。阿里云物联网平台连接模块的第一个子模块是设备本地控制模块,它的功能有设备本地上线通告、设备本地属性/事件数据订阅、设备本地控制命令接收与处理、子设备本地控制。第二个子模块是云端连接模块,它可以使用MQTT连接阿里云IoT平台,也可以使用CoAP连接阿里云IoT平台,可以使用HTTP或者HTTPS连接阿里云IoP平台,也可以使用HTTP2来连接阿里云物联网平台,可以配置MQTT连接服务器站点,云端连接模块也支持云端服务器站点动态选择,支持上报SDK版本号,支持iTLS,支持智能单品一型一密或者动态注册四元组。
设备物模型模块具备设备属性、设备事件、设备服务支持。具备TLS静态集成、TLS动态下拉支持。服务提供模块包括设备OTA远程升级、WiFi配网支持、WiFi以太网设备绑定token生成以及通告,支持设备reset操作。在子设备管理框架中,可以添加或者删除子设备,禁用或者解禁子设备,支持子设备物模型,包括子设备属性、服务事件的代理。
link SDK试用产品示例中第一个是生活类单品,这类设备大多可以通过WiFi连接家庭中的无线路由器。通过互联网与阿里云IOT物联网平台进行通信。常见的设备有电子猫眼、智能锁、风扇、扫地机器人、空调、冰箱、接线板、空气净化器、取暖器、窗帘、灯具、电热水器、油烟机、微波炉、烤箱等等。此类产品的网络接入示意图如下。支持WiFi的设备在集成link SDK后,通过WiFi连接到家里的无线路由器,再通过无线路由器连接到互联网,与阿里云IoT物联网平台进行通信。
网关类产品,有些设备不支持TCP/IP协议,无法直接集成link SDK,这些设备可以通过集成了link SDK的网关接入阿里云IoT物联网平台,常见的网关有Zigbee网关、蓝牙网关、433网关、KNX网关等。此外,Link SDK提供了子设备管理能力,网关通过集成link SDK可以将自己连接的非IP设备及子设备通过自己连接到阿里云IoT物联网平台,在子设备上不需要做任何软件改动。
下图是接入阿里云IoT平台的示意图,例如Zigbee、BT、KNX不支持TCP协议站,没有IP。但可以接入各自的网关,在网关中集成link SDK,通过网关将这些设备接入到阿里云IoT。
蜂窝网接入产品,这类产品主要使用电信运营商的蜂窝网连接到IoT的产品,多应用于农业、城市等覆盖地域较广的场景,或者处于移动的场景。比如物流运输车、自动售货机、气象收集系统、水文收集系统、智能电表、智能水表等等。下图是此类产品的接入网络示意图,在支持蜂窝网的设备上集成link SDK,通过基站连接到阿里云IoT平台来完成设备和IOT平台的通信。
6、socket组件
socket通常也称作套接字,是支持TCP/IP协议的网络通信应用的基本操作单元,可以用来实现网间不同虚拟机或者不同计算机之间的通信。如果需要实现网络上两台设备之间的通信,无论是局域网还是管域网,都需要通过socket进行通信。
基于TCP/IP协议的应用程序,通信的时候在客户端和服务器各自创建一个socket,通过操作各自的socket完成客户端和服务器的连接以及数据传输的任务。socket的本质是编程接口是对底层TCP/IP的封装,是对底层通讯的封装。两台设备间进行连接通讯时,只需要一个连接函数或者一个收发信息的函数就可以完成连接和信息收发。底层具体如何实现我们不需要了解,开发者也不需要去面对复杂的TCP/IP协议组,只需要进行相应的了解即可。开发时只需要调用几个较简单的socket API就可以完成网络通讯。而AliOS Things提供了一整套类似于BSD Socket API的接口。
简单介绍一下BSD Socket AP接口:
第一个创建一个socket套接字,如果是基于udp通信,后续客户端和服务器直接使用socket来进行收发数据即可,如果是基于TCP通信,客户端连接服务器和后续与服务器进行数据交互都是通过socket来实现。
第二个将端口号和IP地址绑定到指定套接字上面,Socket要进行远程通信、远程连接,需要知道对方的IP地址,通过IP地址找到对方,端口号的作用是用来识别应用程序,比如通过某个IP找到某台电脑,但是这台电脑上有很多应用程序,应该与哪个应用程序进行通信,就可以通过端口号来进行指定。端口号是一个整数,用来标识要通信的应用程序。
第三个是监听接口,一般用于服务器,让服务器的ET处于监听状态,判断是否有客户端连接。
第四个是接收连接请求接口,是在服务器上的一个接口,客户端连接时,服务器就需要接收客户端连接。
第五个是建立连接是客户端的接口,通过Socket去连接指定端口和IP的服务器。
下一个是面向连接的发送数据和面向连接的接收数据,这两个接口是在基于TCP的传输情况下使用,后两个是无连接的发送数据和无连接的接收数据。这两个接口是基于udp的传输方式使用的。
TCP是一种基于连接的、可靠的字符流的通讯方式,而udp是一种无连接的、不可靠的数据报通讯方式。后面的一些接口还有查询它的可读性、可写性以及查询状态错误信息。下面是关闭socket,当不需要通信时,可以将socket关闭掉。下面是按设置关闭套件字,可以关闭读、关闭写,也可以同时关闭读和写。下一个是通过域名获取主机的IP地址等信息。这个接口通过指定的域名来返回主机的IP地址信息,比如指定的域名为www.taobao.com,它就会获得淘宝对应的IP地址信息。下一个接口是获取本地主机的信息和获取连接的远程主机的信息、主机的名字、IP等等。下一个是设置套接字控制模式,比如可以设置套接则为阻塞模式或者非阻塞模式。下一个是设置socket的属性,比如是否允许本地地址重复使用、是否保持连接在线、是否允许发送和接收广播信息等等。下面是获取socket属性。