uData 框架设计之初的思想是基于传统sensorhub概念基础之上的,结合IoT的业务场景和AliOS Things物联网操作系统的特点设计而成的一个面对IoT的感知设备处理框架。uData主要分kernel和framework两层,kernel层主要是负责传感器驱动和相关的静态校准,包括轴向校准等;framework层主要是负责应用服务管理、动态校准管理和对外模块接口等。

功能特性

  • 数据上云
  • 用户数据订阅
  • 用户数据退订

udata架构图:

模块依赖

  • device.sensor
  • cjson (optional)
  • uData为传感器管理架构,依赖于底层sensor模块;而uData的service初始化参数可采用数组或json格式来配置,后者依赖cjson模块。

使用指南

developerkit板上已集成了多款传感器,建议开发者采用该单板进行体验和调试。

包含头文件

#include "sensor/sensor.h"
#include "udata/udata.h"

API列表

udata_init uData模块初始化(只需在APP中初始化一次即可)
udata_subscribe uData服务订阅
udata_unsubscribe uData服务退订
udata_report_publish 订阅的uData服务数据获取

API详情

int udata_init(void)

返回参数

0 执行成功
其他 执行错误

调用示例

int ret = 0;
ret = udata_init();

int udata_subscribe(udata_type_e type)

输入参数

udata_type_e type 订阅的服务类型

返回参数

0 执行成功
其他 执行错误

调用示例

/* 订阅温度服务 */
int ret = 0;
ret = udata_subscribe(UDATA_SERVICE_TEMP);

int udata_unsubscribe(udata_type_e type)

输入参数

udata_type_e type 退订的服务类型

返回参数

0 执行成功
其他 执行错误

调用示例

/* 退订温度服务 */
int ret = 0;
ret = udata_unsubscribe(UDATA_SERVICE_TEMP);

int udata_report_publish(udata_type_e type, void *pdata)

输入参数

udata_type_e type 需要读取的服务类型
void *pdata 服务类型数据需要存放的地址

返回参数

0 执行成功
其他 执行错误

调用示例

temperature_data_t temp;
int ret = 0;
ret = int udata_report_publish(UDATA_SERVICE_TEMP, &temp);

配置文件

uData支持json格式的参数配置,可参考以下配置(udata_config.json):

"udata_config_desc": [
    {
        "service_config": [
            {
                "type": "UDATA_SERVICE_ACC",      # service类型
                "task": "shared",                 # service任务配置, 简单算法可采用共享任务--'shared';复杂算法可独立创建任务--'exclusive';
                "devices": [                      # service依赖的物理传感器
                    {                             
                        "tag": "TAG_DEV_ACC",     # 传感器tag
                        "index": 0,               # 传感器索引
                        "interval": 1000          # 传感器数据采样周期, 单位:ms
                    }
                ]
            }
        ],
        "data_to_cloud": [                        
            {
                "dtc_enable": "off",              # 数据上云默认关闭
                "data_type": "UDATA_FLOAT",       # 上传的数据类型,UDATA_UINT32, UDATA_INT32, UDATA_FLOAT三种类型
                "coefficient": 1000,              # 上传数据缩小的比例系数
                "dtc_interval": 4000,             # 传感器数据周期, 单位:ms,建议与数据采样周期成比例关系
                "name": "Accelerometer",          # 上传数据名称;对于结构体类型数据,该处为结构体名称
                "sub_para": [
                    {
                        "name": "x"               # 对于结构体类型数据,该处为数据元素子名称
                    },
                    {
                        "name": "y"
                    },
                    {
                        "name": "z"
                    }
                ]
            }
        ]
    }
]

或使用C语言格式的配置(udata_config.c):

/*sensor tag -- sensor index -- sampling period(ms)  */
udata_tag_para_st g_dev_acc[] = {
{TAG_DEV_ACC, 0, 1000},
};
/*service type -- 是否独立任务运行 --  依赖的sensor个数 -- sensor配置数组 */
udata_service_para_t g_service_para[] = {
{UDATA_SERVICE_ACC, false, UDATA_ARRAY_NUM_CALC(g_dev_acc),&g_dev_acc[0]},
};

配置方式选择如下所示:

上云配置

对于想通过该单板连接阿里云的用户,可在link develop平台上创建设备,设备属性如下所示:在文件app\example\udataapp\mqtt\mqtt_example.c中修改上述设备的三元组。

编译运行

本地调试

通过以下命令编译工程,可进行本地调试:

aos create project -b developerit -t udataapp udataapp
cd udataapp
aos make

运行成功后,可在本地串口看到以下打印输出:

数据上云

通过以下命令编译工程,可进行本地调试:

aos make dtc=mqtt

配网命令: netmgr connect ssid passwd通过以下命令可以开启加速度传感器上云功能:

加速度:acc=1
磁力计:mag=1
陀螺仪:gyro=1
环境光:als=1
接近光:ps=1
温度计:temp=1
湿度计:humi=1
气压计:baro=1

运行成功后,可在云端可以看到以下数据上传: