赞
踩
1.开发芯片:低功耗蓝牙芯片PHY6212
2.软件开发套件:低功耗蓝牙芯片PHY6212提供的
3.开发套件特点:以YOC平台为基础,对蓝牙MESH协议栈做了深度优化和整合,为开发者提供了通用的MESH组件,涵盖了SIG MESH Model和私有Model以及丰富的芯片外设驱动。
- Mesh Node组件
- Mesh Models组件
- Gennie APP组件
1.Mesh Node 支持Mesh节点配置和Model消息的接收功能。
- 组件的API列表
- ble_mesh_node_init((*node_config_t)g_node_param ) //Mesh Node 组件的初始接口
- ble_mesh_node_OOB_input_num() //配网过程中,要求输入数字的接口
- ble_mesh_node_OOB_input_string() //配网过程中,要求数据字符串的接口
其中ble_mesh_node_init()函数的使用:(初始化Node节点,主要配置节点的设备名称,UUID,事件的回调)
- #define DEVICE_NAME "YOC Light NODE"
- #define LIGHT_DEV_UUID {0xC0,0xC1,0xC0,0xC2,0xC3,0xC9,0xC0,0xC1,0xC0,0xC2,0xC3,0xC9,0xC0,0xC1,0xC0,0xC2,0xC3,0xC9}
- node_config_t g_node_param={
- //设置当前为设备节点
- .role =NODE, //设置当前为设备节点
- .dev_uuid=LIGHT_DEV_UUID, //设置节点的UUID
- .dev_name=DEVICE_NAME, //设置节点的名称
- .dev_model_cb=app_event_cb, //注册Model的事件回调函数
- .dev_prov_cb=app_prov_event_cb, //注册Provision的事件处理回调函数
- .rssi_report_enable=0 //RSSI上报功能使能标识,默认关闭
- }
- //MESH的Node初始化
- ret=ble_mesh_node_init(&g_node_param);
-
-
- //回调处理函数
- void app_prov_event_cb(mesh_prov_event_en event,void *p_arg)
- {
- switch(event){
- //配网成功,亮绿灯
- case BT_MESH_EVENT_NODE_PROV_COMP:{
- if(p_arg){
- mesh_node_local *node =(mesh_node_local_t *)p_arg;
- LOGI(TAG,"prov complete %04x",node->prim_unicast);
- prov_succeed_flag=1;
- led_control(led_dev,COLOR_GREEN,-1,-1);
- }
- }
- break;
- //节点复位,绿灯闪烁
- case BT_MESH_EVENT_NODE_REST:{
- LOGI(TAG,"node reset");
- led_control(led_dev,COLOR_GREEN,200,200);
- }
- break;
- //配网要求输入数字,通过其他方式比如按键,获取数字后,调用//ble_mesh_OOB_input_num接口输入
- case BT_MESH_EVENT_NODE_OOB_INPUT_NUM:
- {
- if(p_arg)
- {
- LOGI(TAG,"oob input num size :%d",*(uint8_t)p_arg);
- }
- }
- break;
- //配网要求输入字符串,通过其他方式,比如其他方式,例如按键,获取字符串后,调用ble_mesh_node_OOB_input_string接口输入
- case BT_MESH_NODE_OOB_INPUT_STRING:{
- LOGI(TAG,"oob input string size :%d",*(uint8_t)p_arg);
- }
- break;
- default:
- break;
-
- }
- }

2.Mesh Models:
该组件提供了Generic Onoff,Generic Level ,Light Lightness,Light CTL的Sever/Client Models,Vendor Model.
- ble_mesh_model_init()//model模块的初始化函数
- ble_mesh_model_get_comp_data()//获取Mesh Model组件的Models结构
- ble_mesh_model_set_cb()//设置Mesh Model组件的回调函数
- ble_mesh_model_find()//查找指定的Mesh Model
- ble_mesh_model_status_get()//获取指定model的状态
-
PS:初始化Mesh Model组件代码:
- static struct bt_mesh_model elem0_root_models[]={
- //configuration Sever Model 必选Model
- BT_MESH_MODEL_CFG_SRV_NULL(),
- //Health Server Model ,可选Model
- BT_MESH_MODEL_HEALTH_SRV_NULL(),
- //Generic Onoff Server Model
- BT_MESH_MODEL_GEN_ONOFF_SRV_NULL(),
- }
- //定义composition data
- static const struct bt_mesh_comp mesh_comp={
- .cid=0x01A8,
- .elem=elements,
- .elem_count=ARRAY_SIZE(elements),
- }
- //组件初始化
- ret=ble_mesh_model_init(&mesh_comp);
- //Mesh Model 回调函数注册,需要注意如果使用Mesh Node 组件,不需要注册回调,通过Node 组件的中的user_model_cb回调获取Model信息
- ble_mesh_model_set_cb(app_event_cb);
-
- void app_event_cb(mesh_model_event_en event,void *p_arg)
- {
- switch(event){
- case BT_MESH_MODEL_ONOFF_SET:{
- if(p_arg){
- model_message message=*(model_message *)p_arg;
- S_ELEM_STATE *elem_state =(S_ELEM_STATE)message.user_data;
- //解析数据,并控制等的开关
- if(elem_state->state.onoff[T_TAR])
- {
- //开灯
- led_set_status(led2,true);
- }else{
- led_set_status(led2,false);
- }
- }
- }
- break;
- default:
- break;
- }
- }

3.Genie APP
天猫精灵组件,支持天猫MESH Models,天猫精灵的接入,三要素写入/存储/获取功能。
gennie_init();
三要素是:
//设置三要素
set_tt <product id> <key> <mac address>
//获取三要素
get_tt
1.应用初始化:应用入口函数app_main()
- 板子初始化
- MESH灯Model定义
- Mesh节点初始化,注册Model事件回调处理函数
2.设备模型定义
Configuration Server Model :用于存储节点的MESH网络配置
Health Server Model:用于MESH网络诊断
Generic OnOff Server Model:用于获取、控制设备的开关属性
Generic Level Server Model:用于获取、控制设备的挡位属性
Generic Lightness Server Model:用于获取、控制设备的亮度属性】
Generic CTL Server Model/Generic CTL Setup Server Model/Generic CTL Temperature Server Model : 用于调节设备的色温属性。
3.MESH Models 事件回调处理
1.应用初始化代码:
- /*定义设备名称,使用手机APP扫描时可以看到该名称*/
- #define DEVICE NAME "YoC Light"
- /*定义设备UUID */
- #define LIGHT DEV_ UUID {0xcf, 0xa0, 0xe3, 0x7e, 0x17, 0xd9, 0x11, 0xe8, 0x86,
- 0xd1, 0x5f, 0x1c, 0xe2, 0xBa, 0xde, 0x02 }
- node_ config_ t g_ node_ param ={
- /* 设置当前为设备节点 */
- .role = NODE,
- /* 设置节点的UUID */
- dev uuid = LIGHT DEV UUID,
- /* 设置节点的 Device Name */
- dev name = DEVICE NAME ,
- /*注册Model的事件处理回调函数*/
- .user_ model_ cb = app_ event_ cb,
- /*注册Provision的事件处理回调函数*/
- .user_ prov_ cb = NULL,
- /* RSSI上报功能使能标识,默认关闭*/
- .rssi_ report enable = 0,
- };
- int app_ main(int argc, char *argv[])
- /*板级初始化,各业务模块初始化*/
- board yoc_ init() ;
-
- /* MESH灯Model定义,根据灯实际功能定义,如开关、亮度、色温控制等*/
- ret = app_ mesh_ composition init();
-
- /* MESH节点初始化,设置节点UUID、Device Name并注册Model事件回调函数*/
- ret = ble_ mesh_ node_ init (&g_ node_ param) ;
-
- /*信号量初始化*/
- aos_ sem new(&sync sem, 0) ;
-
- while (1) {
- /*等待信号量*/
- aos_ sem wait (&sync_ sem, AOS_ WAIT_ FOREVER) ;
- return 0;
- }
- }

2.设备模型定义代码:
- static struct bt_ mesh_ model elem0_ root_ models[] ={
- /*本设备节点的Configuration Server 模型定义*/
- BT_ MESH MODEL CFG_ SRV_ NULL() ,
- /*本设备节点的Health Server模型定义*/
- BT_ MESH MODEL HEALTH SRV_ NUL(),
- /*本设备节点的Generic OnOff Server模型定义*/
- BT_ MESH MODEL_ GEN _ONOFF SRV_ NULL(),
- /*本设备节点的Generic Level Server模型定义*/
- BT_ MESH MODEL_ GEN LEVEL SRV_ NULL() ,
- /*本设备节点的Generic Lightness Server模型定义*/
- BT MESH MODEL LIGHTNESS_ SRV_ NULL() ,
- /*本设备节点的Generic CTL Server模型定义*/
- AT MRSH monrt._ CTT. SRV_ NITT.T.L,
- /*本设备节点的Generic CTL Setup Server模型定义*/
- BT_ MESH MODEL CTL SETUP SRV NULL() ,
- /*本设备节点的Generic CTL Temperature Server模型定义*/
- BT_ MESH MODEL CTL TEMP SRV_ NULL(),
- };
- /*本设备节点的Vendor Models模型定义*/
- static struct bt_ mesh. model elem0_ vnd_ models[] ={
- BT MESH MODEL VENDOR SRV_ NULL,
- };
-
- /*本设备节点的Elements定义*/
- static struct bt_ mesh_ elem elements[] = {
- BT_ MESH_ ELEM(O, elem0 root models, elem0_ vnd models, 0),
- };
- /*本设备节点的Composition Datas定义,定义CompanyID、 Elements */
- static const struct bt_ mesh_ comp mesh_ comp = {
- /*设置设备节点的CompanyID */
- .cid = 0x01A8 ,
- /* 设置设备节 点的Elements */
- .elem = elements,
- /*设置设备节点Elements的个数*/
- .elem count = ARRAY_ SIZE (elements),
- };
-
- int app_ mesh_ composition init()
- {
- int ret;
- /* Models 初始化*/
- ret = ble_ mesh_ model_ init (&mesh. comp) ;
- return ret;
- }

3.MESH Models 事件回调处理
- void app_ event_ cb (uint16_七event, void *p_ arg)
- switch (event) {
- /*控制OnOff属性★/
- case BT MESH MODEL ON0FF SET:{
- if (p_ arg){
- model_ message message =* (model_ message *)p_ arg;
- S_ ELEM STATE *elem_ state = (S_ ELEM STATE *)message.user data;
- /*根据数据包中OnOff值,控制OnOff属性*/
- if (elem_ state->state. onoff [T_ TAR]) {
- /*控制LED灯亮*/
- led_ set_ status (1ed2,true) ;
- } else{
- /*控制LED灯灭*/
- led_ set_ status(led2, false) ;
- }
- }
- break;
- /*通过Vendor Model,发送私有数据*/
- case BT MESH MODEL VENDOR MESSAGES:{
- if (p_ arg) {
- model_ message message =*(model_message *)p_ arg;
- char data _out[80] = {0};
- }
- }
- break;
- default:
- break;
- }

PS:网络中需要存在多个节点时,需要更改代码中设备UUID后编译烧录该镜像,并烧录
镜像时设置不同的MAC地址,避免组网出现问题。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。